00001
00002
00003
00004
00005
00006
00007
00008
00009
00010 #ifndef ClpSimplexOther_H
00011 #define ClpSimplexOther_H
00012
00013 #include "ClpSimplex.hpp"
00014
00022 class ClpSimplexOther : public ClpSimplex {
00023
00024 public:
00025
00048 void dualRanging(int numberCheck,const int * which,
00049 double * costIncrease, int * sequenceIncrease,
00050 double * costDecrease, int * sequenceDecrease,
00051 double * valueIncrease=NULL, double * valueDecrease=NULL);
00066 void primalRanging(int numberCheck,const int * which,
00067 double * valueIncrease, int * sequenceIncrease,
00068 double * valueDecrease, int * sequenceDecrease);
00082 int parametrics(double startingTheta, double & endingTheta,double reportIncrement,
00083 const double * changeLowerBound, const double * changeUpperBound,
00084 const double * changeLowerRhs, const double * changeUpperRhs,
00085 const double * changeObjective);
00086 private:
00095 int parametricsLoop(double startingTheta, double & endingTheta,double reportIncrement,
00096 const double * changeLower, const double * changeUpper,
00097 const double * changeObjective, ClpDataSave & data,
00098 bool canTryQuick);
00106 void statusOfProblemInParametrics(int type,ClpDataSave & saveData);
00117 int whileIterating(double startingTheta, double & endingTheta,double reportIncrement,
00118 const double * changeLower, const double * changeUpper,
00119 const double * changeObjective);
00124 int nextTheta(int type, double maxTheta, double * primalChange, double * dualChange,
00125 const double * changeLower, const double * changeUpper,
00126 const double * changeObjective);
00132 void checkDualRatios(CoinIndexedVector * rowArray,
00133 CoinIndexedVector * columnArray,
00134 double & costIncrease, int & sequenceIncrease, double & alphaIncrease,
00135 double & costDecrease, int & sequenceDecrease, double & alphaDecrease);
00140 void checkPrimalRatios(CoinIndexedVector * rowArray,
00141 int direction);
00143 double primalRanging1(int whichIn, int whichOther);
00144
00145 public:
00160 int writeBasis(const char *filename,
00161 bool writeValues=false,
00162 int formatType=0) const;
00164 int readBasis(const char *filename);
00170 ClpSimplex * dualOfModel(double fractionRowRanges=1.0,double fractionColumnRanges=1.0) const;
00174 int restoreFromDual(const ClpSimplex * dualProblem);
00178 ClpSimplex * crunch(double * rhs, int * whichRows, int * whichColumns,
00179 int & nBound, bool moreBounds=false, bool tightenBounds=false);
00183 void afterCrunch(const ClpSimplex & small,
00184 const int * whichRows, const int * whichColumns,
00185 int nBound);
00188 int tightenIntegerBounds(double * rhsSpace);
00199 int expandKnapsack(int knapsackRow, int & numberOutput,
00200 double * buildObj, CoinBigIndex * buildStart,
00201 int * buildRow, double * buildElement,int reConstruct=-1) const;
00203 };
00204 #endif