IpBacktrackingLineSearch.hpp
Go to the documentation of this file.
1 // Copyright (C) 2004, 2009 International Business Machines and others.
2 // All Rights Reserved.
3 // This code is published under the Eclipse Public License.
4 //
5 // $Id: IpBacktrackingLineSearch.hpp 1861 2010-12-21 21:34:47Z andreasw $
6 //
7 // Authors: Carl Laird, Andreas Waechter IBM 2004-08-13
8 // Andreas Waechter IBM 2005-10-13
9 // derived file from IpFilterLineSearch.hpp
10 
11 #ifndef __IPBACKTRACKINGLINESEARCH_HPP__
12 #define __IPBACKTRACKINGLINESEARCH_HPP__
13 
14 #include "IpLineSearch.hpp"
16 #include "IpRestoPhase.hpp"
17 #include "IpConvCheck.hpp"
18 
19 namespace Ipopt
20 {
21 
37  {
38  public:
49  const SmartPtr<RestorationPhase>& resto_phase,
50  const SmartPtr<ConvergenceCheck>& conv_check
51  );
52 
54  virtual ~BacktrackingLineSearch();
56 
58  virtual bool InitializeImpl(const OptionsList& options,
59  const std::string& prefix);
60 
64  virtual void FindAcceptableTrialPoint();
65 
72  virtual void Reset();
73 
85  virtual void SetRigorousLineSearch(bool rigorous)
86  {
87  rigorous_ = rigorous;
88  }
89 
94  virtual bool CheckSkippedLineSearch()
95  {
96  return skipped_line_search_;
97  }
98 
101  virtual bool ActivateFallbackMechanism();
102 
105  static void RegisterOptions(SmartPtr<RegisteredOptions> roptions);
107 
108  private:
119 
121  void operator=(const BacktrackingLineSearch&);
123 
128  bool DoBacktrackingLineSearch(bool skip_first_trial_point,
129  Number& alpha_primal,
130  bool& corr_taken,
131  bool& soc_taken,
132  Index& n_steps,
133  bool& evaluation_error,
134  SmartPtr<IteratesVector>& actual_delta);
135 
138  void StartWatchDog();
139 
142  void StopWatchDog(SmartPtr<IteratesVector>& actual_delta);
143 
149  bool CheckAcceptabilityOfTrialPoint(Number alpha_primal);
150 
156  void PerformDualStep(Number alpha_primal,
157  Number alpha_dual,
158  SmartPtr<IteratesVector>& delta);
159 
169  bool TrySoftRestoStep(SmartPtr<IteratesVector>& actual_delta,
170  bool &satisfies_original_criterion);
171 
183  bool TrySecondOrderCorrection(Number alpha_primal_test,
184  Number& alpha_primal,
185  SmartPtr<IteratesVector>& actual_delta);
186 
193  bool TryCorrector(Number alpha_primal_test,
194  Number& alpha_primal,
195  SmartPtr<IteratesVector>& actual_delta);
196 
201  void PerformMagicStep();
202 
206  bool DetectTinyStep();
207 
209  void StoreAcceptablePoint();
210 
213  bool RestoreAcceptablePoint();
214 
219  bool CurrentIsAcceptable();
220 
226 
229  {
240  };
246 
250 
259 
284 
287 
293 
298 
303 
321 
328 
332 
337  bool rigorous_;
338 
342 
348 
352 
356 
360 
367  };
368 
369 } // namespace Ipopt
370 
371 #endif