Ipopt
trunk
|
00001 // Copyright (C) 2004, 2008 International Business Machines and others. 00002 // All Rights Reserved. 00003 // This code is published under the Eclipse Public License. 00004 // 00005 // $Id$ 00006 // 00007 // Authors: Carl Laird, Andreas Waechter IBM 2004-09-24 00008 00009 #ifndef __IPDEFAULTITERATEINITIALIZER_HPP__ 00010 #define __IPDEFAULTITERATEINITIALIZER_HPP__ 00011 00012 #include "IpIterateInitializer.hpp" 00013 #include "IpEqMultCalculator.hpp" 00014 #include "IpAugSystemSolver.hpp" 00015 00016 namespace Ipopt 00017 { 00018 00024 class DefaultIterateInitializer: public IterateInitializer 00025 { 00026 public: 00034 DefaultIterateInitializer 00035 (const SmartPtr<EqMultiplierCalculator>& eq_mult_calculator, 00036 const SmartPtr<IterateInitializer>& warm_start_initializer, 00037 const SmartPtr<AugSystemSolver> aug_system_solver = NULL); 00038 00040 virtual ~DefaultIterateInitializer() 00041 {} 00043 00045 virtual bool InitializeImpl(const OptionsList& options, 00046 const std::string& prefix); 00047 00050 virtual bool SetInitialIterates(); 00051 00055 static void push_variables(const Journalist& jnlst, 00056 Number bound_push, 00057 Number bound_frac, 00058 std::string name, 00059 const Vector& orig_x, 00060 SmartPtr<const Vector>& new_x, 00061 const Vector& x_L, 00062 const Vector& x_U, 00063 const Matrix& Px_L, 00064 const Matrix& Px_U); 00065 00073 static void least_square_mults(const Journalist& jnlst, 00074 IpoptNLP& ip_nlp, 00075 IpoptData& ip_data, 00076 IpoptCalculatedQuantities& ip_cq, 00077 const SmartPtr<EqMultiplierCalculator>& eq_mult_calculator, 00078 Number constr_mult_init_max); 00079 00080 00083 static void RegisterOptions(SmartPtr<RegisteredOptions> reg_options); 00085 00088 enum BoundMultInitMethod 00089 { 00090 B_CONSTANT=0, 00091 B_MU_BASED 00092 }; 00094 private: 00104 DefaultIterateInitializer(); 00105 00107 DefaultIterateInitializer(const DefaultIterateInitializer&); 00108 00110 void operator=(const DefaultIterateInitializer&); 00112 00116 Number bound_push_; 00118 Number bound_frac_; 00120 Number slack_bound_push_; 00122 Number slack_bound_frac_; 00123 00127 Number constr_mult_init_max_; 00129 Number bound_mult_init_val_; 00132 bool warm_start_init_point_; 00136 bool least_square_init_primal_; 00140 bool least_square_init_duals_; 00142 BoundMultInitMethod bound_mult_init_method_; 00144 Number mu_init_; 00146 00149 SmartPtr<EqMultiplierCalculator> eq_mult_calculator_; 00150 00152 SmartPtr<IterateInitializer> warm_start_initializer_; 00153 00157 SmartPtr<AugSystemSolver> aug_system_solver_; 00158 00161 bool CalculateLeastSquarePrimals(Vector& x_ls, Vector& s_ls); 00162 00165 bool CalculateLeastSquareDuals(Vector& zL_new, Vector& zU_new, 00166 Vector& vL_new, Vector& vU_new, 00167 Vector& yc_new, Vector& yd_new); 00168 00169 }; 00170 00171 } // namespace Ipopt 00172 00173 #endif