00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015 #ifndef VrpVariable_h_
00016 #define VrpVariable_h_
00017
00018
00019
00020 #include "BlisVariable.h"
00021
00022
00023
00025 class VrpVariable : public BlisVariable
00026 {
00027 private:
00028
00029
00030 int ends_[2];
00031 int uind_;
00032
00033 protected:
00034
00036 AlpsReturnStatus encodeVrp(AlpsEncoded *encoded) {
00037 AlpsReturnStatus status = AlpsReturnStatusOk;
00038
00039
00040
00041 encoded->writeRep(ends_[0]);
00042 encoded->writeRep(ends_[1]);
00043 encoded->writeRep(uind_);
00044
00045 return status;
00046 }
00047
00049 AlpsReturnStatus decodeVrp(AlpsEncoded &encoded) {
00050 AlpsReturnStatus status = AlpsReturnStatusOk;
00051
00052 encoded.readRep(ends_[0]);
00053 encoded.readRep(ends_[1]);
00054 encoded.readRep(uind_);
00055
00056
00057
00058 return status;
00059 }
00060
00061 public:
00062
00064 VrpVariable() {
00065 ends_[0] = 0;
00066 ends_[1] = 0;
00067 }
00068
00070 VrpVariable(int v1, int v2, int cost, int ub) {
00071 ends_[0] = v1 < v2 ? v1 : v2;
00072 ends_[1] = v1 < v2 ? v2 : v1;
00073 uind_ = ends_[1]*(ends_[1] - 1)/2 + ends_[0];
00074 int indices [2];
00075 double values [2];
00076 indices[0] = ends_[0];
00077 indices[1] = ends_[1];
00078 values[0] = values[1] = 1.0;
00079 setData(2, indices, values);
00080 setIntType('B');
00081 setLbHard(0.0);
00082 setUbHard((double) ub);
00083 setObjCoef((double) cost);
00084 }
00085
00087 virtual ~VrpVariable() {
00088
00089 }
00090
00093 inline int getIndex() { return uind_; }
00094 inline int getv0() { return ends_[0]; }
00095 inline int getv1() { return ends_[1]; }
00099 virtual AlpsReturnStatus encode(AlpsEncoded *encoded){
00100 AlpsReturnStatus status;
00101
00102 status = encodeBcpsObject(encoded);
00103 status = encodeBlis(encoded);
00104 status = encodeVrp(encoded);
00105
00106 return status;
00107 }
00108
00110 virtual AlpsKnowledge* decode(AlpsEncoded &encoded) const {
00111 AlpsReturnStatus status = AlpsReturnStatusOk;
00112 VrpVariable * var = new VrpVariable();
00113
00114
00115 status = var->decodeBcpsObject(encoded);
00116 if (status) {
00117 throw CoinError("Failed to decode Bcps part of var",
00118 "decode",
00119 "BlisObject");
00120 }
00121
00122
00123 status = var->decodeBlis(encoded);
00124 if (status) {
00125 throw CoinError("Failed to decode Blis part of var",
00126 "decode",
00127 "BlisObject");
00128 }
00129
00130
00131 status = var->decodeVrp(encoded);
00132 if (status) {
00133 throw CoinError("Failed to decode Vrp part of var",
00134 "decode",
00135 "BlisObject");
00136 }
00137 return var;
00138 }
00139
00140 };
00141
00142
00143
00144 #endif