Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030 #include "BcpsBranchObject.h"
00031
00032 #include "BlisModel.h"
00033
00034
00035
00036
00037
00038 class BlisBranchObjectInt : public BcpsBranchObject {
00039
00040 protected:
00041
00044 double down_[2];
00045
00048 double up_[2];
00049
00050 public:
00051
00053 BlisBranchObjectInt()
00054 :
00055 BcpsBranchObject()
00056 {
00057 type_ = BlisBranchingObjectTypeInt;
00058 down_[0] = 0.0;
00059 down_[1] = 0.0;
00060 up_[0] = 0.0;
00061 up_[1] = 0.0;
00062 }
00063
00069 BlisBranchObjectInt(BlisModel * model,
00070 int varInd,
00071 int direction,
00072 double value)
00073 :
00074 BcpsBranchObject(model, varInd, direction, value)
00075 {
00076 type_ = BlisBranchingObjectTypeInt;
00077 int iColumn = model->getIntColIndices()[objectIndex_];
00078 down_[0] = model->solver()->getColLower()[iColumn];
00079 down_[1] = floor(value_);
00080 up_[0] = ceil(value_);
00081 up_[1] = model->getColUpper()[iColumn];
00082 }
00083
00091 BlisBranchObjectInt(BlisModel * model,
00092 int varInd,
00093 int intScore,
00094 double dblScore,
00095 int direction,
00096 double value)
00097 :
00098 BcpsBranchObject(model, varInd, intScore, dblScore, direction, value)
00099 {
00100 type_ = BlisBranchingObjectTypeInt;
00101 int iColumn = model->getIntColIndices()[objectIndex_];
00102 down_[0] = model->solver()->getColLower()[iColumn];
00103 down_[1] = floor(value_);
00104 up_[0] = ceil(value_);
00105 up_[1] = model->getColUpper()[iColumn];
00106 }
00107
00113 BlisBranchObjectInt(BlisModel * model,
00114 int varInd,
00115 int direction,
00116 double lowerValue,
00117 double upperValue)
00118 :
00119 BcpsBranchObject(model, varInd, direction, lowerValue)
00120 {
00121 type_ = BlisBranchingObjectTypeInt;
00122 numBranchesLeft_ = 1;
00123 down_[0] = lowerValue;
00124 down_[1] = upperValue;
00125 up_[0] = lowerValue;
00126 up_[1] = upperValue;
00127 }
00128
00130 BlisBranchObjectInt(const BlisBranchObjectInt &);
00131
00133 BlisBranchObjectInt & operator = (const BlisBranchObjectInt& rhs);
00134
00136 virtual BcpsBranchObject * clone() const {
00137 return (new BlisBranchObjectInt(*this));
00138 }
00139
00141 virtual ~BlisBranchObjectInt() {}
00142
00146 virtual double branch(bool normalBranch = false);
00147
00149 virtual void print(bool normalBranch);
00150
00152 const double *getDown() const { return down_; }
00153
00155 const double *getUp() const { return up_; }
00156
00157 protected:
00158
00160 AlpsReturnStatus encodeBlis(AlpsEncoded *encoded) const {
00161 assert(encoded);
00162 AlpsReturnStatus status = AlpsReturnStatusOk;
00163 int j;
00164
00165 for (j = 0; j < 2; ++j) {
00166 encoded->writeRep(down_[j]);
00167 }
00168 for (j = 0; j < 2; ++j) {
00169 encoded->writeRep(up_[j]);
00170 }
00171
00172 return status;
00173 }
00174
00176 AlpsReturnStatus decodeBlis(AlpsEncoded &encoded) {
00177 AlpsReturnStatus status = AlpsReturnStatusOk;
00178 int j;
00179
00180 for (j = 0; j < 2; ++j) {
00181 encoded.readRep(down_[j]);
00182 }
00183 for (j = 0; j < 2; ++j) {
00184 encoded.readRep(up_[j]);
00185 }
00186
00187 return status;
00188 }
00189
00190 public:
00191
00193 virtual AlpsReturnStatus encode(AlpsEncoded *encoded) const {
00194 AlpsReturnStatus status = AlpsReturnStatusOk;
00195
00196 status = encodeBcps(encoded);
00197 status = encodeBlis(encoded);
00198
00199 return status;
00200 }
00201
00203 virtual AlpsReturnStatus decode(AlpsEncoded &encoded) {
00204
00205 AlpsReturnStatus status = AlpsReturnStatusOk;
00206
00207 status = decodeBcps(encoded);
00208 status = decodeBlis(encoded);
00209
00210 return status;
00211 }
00212
00213 };
00214