//---------------------------------------------------------------- // Print all cuts //---------------------------------------------------------------- void OsiCuts::printCuts() const { // do all column cuts first int i; int numberColCuts=sizeColCuts(); for (i=0;i<numberColCuts;i++) { const OsiColCut * cut = colCutPtr(i); cut->print(); } int numberRowCuts=sizeRowCuts(); for (i=0;i<numberRowCuts;i++) { const OsiRowCut * cut = rowCutPtr(i); cut->print(); } }
/* Insert a row cut unless it is a duplicate (CoinRelFltEq)*/ void OsiCuts::insertIfNotDuplicate( OsiRowCut & rc , CoinRelFltEq treatAsSame) { double newLb = rc.lb(); double newUb = rc.ub(); CoinPackedVector vector = rc.row(); int numberElements =vector.getNumElements(); int * newIndices = vector.getIndices(); double * newElements = vector.getElements(); CoinSort_2(newIndices,newIndices+numberElements,newElements); bool notDuplicate=true; int numberRowCuts = sizeRowCuts(); for ( int i =0; i<numberRowCuts;i++) { const OsiRowCut * cutPtr = rowCutPtr(i); if (cutPtr->row().getNumElements()!=numberElements) continue; if (!treatAsSame(cutPtr->lb(),newLb)) continue; if (!treatAsSame(cutPtr->ub(),newUb)) continue; const CoinPackedVector * thisVector = &(cutPtr->row()); const int * indices = thisVector->getIndices(); const double * elements = thisVector->getElements(); int j; for(j=0;j<numberElements;j++) { if (indices[j]!=newIndices[j]) break; if (!treatAsSame(elements[j],newElements[j])) break; } if (j==numberElements) { notDuplicate=false; break; } } if (notDuplicate) { OsiRowCut * newCutPtr = new OsiRowCut(); newCutPtr->setLb(newLb); newCutPtr->setUb(newUb); newCutPtr->setRow(vector); rowCutPtrs_.push_back(newCutPtr); } }
OsiRowCut & OsiCuts::rowCut(int i) { return *rowCutPtr(i); }
const OsiRowCut & OsiCuts::rowCut(int i) const { return *rowCutPtr(i); }