00001
00002
00003 #ifndef _BCP_WARMSTART_PRIMALDUAL_H
00004 #define _BCP_WARMSTART_PRIMALDUAL_H
00005
00006 #include "BCP_enum.hpp"
00007 #include "BCP_warmstart.hpp"
00008 #include "BCP_vector_change.hpp"
00009
00010
00011
00012
00013
00014
00015
00016
00017
00021 class BCP_warmstart_primaldual : public BCP_warmstart {
00022 private:
00024 BCP_warmstart_primaldual& operator=(const BCP_warmstart_primaldual&);
00025
00029 BCP_warmstart_primaldual() :
00030 _primal(BCP_Storage_WrtParent), _dual(BCP_Storage_WrtParent) {}
00031
00032 private:
00034 BCP_vec_change<double> _primal;
00036 BCP_vec_change<double> _dual;
00039 public:
00043 BCP_warmstart_primaldual(BCP_buffer& buf) : _primal(buf), _dual(buf) {}
00047 BCP_warmstart_primaldual(const double* pfirst, const double* plast,
00048 const double* dfirst, const double* dlast) :
00049 _primal(pfirst, plast), _dual(dfirst, dlast) {}
00051 BCP_warmstart_primaldual(const BCP_warmstart_primaldual& ws) :
00052 _primal(ws._primal), _dual(ws._dual) {}
00053
00054 virtual ~BCP_warmstart_primaldual() {}
00057
00058
00061 virtual CoinWarmStart* convert_to_CoinWarmStart() const;
00062
00063 virtual BCP_storage_t storage() const {
00064 BCP_storage_t return_matrix[16] = {
00065 BCP_Storage_NoData, BCP_Storage_NoData,
00066 BCP_Storage_NoData, BCP_Storage_NoData,
00067
00068 BCP_Storage_NoData, BCP_Storage_Explicit,
00069 BCP_Storage_WrtParent, BCP_Storage_NoData,
00070
00071 BCP_Storage_NoData, BCP_Storage_WrtParent,
00072 BCP_Storage_WrtParent, BCP_Storage_NoData,
00073
00074 BCP_Storage_NoData, BCP_Storage_NoData,
00075 BCP_Storage_NoData, BCP_Storage_NoData
00076 };
00077 int pst = _primal.storage();
00078 int dst = _dual.storage();
00079 return return_matrix[4*pst + dst];
00080 }
00081
00082 virtual BCP_warmstart* clone() const {
00083 return new BCP_warmstart_primaldual(*this);
00084 }
00085
00086 virtual BCP_warmstart* empty_wrt_this() const {
00087
00088
00089 return new BCP_warmstart_primaldual();
00090 }
00091
00092 virtual int storage_size() const {
00093 return _primal.storage_size() + _dual.storage_size();
00094 }
00095
00096 virtual void update(const BCP_warmstart* const change);
00097
00098 virtual BCP_warmstart* as_change(const BCP_warmstart* const old_ws,
00099 const BCP_vec<int>& del_vars,
00100 const BCP_vec<int>& del_cuts,
00101 const double petol,
00102 const double detol) const;
00103
00104
00105
00107 void pack(BCP_buffer& buf) const {
00108 _primal.pack(buf);
00109 _dual.pack(buf);
00110 }
00111 };
00112
00113 #endif