Ipopt  3.12.8
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
bool rigorous_
Flag indicating whether the line search is to be performed robust (usually this is true...
AlphaForYEnum
enumeration for the different alpha_for_y_ settings
bool start_with_resto_
Indicates whether the algorithm should start directly with the restoratin phase.
Number tiny_step_tol_
Tolerance for detecting tiny steps.
SmartPtr< const IteratesVector > watchdog_delta_
Watchdog search direction at reference point.
Index count_successive_shortened_steps_
Counter for the number of successive iterations in which the full step was not accepted.
void PerformDualStep(Number alpha_primal, Number alpha_dual, SmartPtr< IteratesVector > &delta)
Method for setting the dual variables in the trial fields in IpData, given the search direction...
SmartPtr< const IteratesVector > watchdog_iterate_
Watchdog reference iterate.
void StopWatchDog(SmartPtr< IteratesVector > &actual_delta)
Method for stopping the watch dog.
Number alpha_red_factor_
factor by which search direction is to be shortened if trial point is rejected.
virtual void SetRigorousLineSearch(bool rigorous)
Set flag indicating whether a very rigorous line search should be performed.
Index max_soft_resto_iters_
Maximal number of iterations that can be done in the soft iteration phase before the algorithm revert...
bool TryCorrector(Number alpha_primal_test, Number &alpha_primal, SmartPtr< IteratesVector > &actual_delta)
Try higher order corrector (for fast local convergence).
double Number
Type of all numbers.
Definition: IpTypes.hpp:17
bool tiny_step_last_iteration_
Flag indicating if a tiny step was detected in previous iteration.
bool CheckAcceptabilityOfTrialPoint(Number alpha_primal)
Method for checking if current trial point is acceptable.
bool fallback_activated_
Flag indicating whether the algorithm has asked to immediately switch to the fallback mechanism (rest...
Number tiny_step_y_tol_
Tolerance for y variables for the tiny step stopping heuristic.
Index accept_after_max_steps_
Maximal number of trial steps before we blindly accept trial point.
bool DoBacktrackingLineSearch(bool skip_first_trial_point, Number &alpha_primal, bool &corr_taken, bool &soc_taken, Index &n_steps, bool &evaluation_error, SmartPtr< IteratesVector > &actual_delta)
Method performing the backtracking line search.
Template class for Smart Pointers.
Definition: IpSmartPtr.hpp:172
SmartPtr< RestorationPhase > resto_phase_
virtual ~BacktrackingLineSearch()
Default destructor.
bool TrySecondOrderCorrection(Number alpha_primal_test, Number &alpha_primal, SmartPtr< IteratesVector > &actual_delta)
Try a second order correction for the constraints.
This class stores a list of user set options.
SmartPtr< const IteratesVector > acceptable_iterate_
void operator=(const BacktrackingLineSearch &)
Overloaded Equals Operator.
virtual void Reset()
Reset the line search.
Number last_mu_
Barrier parameter value during last line search.
BacktrackingLineSearch(const SmartPtr< BacktrackingLSAcceptor > &acceptor, const SmartPtr< RestorationPhase > &resto_phase, const SmartPtr< ConvergenceCheck > &conv_check)
Constructor.
void StartWatchDog()
Method for starting the watch dog.
Index watchdog_trial_iter_
Counter for watch dog iterations.
General implementation of a backtracking line search.
Index watchdog_shortened_iter_
Counter for shortened iterations.
static void RegisterOptions(SmartPtr< RegisteredOptions > roptions)
Methods for OptionsList.
bool RestoreAcceptablePoint()
Restore acceptable point into the current fields of IpData if found.
bool in_soft_resto_phase_
Flag indicating whether we are currently in the "soft" restoration phase mode, in which steps are acc...
Number alpha_for_y_tol_
Tolerance for primal step to switch to full equality constraint multiplier steps. ...
Number expect_infeasible_problem_ctol_
Tolerance on constraint violation for expect_infeasible_problem heuristic.
int Index
Type of all indices of vectors, matrices etc.
Definition: IpTypes.hpp:19
bool skipped_line_search_
Flag indicating whether no acceptable trial point was found during last line search.
Index watchdog_shortened_iter_trigger_
Number of shortened iterations that trigger the watchdog.
SmartPtr< ConvergenceCheck > conv_check_
virtual bool InitializeImpl(const OptionsList &options, const std::string &prefix)
InitializeImpl - overloaded from AlgorithmStrategyObject.
Number soft_resto_pderror_reduction_factor_
Reduction factor for the restoration phase that accepts steps reducing the optimality error ("soft re...
bool CurrentIsAcceptable()
Method for determining if the current iterate is acceptable (in the sense of the acceptable_tol optio...
virtual bool CheckSkippedLineSearch()
Check if the line search procedure didn&#39;t accept a new iterate during the last call of FindAcceptable...
AlphaForYEnum alpha_for_y_
Flag indicating whether the dual step size is to be used for the equality constraint multipliers...
Index soft_resto_counter_
Counter for iteration performed in soft restoration phase in a row.
Number expect_infeasible_problem_ytol_
Trigger tolerance on constraint multipliers.
void StoreAcceptablePoint()
Store current iterate as acceptable point.
bool in_watchdog_
Flag indicating if the watchdog is active.
Base class for line search objects.
bool DetectTinyStep()
Detect if the search direction is too small.
bool magic_steps_
Flag indicating whether magic steps should be used.
bool TrySoftRestoStep(SmartPtr< IteratesVector > &actual_delta, bool &satisfies_original_criterion)
Try a step for the soft restoration phase and check if it is acceptable.
virtual bool ActivateFallbackMechanism()
Activate fallback mechanism.
SmartPtr< BacktrackingLSAcceptor > acceptor_
Index watchdog_trial_iter_max_
Number of watch dog trial steps.
virtual void FindAcceptableTrialPoint()
Perform the line search.
void PerformMagicStep()
Perform magic steps.
Number watchdog_alpha_primal_test_
Step size for Armijo test in watch dog.
bool accept_every_trial_step_
Flag indicating whether the line search should always accept the full (fraction-to-the-boundary) step...
bool expect_infeasible_problem_
Indicates whether problem can be expected to be infeasible.