Ipopt  3.12.12
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros
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 &quot;soft&quot; 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 (&quot;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.