template T CoinMax(register const T x1, register const T x2); template T CoinMin(register const T x1, register const T x2); class CoinIndexedVector; class ClpModel { protected: double objectiveScale_; double rhsScale_; int numberRows_; int numberColumns_; double * rowActivity_; double * columnActivity_; double * dual_; double * reducedCost_; double* rowLower_; double* rowUpper_; double * rowObjective_; double * columnLower_; double * columnUpper_; double * rowScale_; double * columnScale_; double * inverseRowScale_; double * inverseColumnScale_; int problemStatus_; int secondaryStatus_; }; class ClpSimplex : public ClpModel { void deleteRim(int getRidOfFactorizationData=2); double upperOut_; double dualTolerance_; double primalTolerance_; double * rowLowerWork_; double * columnLowerWork_; double * rowUpperWork_; double * columnUpperWork_; double * rowObjectiveWork_; CoinIndexedVector * columnArray_[6]; double * reducedCostWork_; double * rowActivityWork_; double * columnActivityWork_; ClpSimplex * auxiliaryModel_; }; class CoinIndexedVector { public: void clear(); }; void ClpSimplex::deleteRim(int getRidOfFactorizationData) { int numberRows=numberRows_; int numberColumns=numberColumns_; int i; int numberPrimalScaled=0; int numberPrimalUnscaled=0; int numberDualScaled=0; int numberDualUnscaled=0; double scaleC = 1.0/objectiveScale_; double scaleR = 1.0/rhsScale_; if (!inverseColumnScale_) { for (i=0; i-1.0e20||upperScaled<1.0e20) { if (valueScaledupperScaled+primalTolerance_) numberPrimalScaled++; else upperOut_ = CoinMax(upperOut_,CoinMin(valueScaled-lowerScaled,upperScaled-valueScaled)); } columnActivity_[i] = valueScaled*scaleFactor*scaleR; double value = columnActivity_[i]; if (valuecolumnUpper_[i]+primalTolerance_) numberPrimalUnscaled++; double valueScaledDual = reducedCostWork_[i]; if (valueScaled>columnLowerWork_[i]+primalTolerance_&&valueScaledDual>dualTolerance_) numberDualScaled++; if (valueScaledcolumnLower_[i]+primalTolerance_&&valueDual>dualTolerance_) numberDualUnscaled++; if (value-1.0e20||upperScaled<1.0e20) { if (valueScaledupperScaled+primalTolerance_) numberPrimalScaled++; else upperOut_ = CoinMax(upperOut_,CoinMin(valueScaled-lowerScaled,upperScaled-valueScaled)); } rowActivity_[i] = (valueScaled*scaleR)/scaleFactor; double value = rowActivity_[i]; if (valuerowUpper_[i]+primalTolerance_) numberPrimalUnscaled++; double valueScaledDual = dual_[i]+rowObjectiveWork_[i]; ; if (valueScaled>rowLowerWork_[i]+primalTolerance_&&valueScaledDual>dualTolerance_) numberDualScaled++; if (valueScaledrowLower_[i]+primalTolerance_&&valueDual>dualTolerance_) numberDualUnscaled++; if (value-1.0e20||upperScaled<1.0e20) { if (valueScaledupperScaled+primalTolerance_) numberPrimalScaled++; else upperOut_ = CoinMax(upperOut_,CoinMin(valueScaled-lowerScaled,upperScaled-valueScaled)); } columnActivity_[i] = valueScaled*scaleFactor*scaleR; double value = columnActivity_[i]; if (valuecolumnUpper_[i]+primalTolerance_) numberPrimalUnscaled++; double valueScaledDual = reducedCostWork_[i]; if (valueScaled>columnLowerWork_[i]+primalTolerance_&&valueScaledDual>dualTolerance_) numberDualScaled++; if (valueScaledcolumnLower_[i]+primalTolerance_&&valueDual>dualTolerance_) numberDualUnscaled++; if (value-1.0e20||upperScaled<1.0e20) { if (valueScaledupperScaled+primalTolerance_) numberPrimalScaled++; else upperOut_ = CoinMax(upperOut_,CoinMin(valueScaled-lowerScaled,upperScaled-valueScaled)); } rowActivity_[i] = (valueScaled*scaleR)*inverseScale[i]; double value = rowActivity_[i]; if (valuerowUpper_[i]+primalTolerance_) numberPrimalUnscaled++; double valueScaledDual = dual_[i]+rowObjectiveWork_[i]; ; if (valueScaled>rowLowerWork_[i]+primalTolerance_&&valueScaledDual>dualTolerance_) numberDualScaled++; if (valueScaledrowLower_[i]+primalTolerance_&&valueDual>dualTolerance_) numberDualUnscaled++; if (valueclear(); }