00001
00002
00003
00004
00005
00006
00007
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 }
00172
00173 #endif