/home/coin/SVN-release/Ipopt-3.8.0/Ipopt/src/Algorithm/IpIpoptAlg.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: IpIpoptAlg.hpp 1462 2009-06-02 04:17:13Z andreasw $
00006 //
00007 // Authors:  Carl Laird, Andreas Waechter     IBM    2004-08-13
00008 
00009 #ifndef __IPIPOPTALG_HPP__
00010 #define __IPIPOPTALG_HPP__
00011 
00012 #include "IpIpoptNLP.hpp"
00013 #include "IpAlgStrategy.hpp"
00014 #include "IpSearchDirCalculator.hpp"
00015 #include "IpLineSearch.hpp"
00016 #include "IpMuUpdate.hpp"
00017 #include "IpConvCheck.hpp"
00018 #include "IpOptionsList.hpp"
00019 #include "IpIterateInitializer.hpp"
00020 #include "IpIterationOutput.hpp"
00021 #include "IpAlgTypes.hpp"
00022 #include "IpHessianUpdater.hpp"
00023 #include "IpEqMultCalculator.hpp"
00024 
00025 namespace Ipopt
00026 {
00027 
00030   DECLARE_STD_EXCEPTION(STEP_COMPUTATION_FAILED);
00032 
00045   class IpoptAlgorithm : public AlgorithmStrategyObject
00046   {
00047   public:
00048 
00055     IpoptAlgorithm(const SmartPtr<SearchDirectionCalculator>& search_dir_calculator,
00056                    const SmartPtr<LineSearch>& line_search,
00057                    const SmartPtr<MuUpdate>& mu_update,
00058                    const SmartPtr<ConvergenceCheck>& conv_check,
00059                    const SmartPtr<IterateInitializer>& iterate_initializer,
00060                    const SmartPtr<IterationOutput>& iter_output,
00061                    const SmartPtr<HessianUpdater>& hessian_updater,
00062                    const SmartPtr<EqMultiplierCalculator>& eq_multiplier_calculator = NULL);
00063 
00065     virtual ~IpoptAlgorithm();
00067 
00068 
00070     virtual bool InitializeImpl(const OptionsList& options,
00071                                 const std::string& prefix);
00072 
00074     SolverReturn Optimize(bool isResto = false);
00075 
00078     static void RegisterOptions(SmartPtr<RegisteredOptions> roptions);
00080 
00083     SmartPtr<SearchDirectionCalculator> SearchDirCalc()
00084     {
00085       return search_dir_calculator_;
00086     }
00088 
00089   private:
00099     IpoptAlgorithm();
00100 
00102     IpoptAlgorithm(const IpoptAlgorithm&);
00103 
00105     void operator=(const IpoptAlgorithm&);
00107 
00110     SmartPtr<SearchDirectionCalculator> search_dir_calculator_;
00111     SmartPtr<LineSearch> line_search_;
00112     SmartPtr<MuUpdate> mu_update_;
00113     SmartPtr<ConvergenceCheck> conv_check_;
00114     SmartPtr<IterateInitializer> iterate_initializer_;
00115     SmartPtr<IterationOutput> iter_output_;
00116     SmartPtr<HessianUpdater> hessian_updater_;
00119     SmartPtr<EqMultiplierCalculator> eq_multiplier_calculator_;
00121 
00128     void UpdateHessian();
00129 
00134     bool UpdateBarrierParameter();
00135 
00140     bool ComputeSearchDirection();
00141 
00145     void ComputeAcceptableTrialPoint();
00146 
00149     void AcceptTrialPoint();
00150 
00152     void OutputIteration();
00153 
00157     void InitializeIterates();
00158 
00160     void PrintProblemStatistics();
00161 
00163     void ComputeFeasibilityMultipliers();
00165 
00169     bool skip_print_problem_stats_;
00171 
00178     Number kappa_sigma_;
00182     bool recalc_y_;
00184     Number recalc_y_feas_tol_;
00188     bool mehrotra_algorithm_;
00190     std::string linear_solver_;
00192 
00195     void calc_number_of_bounds(
00196       const Vector& x,
00197       const Vector& x_L,
00198       const Vector& x_U,
00199       const Matrix& Px_L,
00200       const Matrix& Px_U,
00201       Index& n_tot,
00202       Index& n_only_lower,
00203       Index& n_both,
00204       Index& n_only_upper);
00205 
00213     Number correct_bound_multiplier(const Vector& trial_z,
00214                                     const Vector& trial_slack,
00215                                     const Vector& trial_compl,
00216                                     SmartPtr<const Vector>& new_trial_z);
00218   };
00219 
00220 } // namespace Ipopt
00221 
00222 #endif

Generated on Fri Oct 30 03:00:42 2009 by  doxygen 1.4.7