BonIpoptWarmStart.hpp
Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012 #ifndef IpoptWarmStart_HPP
00013 #define IpoptWarmStart_HPP
00014 #include "CoinWarmStartBasis.hpp"
00015 #include "CoinWarmStartPrimalDual.hpp"
00016 #include "BonIpoptInteriorWarmStarter.hpp"
00017
00018
00019 namespace Bonmin
00020 {
00021 class TMINLP2TNLP;
00022
00046 class IpoptWarmStart :
00047 public virtual CoinWarmStartPrimalDual, public virtual CoinWarmStartBasis
00048 {
00049 public:
00050
00052 IpoptWarmStart(bool empty = 1, int numvars = 0, int numcont = 0);
00054 IpoptWarmStart(const Ipopt::SmartPtr<TMINLP2TNLP> tnlp,
00055 Ipopt::SmartPtr<IpoptInteriorWarmStarter> warm_starter);
00057 IpoptWarmStart(int primal_size, int dual_size,
00058 const double * primal, const double * dual);
00060 IpoptWarmStart( const IpoptWarmStart &other, bool ownValues = 1);
00062 IpoptWarmStart(const CoinWarmStartPrimalDual& pdws);
00064 virtual ~IpoptWarmStart();
00065
00067 virtual CoinWarmStart *clone() const
00068 {
00069 return new IpoptWarmStart(*this,1);
00070 }
00071
00073 virtual CoinWarmStartDiff*
00074 generateDiff(const CoinWarmStart *const oldCWS) const;
00078 virtual void
00079 applyDiff (const CoinWarmStartDiff *const cwsdDiff);
00080
00082 Ipopt::SmartPtr<IpoptInteriorWarmStarter> warm_starter() const
00083 {
00084 return warm_starter_;
00085 }
00086
00088 void flushPoint();
00089
00091 bool empty() const
00092 {
00093 return empty_;
00094 }
00095 private:
00097 mutable Ipopt::SmartPtr<IpoptInteriorWarmStarter> warm_starter_;
00099 bool empty_;
00100 };
00101
00102
00103
00109 class IpoptWarmStartDiff : public CoinWarmStartPrimalDualDiff
00110 {
00111 public:
00112 friend class IpoptWarmStart;
00114 IpoptWarmStartDiff(CoinWarmStartPrimalDualDiff * diff,
00115 Ipopt::SmartPtr<IpoptInteriorWarmStarter> warm_starter):
00116 CoinWarmStartPrimalDualDiff(),
00117 warm_starter_(NULL)
00118 {
00119 CoinWarmStartPrimalDualDiff::swap(*diff);
00120 }
00122 IpoptWarmStartDiff(const IpoptWarmStartDiff &other):
00123 CoinWarmStartPrimalDualDiff(other),
00124 warm_starter_(NULL ) {}
00125
00127 virtual ~IpoptWarmStartDiff() {}
00128
00130 virtual CoinWarmStartDiff *clone() const
00131 {
00132 return new IpoptWarmStartDiff(*this);
00133 }
00134
00136 Ipopt::SmartPtr<IpoptInteriorWarmStarter> warm_starter() const
00137 {
00138 return warm_starter_;
00139 }
00140 void flushPoint();
00141 private:
00142
00144 Ipopt::SmartPtr<IpoptInteriorWarmStarter> warm_starter_;
00145 };
00146
00147 }
00148 #endif