00001 // Copyright (C) 2008 International Business Machines and others. 00002 // All Rights Reserved. 00003 // This code is published under the Common Public License. 00004 // 00005 // $Id: IpPenaltyLSAcceptor.hpp 1327 2008-09-18 19:01:17Z andreasw $ 00006 // 00007 // Authors: Andreas Waechter IBM 2008-04-04 00008 // derived file from IpFilterLSAcceptor.hpp 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 00060 virtual Number CalculateAlphaMin(); 00061 00067 virtual bool CheckAcceptabilityOfTrialPoint(Number alpha_primal); 00068 00080 virtual bool TrySecondOrderCorrection(Number alpha_primal_test, 00081 Number& alpha_primal, 00082 SmartPtr<IteratesVector>& actual_delta); 00083 00090 virtual bool TryCorrector(Number alpha_primal_test, 00091 Number& alpha_primal, 00092 SmartPtr<IteratesVector>& actual_delta); 00093 00098 virtual char UpdateForNextIteration(Number alpha_primal_test); 00099 00102 virtual void StartWatchDog(); 00103 00106 virtual void StopWatchDog(); 00107 00114 bool IsAcceptableToCurrentIterate(Number trial_barr, Number trial_theta, 00115 bool called_from_restoration=false) const; 00117 00120 static void RegisterOptions(SmartPtr<RegisteredOptions> roptions); 00122 00123 private: 00133 PenaltyLSAcceptor(const PenaltyLSAcceptor&); 00134 00136 void operator=(const PenaltyLSAcceptor&); 00138 00140 Number CalcPred(Number alpha); 00141 00143 //ToDo This should probably not be a static member function if we want to 00144 // allow for different relaxation parameters values 00145 static bool Compare_le(Number lhs, Number rhs, Number BasVal); 00146 00150 Number nu_init_; 00152 Number nu_inc_; 00154 Number eta_; 00156 Number rho_; 00158 Index max_soc_; 00162 Number kappa_soc_; 00164 00169 Number reference_theta_; 00172 Number reference_barr_; 00175 Number reference_gradBarrTDelta_; 00177 Number reference_dWd_; 00179 SmartPtr<const Vector> reference_JacC_delta_; 00181 SmartPtr<const Vector> reference_JacD_delta_; 00184 Number reference_pred_; 00186 Number watchdog_theta_; 00188 Number watchdog_barr_; 00190 Number watchdog_pred_; 00192 00196 Number nu_; 00198 Number last_nu_; 00200 00203 Number resto_pred_; 00204 00207 SmartPtr<PDSystemSolver> pd_solver_; 00209 }; 00210 00211 } // namespace Ipopt 00212 00213 #endif