- Main Page
- Namespaces
- Classes
- Files

- File List
- File Members

# /home/coin/SVN-release/Ipopt-3.2.1/Ipopt/src/Algorithm/IpIpoptAlg.hpp

Go to the documentation of this file.

    00001 // Copyright (C) 2004, 2006 International Business Machines and others.
    00002 // All Rights Reserved.
    00003 // This code is published under the Common Public License.
    00004 //
    00005 // $Id: IpIpoptAlg.hpp 759 2006-07-07 03:07:08Z 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 "IpPDSystemSolver.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<PDSystemSolver>& pd_solver,
    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();
    00075
    00078     static void RegisterOptions(SmartPtr<RegisteredOptions> roptions);
    00080
    00081   private:
    00091     IpoptAlgorithm();
    00092
    00094     IpoptAlgorithm(const IpoptAlgorithm&);
    00095
    00097     void operator=(const IpoptAlgorithm&);
    00099
    00102     SmartPtr<PDSystemSolver> pd_solver_;
    00103     SmartPtr<LineSearch> line_search_;
    00104     SmartPtr<MuUpdate> mu_update_;
    00105     SmartPtr<ConvergenceCheck> conv_check_;
    00106     SmartPtr<IterateInitializer> iterate_initializer_;
    00107     SmartPtr<IterationOutput> iter_output_;
    00108     SmartPtr<HessianUpdater> hessian_updater_;
    00111     SmartPtr<EqMultiplierCalculator> eq_multiplier_calculator_;
    00113
    00120     void UpdateHessian();
    00121
    00126     bool UpdateBarrierParameter();
    00127
    00132     bool ComputeSearchDirection();
    00133
    00137     void ComputeAcceptableTrialPoint();
    00138
    00141     void AcceptTrialPoint();
    00142
    00144     void OutputIteration();
    00145
    00149     void InitializeIterates();
    00150
    00152     void PrintProblemStatistics();
    00154
    00158     bool skip_print_problem_stats_;
    00160
    00167     Number kappa_sigma_;
    00171     bool recalc_y_;
    00173     Number recalc_y_feas_tol_;
    00175
    00178     void calc_number_of_bounds(
    00179       const Vector& x,
    00180       const Vector& x_L,
    00181       const Vector& x_U,
    00182       const Matrix& Px_L,
    00183       const Matrix& Px_U,
    00184       Index& n_tot,
    00185       Index& n_only_lower,
    00186       Index& n_both,
    00187       Index& n_only_upper);
    00188
    00196     Number correct_bound_multiplier(const Vector& trial_z,
    00197                                     const Vector& trial_slack,
    00198                                     const Vector& trial_compl,
    00199                                     SmartPtr<const Vector>& new_trial_z);
    00201   };
    00202
    00203 } // namespace Ipopt
    00204
    00205 #endif