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 namespace Bonmin
00018 {
00019 class IpoptInteriorWarmStarter : public ReferencedObject
00020 {
00021 public:
00026 IpoptInteriorWarmStarter(Index n, const Number* x_L, const Number* x_u,
00027 Number nlp_lower_bound_inf,
00028 Number nlp_upper_bound_inf,
00029 bool store_several_iterates);
00030
00032 ~IpoptInteriorWarmStarter();
00034
00038 bool UpdateStoredIterates(AlgorithmMode mode,
00039 const IpoptData& ip_data,
00040 IpoptCalculatedQuantities& ip_cq);
00041
00044 bool Finalize();
00045
00048 bool WarmStartIterate(Index n, const Number* x_l_new, const Number* x_u_new,
00049 IteratesVector& warm_start_iterate);
00050
00051 private:
00061 IpoptInteriorWarmStarter();
00062
00064 IpoptInteriorWarmStarter(const IpoptInteriorWarmStarter&);
00065
00067 void operator=(const IpoptInteriorWarmStarter&);
00069
00071
00072 Number nlp_lower_bound_inf_;
00074 Number nlp_upper_bound_inf_;
00077 bool store_several_iterates_;
00079
00085 Index n_;
00086 Number* x_l_prev_;
00087 Number* x_u_prev_;
00089
00093 Index n_stored_iterates_;
00094 std::vector<Index> stored_iter_;
00095 std::vector<SmartPtr<const IteratesVector> > stored_iterates_;
00096 std::vector<Number> stored_mu_;
00097 std::vector<Number> stored_nlp_error_;
00098 std::vector<Number> stored_primal_inf_;
00099 std::vector<Number> stored_dual_inf_;
00100 std::vector<Number> stored_compl_;
00102 };
00103 }
00104 #endif