11 #ifndef ClpSimplexOther_H
12 #define ClpSimplexOther_H
49 void dualRanging(
int numberCheck,
const int * which,
50 double * costIncrease,
int * sequenceIncrease,
51 double * costDecrease,
int * sequenceDecrease,
52 double * valueIncrease = NULL,
double * valueDecrease = NULL);
68 double * valueIncrease,
int * sequenceIncrease,
69 double * valueDecrease,
int * sequenceDecrease);
83 int parametrics(
double startingTheta,
double & endingTheta,
double reportIncrement,
84 const double * changeLowerBound,
const double * changeUpperBound,
85 const double * changeLowerRhs,
const double * changeUpperRhs,
86 const double * changeObjective);
100 int parametrics(
double startingTheta,
double & endingTheta,
101 const double * changeLowerBound,
const double * changeUpperBound,
102 const double * changeLowerRhs,
const double * changeUpperRhs);
104 const double * changeObjective);
106 double bestPivot(
bool justColumns=
false);
138 const double * changeLower,
const double * changeUpper,
139 const double * changeObjective,
ClpDataSave & data,
142 ClpDataSave & data,
bool canSkipFactorization=
false);
144 ClpDataSave & data,
bool canSkipFactorization=
false);
165 const double * changeObjective);
171 const double * changeObjective);
176 const double * changeUpper);
188 double & costIncrease,
int & sequenceIncrease,
double & alphaIncrease,
189 double & costDecrease,
int & sequenceDecrease,
double & alphaDecrease);
215 bool writeValues =
false,
216 int formatType = 0)
const;
229 bool checkAccuracy=
false);
238 int & nBound,
bool moreBounds =
false,
bool tightenBounds =
false);
243 const int * whichRows,
const int * whichColumns,
253 const int * whichColumns);
256 const int * whichColumns)
const;
274 int * buildRow,
double * buildElement,
int reConstruct = -1)
const;
void checkPrimalRatios(CoinIndexedVector *rowArray, int direction)
Row array has pivot column This is used in primal ranging.
void statusOfProblemInParametricsObj(int type, ClpDataSave &saveData)
Dual ranging.
ClpDataSave saveData()
Save data.
void getGubBasis(ClpSimplex &original, const int *whichRows, const int *whichColumns) const
Restores basis to original.
This is a tiny class where data can be saved round calls.
double computeRhsEtc(parametricsData ¶mData)
Compute new rowLower_ etc (return negative if infeasible - otherwise largest change) ...
double * upperCoefficient
int setInDual(ClpSimplex *dualProblem)
Sets solution in dualized problem non-zero return code indicates minor problems.
void cleanupAfterPostsolve()
Quick try at cleaning up duals if postsolve gets wrong.
int parametricsObjLoop(parametricsData ¶mData, ClpDataSave &data, bool canSkipFactorization=false)
Dual ranging.
int parametricsObj(double startingTheta, double &endingTheta, const double *changeObjective)
Dual ranging.
double acceptableMaxTheta
int parametricsLoop(parametricsData ¶mData, double reportIncrement, const double *changeLower, const double *changeUpper, const double *changeObjective, ClpDataSave &data, bool canTryQuick)
Parametrics - inner loop This first attempt is when reportIncrement non zero and may not report endin...
int whileIterating(parametricsData ¶mData, double reportIncrement, const double *changeObjective)
This has the flow between re-factorizations.
ClpSimplex * gubVersion(int *whichRows, int *whichColumns, int neededGub, int factorizationFrequency=50)
Returns gub version of model or NULL whichRows has to be numberRows whichColumns has to be numberRows...
CoinIndexedVector * columnArray(int index) const
Useful column length arrays (0,1,2,3,4,5)
double theta() const
Theta (pivot change)
double * lowerCoefficient
void originalBound(int iSequence, double theta, const double *changeLower, const double *changeUpper)
Restores bound to original bound.
ClpSimplex * crunch(double *rhs, int *whichRows, int *whichColumns, int &nBound, bool moreBounds=false, bool tightenBounds=false)
Does very cursory presolve.
void dualRanging(int numberCheck, const int *which, double *costIncrease, int *sequenceIncrease, double *costDecrease, int *sequenceDecrease, double *valueIncrease=NULL, double *valueDecrease=NULL)
Dual ranging.
double bestPivot(bool justColumns=false)
Finds best possible pivot.
void primalRanging(int numberCheck, const int *which, double *valueIncrease, int *sequenceIncrease, double *valueDecrease, int *sequenceDecrease)
Primal ranging.
This solves LPs using the simplex method.
double primalRanging1(int whichIn, int whichOther)
Returns new value of whichOther when whichIn enters basis.
int writeBasis(const char *filename, bool writeValues=false, int formatType=0) const
Write the basis in MPS format to the specified file.
void afterCrunch(const ClpSimplex &small, const int *whichRows, const int *whichColumns, int nBound)
After very cursory presolve.
ClpSimplex * dualOfModel(double fractionRowRanges=1.0, double fractionColumnRanges=1.0) const
Creates dual of a problem if looks plausible (defaults will always create model) fractionRowRanges is...
int factorizationFrequency() const
Factorization frequency.
int tightenIntegerBounds(double *rhsSpace)
Tightens integer bounds - returns number tightened or -1 if infeasible.
int restoreFromDual(const ClpSimplex *dualProblem, bool checkAccuracy=false)
Restores solution from dualized problem non-zero return code indicates minor problems.
CoinIndexedVector * rowArray(int index) const
Useful row length arrays (0,1,2,3,4,5)
int nextThetaObj(double maxTheta, parametricsData ¶mData)
Dual ranging.
int parametrics(double startingTheta, double &endingTheta, double reportIncrement, const double *changeLowerBound, const double *changeUpperBound, const double *changeLowerRhs, const double *changeUpperRhs, const double *changeObjective)
Parametrics This is an initial slow version.
void redoInternalArrays()
Redo lower_ from rowLower_ etc.
int expandKnapsack(int knapsackRow, int &numberOutput, double *buildObj, CoinBigIndex *buildStart, int *buildRow, double *buildElement, int reConstruct=-1) const
Expands out all possible combinations for a knapsack If buildObj NULL then just computes space needed...
void statusOfProblemInParametrics(int type, ClpDataSave &saveData)
Refactorizes if necessary Checks if finished.
int nextTheta(int type, double maxTheta, parametricsData ¶mData, const double *changeObjective)
Computes next theta and says if objective or bounds (0= bounds, 1 objective, -1 none).
This is for Simplex stuff which is neither dual nor primal.
int readBasis(const char *filename)
Read a basis from the given filename.
int unscaledChangesOffset
void setGubBasis(ClpSimplex &original, const int *whichRows, const int *whichColumns)
Sets basis from original.
void checkDualRatios(CoinIndexedVector *rowArray, CoinIndexedVector *columnArray, double &costIncrease, int &sequenceIncrease, double &alphaIncrease, double &costDecrease, int &sequenceDecrease, double &alphaDecrease)
Row array has row part of pivot row Column array has column part.
int whileIteratingObj(parametricsData ¶mData)
Dual ranging.