00001
00002
00003
00004
00005
00006
00007
00008
00009
00010 #ifndef __IPPENALTYLSACCEPTOR_HPP__
00011 #define __IPPENALTYLSACCEPTOR_HPP__
00012
00013 #include "IpBacktrackingLSAcceptor.hpp"
00014 #include "IpPDSystemSolver.hpp"
00015
00016 namespace Ipopt
00017 {
00018
00022 class PenaltyLSAcceptor : public BacktrackingLSAcceptor
00023 {
00024 public:
00030 PenaltyLSAcceptor(const SmartPtr<PDSystemSolver>& pd_solver);
00031
00033 virtual ~PenaltyLSAcceptor();
00035
00037 virtual bool InitializeImpl(const OptionsList& options,
00038 const std::string& prefix);
00039
00046 virtual void Reset();
00047
00051 virtual void InitThisLineSearch(bool in_watchdog);
00052
00057 virtual void PrepareRestoPhaseStart();
00058
00063 virtual Number CalculateAlphaMin();
00064
00070 virtual bool CheckAcceptabilityOfTrialPoint(Number alpha_primal);
00071
00083 virtual bool TrySecondOrderCorrection(Number alpha_primal_test,
00084 Number& alpha_primal,
00085 SmartPtr<IteratesVector>& actual_delta);
00086
00093 virtual bool TryCorrector(Number alpha_primal_test,
00094 Number& alpha_primal,
00095 SmartPtr<IteratesVector>& actual_delta);
00096
00101 virtual char UpdateForNextIteration(Number alpha_primal_test);
00102
00105 virtual void StartWatchDog();
00106
00109 virtual void StopWatchDog();
00110
00117 bool IsAcceptableToCurrentIterate(Number trial_barr, Number trial_theta,
00118 bool called_from_restoration=false) const;
00119
00121 bool IsAcceptableToCurrentFilter(Number trial_barr, Number trial_theta) const;
00123
00126 static void RegisterOptions(SmartPtr<RegisteredOptions> roptions);
00128
00129 private:
00139 PenaltyLSAcceptor(const PenaltyLSAcceptor&);
00140
00142 void operator=(const PenaltyLSAcceptor&);
00144
00146 Number CalcPred(Number alpha);
00147
00149
00150
00151 static bool Compare_le(Number lhs, Number rhs, Number BasVal);
00152
00156 Number nu_init_;
00158 Number nu_inc_;
00160 Number eta_;
00162 Number rho_;
00164 Index max_soc_;
00168 Number kappa_soc_;
00170
00175 Number reference_theta_;
00178 Number reference_barr_;
00181 Number reference_gradBarrTDelta_;
00183 Number reference_dWd_;
00185 SmartPtr<const Vector> reference_JacC_delta_;
00187 SmartPtr<const Vector> reference_JacD_delta_;
00190 Number reference_pred_;
00192 Number watchdog_theta_;
00194 Number watchdog_barr_;
00196 Number watchdog_pred_;
00198
00202 Number nu_;
00204 Number last_nu_;
00206
00209 SmartPtr<PDSystemSolver> pd_solver_;
00211 };
00212
00213 }
00214
00215 #endif