- Main Page
- Namespaces
- Classes
- Files

- File List
- File Members

# /home/coin/SVN-release/Ipopt-3.7.1/Ipopt/src/Algorithm/IpBacktrackingLineSearch.hpp

Go to the documentation of this file.

    00001 // Copyright (C) 2004, 2009 International Business Machines and others.
    00002 // All Rights Reserved.
    00003 // This code is published under the Common Public License.
    00004 //
    00005 // $Id: IpBacktrackingLineSearch.hpp 1578 2009-10-06 23:40:31Z 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 __IPBACKTRACKINGLINESEARCH_HPP__
    00012 #define __IPBACKTRACKINGLINESEARCH_HPP__
    00013
    00014 #include "IpLineSearch.hpp"
    00015 #include "IpBacktrackingLSAcceptor.hpp"
    00016 #include "IpRestoPhase.hpp"
    00017 #include "IpConvCheck.hpp"
    00018
    00019 namespace Ipopt
    00020 {
    00021
    00036   class BacktrackingLineSearch : public LineSearch
    00037   {
    00038   public:
    00048     BacktrackingLineSearch(const SmartPtr<BacktrackingLSAcceptor>& acceptor,
    00049                            const SmartPtr<RestorationPhase>& resto_phase,
    00050                            const SmartPtr<ConvergenceCheck>& conv_check
    00051                           );
    00052
    00054     virtual ~BacktrackingLineSearch();
    00056
    00058     virtual bool InitializeImpl(const OptionsList& options,
    00059                                 const std::string& prefix);
    00060
    00064     virtual void FindAcceptableTrialPoint();
    00065
    00072     virtual void Reset();
    00073
    00085     virtual void SetRigorousLineSearch(bool rigorous)
    00086     {
    00087       rigorous_ = rigorous;
    00088     }
    00089
    00094     virtual bool CheckSkippedLineSearch()
    00095     {
    00096       return skipped_line_search_;
    00097     }
    00098
    00101     virtual bool ActivateFallbackMechanism();
    00102
    00105     static void RegisterOptions(SmartPtr<RegisteredOptions> roptions);
    00107
    00108   private:
    00118     BacktrackingLineSearch(const BacktrackingLineSearch&);
    00119
    00121     void operator=(const BacktrackingLineSearch&);
    00123
    00128     bool DoBacktrackingLineSearch(bool skip_first_trial_point,
    00129                                   Number& alpha_primal,
    00130                                   bool& corr_taken,
    00131                                   bool& soc_taken,
    00132                                   Index& n_steps,
    00133                                   bool& evaluation_error,
    00134                                   SmartPtr<IteratesVector>& actual_delta);
    00135
    00138     void StartWatchDog();
    00139
    00142     void StopWatchDog(SmartPtr<IteratesVector>& actual_delta);
    00143
    00149     bool CheckAcceptabilityOfTrialPoint(Number alpha_primal);
    00150
    00156     void PerformDualStep(Number alpha_primal,
    00157                          Number alpha_dual,
    00158                          SmartPtr<IteratesVector>& delta);
    00159
    00169     bool TrySoftRestoStep(SmartPtr<IteratesVector>& actual_delta,
    00170                           bool &satisfies_original_criterion);
    00171
    00183     bool TrySecondOrderCorrection(Number alpha_primal_test,
    00184                                   Number& alpha_primal,
    00185                                   SmartPtr<IteratesVector>& actual_delta);
    00186
    00193     bool TryCorrector(Number alpha_primal_test,
    00194                       Number& alpha_primal,
    00195                       SmartPtr<IteratesVector>& actual_delta);
    00196
    00201     void PerformMagicStep();
    00202
    00206     bool DetectTinyStep();
    00207
    00209     void StoreAcceptablePoint();
    00210
    00213     bool RestoreAcceptablePoint();
    00214
    00219     bool CurrentIsAcceptable();
    00220
    00225     Number alpha_red_factor_;
    00226
    00228     enum AlphaForYEnum
    00229     {
    00230       PRIMAL_ALPHA_FOR_Y=0,
    00231       DUAL_ALPHA_FOR_Y,
    00232       MIN_ALPHA_FOR_Y,
    00233       MAX_ALPHA_FOR_Y,
    00234       FULL_STEP_FOR_Y,
    00235       MIN_DUAL_INFEAS_ALPHA_FOR_Y,
    00236       SAFE_MIN_DUAL_INFEAS_ALPHA_FOR_Y,
    00237       PRIMAL_AND_FULL_ALPHA_FOR_Y,
    00238       DUAL_AND_FULL_ALPHA_FOR_Y,
    00239       LSACCEPTOR_ALPHA_FOR_Y
    00240     };
    00245     AlphaForYEnum alpha_for_y_;
    00246
    00249     Number alpha_for_y_tol_;
    00250
    00254     Number soft_resto_pderror_reduction_factor_;
    00258     Index max_soft_resto_iters_;
    00259
    00261     bool magic_steps_;
    00264     bool accept_every_trial_step_;
    00268     Index accept_after_max_steps_;
    00273     bool expect_infeasible_problem_;
    00278     Number expect_infeasible_problem_ctol_;
    00283     Number expect_infeasible_problem_ytol_;
    00284
    00286     Number tiny_step_tol_;
    00287
    00292     Number tiny_step_y_tol_;
    00293
    00295     Index watchdog_trial_iter_max_;
    00297     Index watchdog_shortened_iter_trigger_;
    00298
    00301     bool start_with_resto_;
    00303
    00307     bool in_watchdog_;
    00309     Index watchdog_shortened_iter_;
    00311     Index watchdog_trial_iter_;
    00313     Number watchdog_alpha_primal_test_;
    00315     SmartPtr<const IteratesVector> watchdog_iterate_;
    00317     SmartPtr<const IteratesVector> watchdog_delta_;
    00319     Number last_mu_;
    00321
    00325     SmartPtr<const IteratesVector> acceptable_iterate_;
    00326     Index acceptable_iteration_number_;
    00328
    00331     bool fallback_activated_;
    00332
    00337     bool rigorous_;
    00338
    00341     bool skipped_line_search_;
    00342
    00347     bool in_soft_resto_phase_;
    00348
    00351     Index soft_resto_counter_;
    00352
    00355     Index count_successive_shortened_steps_;
    00356
    00359     bool tiny_step_last_iteration_;
    00360
    00363     SmartPtr<BacktrackingLSAcceptor> acceptor_;
    00364     SmartPtr<RestorationPhase> resto_phase_;
    00365     SmartPtr<ConvergenceCheck> conv_check_;
    00367   };
    00368
    00369 } // namespace Ipopt
    00370
    00371 #endif