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 1390 2009-01-06 16:55:52Z 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 00023 class PenaltyLSAcceptor : public BacktrackingLSAcceptor 00024 { 00025 public: 00031 PenaltyLSAcceptor(const SmartPtr<PDSystemSolver>& pd_solver); 00032 00034 virtual ~PenaltyLSAcceptor(); 00036 00038 virtual bool InitializeImpl(const OptionsList& options, 00039 const std::string& prefix); 00040 00047 virtual void Reset(); 00048 00052 virtual void InitThisLineSearch(bool in_watchdog); 00053 00057 virtual void PrepareRestoPhaseStart(); 00058 00060 virtual Number CalculateAlphaMin(); 00061 00067 virtual bool CheckAcceptabilityOfTrialPoint(Number alpha_primal); 00068 00081 virtual bool TrySecondOrderCorrection(Number alpha_primal_test, 00082 Number& alpha_primal, 00083 SmartPtr<IteratesVector>& actual_delta); 00084 00091 virtual bool TryCorrector(Number alpha_primal_test, 00092 Number& alpha_primal, 00093 SmartPtr<IteratesVector>& actual_delta); 00094 00099 virtual char UpdateForNextIteration(Number alpha_primal_test); 00100 00103 virtual void StartWatchDog(); 00104 00107 virtual void StopWatchDog(); 00108 00115 bool IsAcceptableToCurrentIterate(Number trial_barr, Number trial_theta, 00116 bool called_from_restoration=false) const; 00118 00121 static void RegisterOptions(SmartPtr<RegisteredOptions> roptions); 00123 00124 private: 00134 PenaltyLSAcceptor(const PenaltyLSAcceptor&); 00135 00137 void operator=(const PenaltyLSAcceptor&); 00139 00141 Number CalcPred(Number alpha); 00142 00147 Number nu_init_; 00149 Number nu_inc_; 00151 Number eta_; 00153 Number rho_; 00155 Index max_soc_; 00159 Number kappa_soc_; 00161 00166 Number reference_theta_; 00169 Number reference_barr_; 00172 Number reference_gradBarrTDelta_; 00174 Number reference_dWd_; 00176 SmartPtr<const Vector> reference_JacC_delta_; 00178 SmartPtr<const Vector> reference_JacD_delta_; 00181 Number reference_pred_; 00183 Number watchdog_theta_; 00185 Number watchdog_barr_; 00187 Number watchdog_pred_; 00189 00193 Number nu_; 00195 Number last_nu_; 00197 00200 Number resto_pred_; 00201 00204 SmartPtr<PDSystemSolver> pd_solver_; 00206 }; 00207 00208 } // namespace Ipopt 00209 00210 #endif