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
00086 private:
00096 DefaultIterateInitializer();
00097
00099 DefaultIterateInitializer(const DefaultIterateInitializer&);
00100
00102 void operator=(const DefaultIterateInitializer&);
00104
00108 Number bound_push_;
00110 Number bound_frac_;
00112 Number slack_bound_push_;
00114 Number slack_bound_frac_;
00115
00119 Number constr_mult_init_max_;
00121 Number bound_mult_init_val_;
00124 bool warm_start_init_point_;
00128 bool least_square_init_primal_;
00132 bool least_square_init_duals_;
00134
00137 SmartPtr<EqMultiplierCalculator> eq_mult_calculator_;
00138
00140 SmartPtr<IterateInitializer> warm_start_initializer_;
00141
00145 SmartPtr<AugSystemSolver> aug_system_solver_;
00146
00149 bool CalculateLeastSquarePrimals(Vector& x_ls, Vector& s_ls);
00150
00153 bool CalculateLeastSquareDuals(Vector& zL_new, Vector& zU_new,
00154 Vector& vL_new, Vector& vU_new,
00155 Vector& yc_new, Vector& yd_new);
00156
00157 };
00158
00159 }
00160
00161 #endif