Ipopt 3.12.10

- Main Page
- Classes
- Files

- File List
- File Members

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"
15 #include "IpBacktrackingLSAcceptor.hpp"
16 #include "IpRestoPhase.hpp"
17 #include "IpConvCheck.hpp"
18
19 namespace Ipopt
20 {
21
36 class BacktrackingLineSearch : public LineSearch
37 {
38 public:
48 BacktrackingLineSearch(const SmartPtr<BacktrackingLSAcceptor>& acceptor,
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:
118 BacktrackingLineSearch(const BacktrackingLineSearch&);
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
225 Number alpha_red_factor_;
226
228 enum AlphaForYEnum
229 {
230 PRIMAL_ALPHA_FOR_Y=0,
231 DUAL_ALPHA_FOR_Y,
232 MIN_ALPHA_FOR_Y,
233 MAX_ALPHA_FOR_Y,
234 FULL_STEP_FOR_Y,
235 MIN_DUAL_INFEAS_ALPHA_FOR_Y,
236 SAFE_MIN_DUAL_INFEAS_ALPHA_FOR_Y,
237 PRIMAL_AND_FULL_ALPHA_FOR_Y,
238 DUAL_AND_FULL_ALPHA_FOR_Y,
239 LSACCEPTOR_ALPHA_FOR_Y
240 };
245 AlphaForYEnum alpha_for_y_;
246
249 Number alpha_for_y_tol_;
250
254 Number soft_resto_pderror_reduction_factor_;
258 Index max_soft_resto_iters_;
259
261 bool magic_steps_;
264 bool accept_every_trial_step_;
268 Index accept_after_max_steps_;
273 bool expect_infeasible_problem_;
278 Number expect_infeasible_problem_ctol_;
283 Number expect_infeasible_problem_ytol_;
284
286 Number tiny_step_tol_;
287
292 Number tiny_step_y_tol_;
293
295 Index watchdog_trial_iter_max_;
297 Index watchdog_shortened_iter_trigger_;
298
301 bool start_with_resto_;
303
307 bool in_watchdog_;
309 Index watchdog_shortened_iter_;
311 Index watchdog_trial_iter_;
313 Number watchdog_alpha_primal_test_;
315 SmartPtr<const IteratesVector> watchdog_iterate_;
317 SmartPtr<const IteratesVector> watchdog_delta_;
319 Number last_mu_;
321
325 SmartPtr<const IteratesVector> acceptable_iterate_;
326 Index acceptable_iteration_number_;
328
331 bool fallback_activated_;
332
337 bool rigorous_;
338
341 bool skipped_line_search_;
342
347 bool in_soft_resto_phase_;
348
351 Index soft_resto_counter_;
352
355 Index count_successive_shortened_steps_;
356
359 bool tiny_step_last_iteration_;
360
363 SmartPtr<BacktrackingLSAcceptor> acceptor_;
364 SmartPtr<RestorationPhase> resto_phase_;
365 SmartPtr<ConvergenceCheck> conv_check_;
367 };
368
369 } // namespace Ipopt
370
371 #endif
Ipopt::BacktrackingLineSearch::rigorous_
bool rigorous_
Flag indicating whether the line search is to be performed robust (usually this is true...
Definition: IpBacktrackingLineSearch.hpp:337
Ipopt::BacktrackingLineSearch::AlphaForYEnum
AlphaForYEnum
enumeration for the different alpha_for_y_ settings
Definition: IpBacktrackingLineSearch.hpp:228
Ipopt::BacktrackingLineSearch::start_with_resto_
bool start_with_resto_
Indicates whether the algorithm should start directly with the restoratin phase.
Definition: IpBacktrackingLineSearch.hpp:301
Ipopt::BacktrackingLineSearch::tiny_step_tol_
Number tiny_step_tol_
Tolerance for detecting tiny steps.
Definition: IpBacktrackingLineSearch.hpp:286
Ipopt::BacktrackingLineSearch::watchdog_delta_
SmartPtr< const IteratesVector > watchdog_delta_
Watchdog search direction at reference point.
Definition: IpBacktrackingLineSearch.hpp:317
Ipopt::BacktrackingLineSearch::DUAL_ALPHA_FOR_Y
Definition: IpBacktrackingLineSearch.hpp:231
Ipopt::BacktrackingLineSearch::count_successive_shortened_steps_
Index count_successive_shortened_steps_
Counter for the number of successive iterations in which the full step was not accepted.
Definition: IpBacktrackingLineSearch.hpp:355
Ipopt::BacktrackingLineSearch::PerformDualStep
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...
Ipopt::BacktrackingLineSearch::watchdog_iterate_
SmartPtr< const IteratesVector > watchdog_iterate_
Watchdog reference iterate.
Definition: IpBacktrackingLineSearch.hpp:315
Ipopt::BacktrackingLineSearch::StopWatchDog
void StopWatchDog(SmartPtr< IteratesVector > &actual_delta)
Method for stopping the watch dog.
Ipopt::BacktrackingLineSearch::alpha_red_factor_
Number alpha_red_factor_
factor by which search direction is to be shortened if trial point is rejected.
Definition: IpBacktrackingLineSearch.hpp:225
Ipopt::BacktrackingLineSearch::SetRigorousLineSearch
virtual void SetRigorousLineSearch(bool rigorous)
Set flag indicating whether a very rigorous line search should be performed.
Definition: IpBacktrackingLineSearch.hpp:85
Ipopt::BacktrackingLineSearch::max_soft_resto_iters_
Index max_soft_resto_iters_
Maximal number of iterations that can be done in the soft iteration phase before the algorithm revert...
Definition: IpBacktrackingLineSearch.hpp:258
Ipopt::BacktrackingLineSearch::TryCorrector
bool TryCorrector(Number alpha_primal_test, Number &alpha_primal, SmartPtr< IteratesVector > &actual_delta)
Try higher order corrector (for fast local convergence).
Ipopt::Number
double Number
Type of all numbers.
Definition: IpTypes.hpp:17
Ipopt::BacktrackingLineSearch::MAX_ALPHA_FOR_Y
Definition: IpBacktrackingLineSearch.hpp:233
Ipopt::BacktrackingLineSearch::MIN_DUAL_INFEAS_ALPHA_FOR_Y
Definition: IpBacktrackingLineSearch.hpp:235
IpConvCheck.hpp
Ipopt::BacktrackingLineSearch::tiny_step_last_iteration_
bool tiny_step_last_iteration_
Flag indicating if a tiny step was detected in previous iteration.
Definition: IpBacktrackingLineSearch.hpp:359
Ipopt::BacktrackingLineSearch::CheckAcceptabilityOfTrialPoint
bool CheckAcceptabilityOfTrialPoint(Number alpha_primal)
Method for checking if current trial point is acceptable.
Ipopt::BacktrackingLineSearch::fallback_activated_
bool fallback_activated_
Flag indicating whether the algorithm has asked to immediately switch to the fallback mechanism (rest...
Definition: IpBacktrackingLineSearch.hpp:331
Ipopt::BacktrackingLineSearch::tiny_step_y_tol_
Number tiny_step_y_tol_
Tolerance for y variables for the tiny step stopping heuristic.
Definition: IpBacktrackingLineSearch.hpp:292
Ipopt::BacktrackingLineSearch::accept_after_max_steps_
Index accept_after_max_steps_
Maximal number of trial steps before we blindly accept trial point.
Definition: IpBacktrackingLineSearch.hpp:268
Ipopt::BacktrackingLineSearch::DoBacktrackingLineSearch
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.
Ipopt::BacktrackingLineSearch::LSACCEPTOR_ALPHA_FOR_Y
Definition: IpBacktrackingLineSearch.hpp:239
Ipopt::SmartPtr
Template class for Smart Pointers.
Definition: IpSmartPtr.hpp:172
IpBacktrackingLSAcceptor.hpp
Ipopt::BacktrackingLineSearch::PRIMAL_ALPHA_FOR_Y
Definition: IpBacktrackingLineSearch.hpp:230
Ipopt::BacktrackingLineSearch::resto_phase_
SmartPtr< RestorationPhase > resto_phase_
Definition: IpBacktrackingLineSearch.hpp:364
Ipopt::BacktrackingLineSearch::SAFE_MIN_DUAL_INFEAS_ALPHA_FOR_Y
Definition: IpBacktrackingLineSearch.hpp:236
Ipopt::BacktrackingLineSearch::~BacktrackingLineSearch
virtual ~BacktrackingLineSearch()
Default destructor.
Ipopt::BacktrackingLineSearch::TrySecondOrderCorrection
bool TrySecondOrderCorrection(Number alpha_primal_test, Number &alpha_primal, SmartPtr< IteratesVector > &actual_delta)
Try a second order correction for the constraints.
Ipopt::OptionsList
This class stores a list of user set options.
Definition: IpOptionsList.hpp:32
Ipopt::BacktrackingLineSearch::acceptable_iterate_
SmartPtr< const IteratesVector > acceptable_iterate_
Definition: IpBacktrackingLineSearch.hpp:325
Ipopt::BacktrackingLineSearch::operator=
void operator=(const BacktrackingLineSearch &)
Overloaded Equals Operator.
Ipopt::BacktrackingLineSearch::Reset
virtual void Reset()
Reset the line search.
Ipopt::BacktrackingLineSearch::last_mu_
Number last_mu_
Barrier parameter value during last line search.
Definition: IpBacktrackingLineSearch.hpp:319
Ipopt::BacktrackingLineSearch::acceptable_iteration_number_
Index acceptable_iteration_number_
Definition: IpBacktrackingLineSearch.hpp:326
Ipopt::BacktrackingLineSearch::BacktrackingLineSearch
BacktrackingLineSearch(const SmartPtr< BacktrackingLSAcceptor > &acceptor, const SmartPtr< RestorationPhase > &resto_phase, const SmartPtr< ConvergenceCheck > &conv_check)
Constructor.
Ipopt::BacktrackingLineSearch::StartWatchDog
void StartWatchDog()
Method for starting the watch dog.
IpLineSearch.hpp
Ipopt::BacktrackingLineSearch::PRIMAL_AND_FULL_ALPHA_FOR_Y
Definition: IpBacktrackingLineSearch.hpp:237
Ipopt::BacktrackingLineSearch::watchdog_trial_iter_
Index watchdog_trial_iter_
Counter for watch dog iterations.
Definition: IpBacktrackingLineSearch.hpp:311
IpRestoPhase.hpp
Ipopt::BacktrackingLineSearch
General implementation of a backtracking line search.
Definition: IpBacktrackingLineSearch.hpp:36
Ipopt::BacktrackingLineSearch::watchdog_shortened_iter_
Index watchdog_shortened_iter_
Counter for shortened iterations.
Definition: IpBacktrackingLineSearch.hpp:309
Ipopt::BacktrackingLineSearch::RegisterOptions
static void RegisterOptions(SmartPtr< RegisteredOptions > roptions)
Methods for OptionsList.
Ipopt::BacktrackingLineSearch::MIN_ALPHA_FOR_Y
Definition: IpBacktrackingLineSearch.hpp:232
Ipopt::BacktrackingLineSearch::RestoreAcceptablePoint
bool RestoreAcceptablePoint()
Restore acceptable point into the current fields of IpData if found.
Ipopt::BacktrackingLineSearch::in_soft_resto_phase_
bool in_soft_resto_phase_
Flag indicating whether we are currently in the &quot;soft&quot; restoration phase mode, in which steps are acc...
Definition: IpBacktrackingLineSearch.hpp:347
Ipopt::BacktrackingLineSearch::alpha_for_y_tol_
Number alpha_for_y_tol_
Tolerance for primal step to switch to full equality constraint multiplier steps. ...
Definition: IpBacktrackingLineSearch.hpp:249
Ipopt::BacktrackingLineSearch::expect_infeasible_problem_ctol_
Number expect_infeasible_problem_ctol_
Tolerance on constraint violation for expect_infeasible_problem heuristic.
Definition: IpBacktrackingLineSearch.hpp:278
Ipopt::BacktrackingLineSearch::DUAL_AND_FULL_ALPHA_FOR_Y
Definition: IpBacktrackingLineSearch.hpp:238
Ipopt::Index
int Index
Type of all indices of vectors, matrices etc.
Definition: IpTypes.hpp:19
Ipopt::BacktrackingLineSearch::skipped_line_search_
bool skipped_line_search_
Flag indicating whether no acceptable trial point was found during last line search.
Definition: IpBacktrackingLineSearch.hpp:341
Ipopt::BacktrackingLineSearch::watchdog_shortened_iter_trigger_
Index watchdog_shortened_iter_trigger_
Number of shortened iterations that trigger the watchdog.
Definition: IpBacktrackingLineSearch.hpp:297
Ipopt::BacktrackingLineSearch::conv_check_
SmartPtr< ConvergenceCheck > conv_check_
Definition: IpBacktrackingLineSearch.hpp:365
Ipopt::BacktrackingLineSearch::InitializeImpl
virtual bool InitializeImpl(const OptionsList &options, const std::string &prefix)
InitializeImpl - overloaded from AlgorithmStrategyObject.
Ipopt::BacktrackingLineSearch::soft_resto_pderror_reduction_factor_
Number soft_resto_pderror_reduction_factor_
Reduction factor for the restoration phase that accepts steps reducing the optimality error (&quot;soft re...
Definition: IpBacktrackingLineSearch.hpp:254
Ipopt::BacktrackingLineSearch::CurrentIsAcceptable
bool CurrentIsAcceptable()
Method for determining if the current iterate is acceptable (in the sense of the acceptable_tol optio...
Ipopt::BacktrackingLineSearch::CheckSkippedLineSearch
virtual bool CheckSkippedLineSearch()
Check if the line search procedure didn&#39;t accept a new iterate during the last call of FindAcceptable...
Definition: IpBacktrackingLineSearch.hpp:94
Ipopt::BacktrackingLineSearch::alpha_for_y_
AlphaForYEnum alpha_for_y_
Flag indicating whether the dual step size is to be used for the equality constraint multipliers...
Definition: IpBacktrackingLineSearch.hpp:245
Ipopt::BacktrackingLineSearch::soft_resto_counter_
Index soft_resto_counter_
Counter for iteration performed in soft restoration phase in a row.
Definition: IpBacktrackingLineSearch.hpp:351
Ipopt::BacktrackingLineSearch::expect_infeasible_problem_ytol_
Number expect_infeasible_problem_ytol_
Trigger tolerance on constraint multipliers.
Definition: IpBacktrackingLineSearch.hpp:283
Ipopt::BacktrackingLineSearch::StoreAcceptablePoint
void StoreAcceptablePoint()
Store current iterate as acceptable point.
Ipopt::BacktrackingLineSearch::FULL_STEP_FOR_Y
Definition: IpBacktrackingLineSearch.hpp:234
Ipopt::BacktrackingLineSearch::in_watchdog_
bool in_watchdog_
Flag indicating if the watchdog is active.
Definition: IpBacktrackingLineSearch.hpp:307
Ipopt::LineSearch
Base class for line search objects.
Definition: IpLineSearch.hpp:20
Ipopt::BacktrackingLineSearch::DetectTinyStep
bool DetectTinyStep()
Detect if the search direction is too small.
Ipopt::BacktrackingLineSearch::magic_steps_
bool magic_steps_
Flag indicating whether magic steps should be used.
Definition: IpBacktrackingLineSearch.hpp:261
Ipopt::BacktrackingLineSearch::TrySoftRestoStep
bool TrySoftRestoStep(SmartPtr< IteratesVector > &actual_delta, bool &satisfies_original_criterion)
Try a step for the soft restoration phase and check if it is acceptable.
Ipopt::BacktrackingLineSearch::ActivateFallbackMechanism
virtual bool ActivateFallbackMechanism()
Activate fallback mechanism.
Ipopt::BacktrackingLineSearch::acceptor_
SmartPtr< BacktrackingLSAcceptor > acceptor_
Definition: IpBacktrackingLineSearch.hpp:363
Ipopt::BacktrackingLineSearch::watchdog_trial_iter_max_
Index watchdog_trial_iter_max_
Number of watch dog trial steps.
Definition: IpBacktrackingLineSearch.hpp:295
Ipopt::BacktrackingLineSearch::FindAcceptableTrialPoint
virtual void FindAcceptableTrialPoint()
Perform the line search.
Ipopt::BacktrackingLineSearch::PerformMagicStep
void PerformMagicStep()
Perform magic steps.
Ipopt::BacktrackingLineSearch::watchdog_alpha_primal_test_
Number watchdog_alpha_primal_test_
Step size for Armijo test in watch dog.
Definition: IpBacktrackingLineSearch.hpp:313
Ipopt::BacktrackingLineSearch::accept_every_trial_step_
bool accept_every_trial_step_
Flag indicating whether the line search should always accept the full (fraction-to-the-boundary) step...
Definition: IpBacktrackingLineSearch.hpp:264
Ipopt::BacktrackingLineSearch::expect_infeasible_problem_
bool expect_infeasible_problem_
Indicates whether problem can be expected to be infeasible.
Definition: IpBacktrackingLineSearch.hpp:273