18#ifndef DECOMP_VAR_INCLUDED
19#define DECOMP_VAR_INCLUDED
41 std::string m_strHash;
72 return m_colMasterIndex;
82 m_colMasterIndex = colIndex;
91 m_origCost = origCost;
101 m_effCnt = m_effCnt <= 0 ? 1 : m_effCnt + 1;
107 m_effCnt = m_effCnt >= 0 ? -1 : m_effCnt - 1;
123 DecompVarList::const_iterator vi;
125 for (vi = vars.begin(); vi != vars.end(); vi++) {
126 if ((*vi)->getStrHash() == this->getStrHash()) {
145 std::ostream* os = &std::cout,
149 const std::vector<std::string>& colNames,
150 const double* value = NULL)
const;
156 m_varType (source.m_varType),
157 m_origCost(source.m_origCost),
158 m_effCnt (source.m_effCnt),
159 m_strHash (source.m_strHash),
160 m_blockId (source.m_blockId),
161 m_colMasterIndex (source.m_colMasterIndex),
162 m_norm (source.m_norm) {
168 m_varType = rhs.m_varType;
169 m_origCost = rhs.m_origCost;
170 m_redCost = rhs.m_redCost;
171 m_effCnt = rhs.m_effCnt;
172 m_strHash = rhs.m_strHash;
173 m_blockId = rhs.m_blockId;
174 m_colMasterIndex = rhs.m_colMasterIndex;
188 m_colMasterIndex(-1),
194 const double redCost,
195 const double origCost,
199 m_origCost(origCost),
204 m_colMasterIndex(-1),
207 if (ind.size() > 0) {
208 m_s.setConstant(static_cast<int>(ind.size()),
209 &ind[0], els, DECOMP_TEST_DUPINDEX);
210 m_strHash = UtilCreateStringHash(static_cast<int>(ind.size()),
218 const std::vector<double>& els,
219 const double redCost,
220 const double origCost) :
223 m_origCost(origCost),
228 m_colMasterIndex(-1),
231 if (ind.size() > 0) {
232 m_s.setVector(static_cast<int>(ind.size()),
233 &ind[0], &els[0], DECOMP_TEST_DUPINDEX);
234 m_strHash = UtilCreateStringHash(static_cast<int>(ind.size()),
242 const std::vector<double>& els,
243 const double redCost,
244 const double origCost,
248 m_origCost(origCost),
253 m_colMasterIndex(-1),
256 if (ind.size() > 0) {
257 m_s.setVector(static_cast<int>(ind.size()),
258 &ind[0], &els[0], DECOMP_TEST_DUPINDEX);
259 m_strHash = UtilCreateStringHash(static_cast<int>(ind.size()),
269 const double origCost) :
272 m_origCost(origCost),
277 m_colMasterIndex(-1),
290 const double origCost,
294 m_origCost(origCost),
299 m_colMasterIndex(-1),
312 const double origCost) :
315 m_origCost(origCost),
320 m_colMasterIndex(-1),
333 const double origCost,
337 m_origCost(origCost),
342 m_colMasterIndex(-1),
355 const double redCost,
356 const double origCost) :
359 m_origCost(origCost),
364 m_colMasterIndex(-1),
377 const double redCost,
378 const double origCost,
382 m_origCost(origCost),
387 m_colMasterIndex(-1),
398 const double* denseArray,
399 const double redCost,
400 const double origCost,
404 m_origCost(origCost),
409 m_colMasterIndex(-1),
const double COIN_DBL_MAX
#define DECOMP_TEST_DUPINDEX
std::list< DecompVar * > DecompVarList
const double DecompEpsilon
std::string UtilCreateStringHash(const int len, const double *els, const int precision=6)
CoinPackedVector * UtilPackedVectorFromDense(const int len, const double *dense, const double etol)
bool isEquivalent(const CoinPackedVectorBase &rhs, const FloatEqual &eq) const
void setVector(int size, const int *inds, const double *elems, bool testForDuplicateIndex=COIN_DEFAULT_VALUE_FOR_DUPLICATE)
void setConstant(int size, const int *inds, double elems, bool testForDuplicateIndex=COIN_DEFAULT_VALUE_FOR_DUPLICATE)
virtual int getNumElements() const
The main application class.
double getUpperBound() const
DecompVar & operator=(const DecompVar &rhs)
void setColMasterIndex(const int colIndex)
virtual void print(double infinity, std::ostream *os=&std::cout, DecompApp *app=0) const
int getColMasterIndex() const
DecompVar(const int len, const int *ind, const double els, const double origCost, const DecompVarType varType)
bool doesSatisfyBounds(int denseLen, double *denseArr, const DecompSubModel &model, const double *lbs, const double *ubs)
bool isEquivalent(const DecompVar &dvar)
void setVarType(const DecompVarType varType)
DecompVar(const int len, const int *ind, const double *els, const double redCost, const double origCost)
void increaseEffCnt()
Increase the effectiveness count by 1 (or to 1 if it was negative).
std::string getStrHash() const
void fillDenseArr(int len, double *arr)
virtual void print(double infinity, std::ostream *os, const std::vector< std::string > &colNames, const double *value=NULL) const
DecompVar(const int len, const int *ind, const double els, const double origCost)
void decreaseEffCnt()
Decrease the effectiveness count by 1 (or to -1 if it was positive).
DecompVar(const std::vector< int > &ind, const std::vector< double > &els, const double redCost, const double origCost, const DecompVarType varType)
DecompVar(const int denseLen, const double *denseArray, const double redCost, const double origCost, const DecompVarType varType)
double getOriginalCost() const
int getEffectiveness() const
void setBlockId(const int blockId)
double getLowerBound() const
void setReducedCost(const double redCost)
DecompVar(const int len, const int *ind, const double *els, const double redCost, const double origCost, const DecompVarType varType)
DecompVarType getVarType() const
bool isDuplicate(const DecompVarList &vars)
void setOriginalCost(const double origCost)
DecompVar(const int len, const int *ind, const double *els, const double origCost, const DecompVarType varType)
DecompVar(const std::vector< int > &ind, const std::vector< double > &els, const double redCost, const double origCost)
DecompVar(const int len, const int *ind, const double *els, const double origCost)
DecompVar(const DecompVar &source)
DecompVar(const std::vector< int > &ind, const double els, const double redCost, const double origCost, const DecompVarType varType)
double getReducedCost() const
void resetEffectiveness()