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
00045 void dualRanging(int numberCheck,const int * which,
00046 double * costIncrease, int * sequenceIncrease,
00047 double * costDecrease, int * sequenceDecrease);
00061 void primalRanging(int numberCheck,const int * which,
00062 double * valueIncrease, int * sequenceIncrease,
00063 double * valueDecrease, int * sequenceDecrease);
00077 int parametrics(double startingTheta, double & endingTheta,double reportIncrement,
00078 const double * changeLowerBound, const double * changeUpperBound,
00079 const double * changeLowerRhs, const double * changeUpperRhs,
00080 const double * changeObjective);
00089 int parametricsLoop(double startingTheta, double & endingTheta,double reportIncrement,
00090 const double * changeLower, const double * changeUpper,
00091 const double * changeObjective, ClpDataSave & data,
00092 bool canTryQuick);
00100 void statusOfProblemInParametrics(int type,ClpDataSave & saveData);
00111 int whileIterating(double startingTheta, double & endingTheta,double reportIncrement,
00112 const double * changeLower, const double * changeUpper,
00113 const double * changeObjective);
00118 int nextTheta(int type, double maxTheta, double * primalChange, double * dualChange,
00119 const double * changeLower, const double * changeUpper,
00120 const double * changeObjective);
00126 void checkDualRatios(CoinIndexedVector * rowArray,
00127 CoinIndexedVector * columnArray,
00128 double & costIncrease, int & sequenceIncrease, double & alphaIncrease,
00129 double & costDecrease, int & sequenceDecrease, double & alphaDecrease);
00134 void checkPrimalRatios(CoinIndexedVector * rowArray,
00135 int direction);
00150 int writeBasis(const char *filename,
00151 bool writeValues=false,
00152 int formatType=0) const;
00154 int readBasis(const char *filename);
00156 ClpSimplex * dualOfModel() const;
00158 void restoreFromDual(const ClpSimplex * dualProblem);
00162 ClpSimplex * crunch(double * rhs, int * whichRows, int * whichColumns,
00163 int & nBound, bool moreBounds=false, bool tightenBounds=false);
00167 void afterCrunch(const ClpSimplex & small,
00168 const int * whichRows, const int * whichColumns,
00169 int nBound);
00172 int tightenIntegerBounds(double * rhsSpace);
00174 };
00175 #endif