00001
00002
00003
00004
00005
00006
00007
00008
00009 #ifndef __IPOPTINTERIORWARMSTARTER_HPP__
00010 #define __IPOPTINTERIORWARMSTARTER_HPP__
00011
00012 #include "IpSmartPtr.hpp"
00013 #include "IpNLP.hpp"
00014 #include <vector>
00015
00016 using namespace Ipopt;
00017
00018 class IpoptInteriorWarmStarter : public ReferencedObject
00019 {
00020 public:
00025 IpoptInteriorWarmStarter(Index n, const Number* x_L, const Number* x_u,
00026 Number nlp_lower_bound_inf,
00027 Number nlp_upper_bound_inf,
00028 bool store_several_iterates);
00029
00031 ~IpoptInteriorWarmStarter();
00033
00037 bool UpdateStoredIterates(AlgorithmMode mode,
00038 const IpoptData& ip_data,
00039 IpoptCalculatedQuantities& ip_cq);
00040
00043 bool Finalize();
00044
00047 bool WarmStartIterate(Index n, const Number* x_l_new, const Number* x_u_new,
00048 IteratesVector& warm_start_iterate);
00049
00050 private:
00060 IpoptInteriorWarmStarter();
00061
00063 IpoptInteriorWarmStarter(const IpoptInteriorWarmStarter&);
00064
00066 void operator=(const IpoptInteriorWarmStarter&);
00068
00070
00071 Number nlp_lower_bound_inf_;
00073 Number nlp_upper_bound_inf_;
00076 bool store_several_iterates_;
00078
00084 Index n_;
00085 Number* x_l_prev_;
00086 Number* x_u_prev_;
00088
00092 Index n_stored_iterates_;
00093 std::vector<Index> stored_iter_;
00094 std::vector<SmartPtr<const IteratesVector> > stored_iterates_;
00095 std::vector<Number> stored_mu_;
00096 std::vector<Number> stored_nlp_error_;
00097 std::vector<Number> stored_primal_inf_;
00098 std::vector<Number> stored_dual_inf_;
00099 std::vector<Number> stored_compl_;
00101 };
00102
00103 #endif