00001 // Copyright (C) 2004, 2007 International Business Machines and others. 00002 // All Rights Reserved. 00003 // This code is published under the Common Public License. 00004 // 00005 // $Id: IpBacktrackingLSAcceptor.hpp 1065 2007-08-06 21:19:49Z andreasw $ 00006 // 00007 // Authors: Carl Laird, Andreas Waechter IBM 2004-08-13 00008 // Andreas Waechter IBM 2005-10-13 00009 // derived file from IpFilterLineSearch.hpp 00010 00011 #ifndef __IPBACKTRACKINGLSACCEPTOR_HPP__ 00012 #define __IPBACKTRACKINGLSACCEPTOR_HPP__ 00013 00014 #include "IpAlgStrategy.hpp" 00015 00016 namespace Ipopt 00017 { 00018 00021 class BacktrackingLSAcceptor : public AlgorithmStrategyObject 00022 { 00023 public: 00027 BacktrackingLSAcceptor() 00028 {} 00029 00031 virtual ~BacktrackingLSAcceptor() 00032 {} 00034 00036 virtual bool InitializeImpl(const OptionsList& options, 00037 const std::string& prefix)=0; 00038 00045 virtual void Reset()=0; 00046 00050 virtual void InitThisLineSearch(bool in_watchdog)=0; 00051 00056 virtual void PrepareRestoPhaseStart()=0; 00057 00062 virtual Number CalculateAlphaMin()=0; 00063 00071 virtual bool CheckAcceptabilityOfTrialPoint(Number alpha_primal)=0; 00072 00084 virtual bool TrySecondOrderCorrection(Number alpha_primal_test, 00085 Number& alpha_primal, 00086 SmartPtr<IteratesVector>& actual_delta)=0; 00087 00094 virtual bool TryCorrector(Number alpha_primal_test, 00095 Number& alpha_primal, 00096 SmartPtr<IteratesVector>& actual_delta)=0; 00097 00103 virtual char UpdateForNextIteration(Number alpha_primal_test)=0; 00104 00107 virtual void StartWatchDog()=0; 00108 00111 virtual void StopWatchDog()=0; 00112 00115 virtual bool RestoredIterate() 00116 { 00117 return false; 00118 } 00119 00122 virtual bool NeverRestorationPhase() 00123 { 00124 return false; 00125 } 00126 00131 virtual bool DoFallback() 00132 { 00133 return false; 00134 } 00135 00139 virtual Number ComputeAlphaForY(Number alpha_primal, 00140 Number alpha_dual, 00141 SmartPtr<IteratesVector>& delta) 00142 { 00143 THROW_EXCEPTION(OPTION_INVALID, 00144 "Value \"acceptor\" for option \"alpha_for_y\" not valid for this line search."); 00145 return -1.; 00146 } 00147 00150 static void RegisterOptions(SmartPtr<RegisteredOptions> roptions); 00152 00153 private: 00163 BacktrackingLSAcceptor(const BacktrackingLSAcceptor&); 00164 00166 void operator=(const BacktrackingLSAcceptor&); 00168 }; 00169 00170 } // namespace Ipopt 00171 00172 #endif