11#ifndef ClpSimplexOther_H
12#define ClpSimplexOther_H
49 double *costIncrease,
int *sequenceIncrease,
50 double *costDecrease,
int *sequenceDecrease,
51 double *valueIncrease = NULL,
double *valueDecrease = NULL);
67 double *valueIncrease,
int *sequenceIncrease,
68 double *valueDecrease,
int *sequenceDecrease);
82 int parametrics(
double startingTheta,
double &endingTheta,
double reportIncrement,
83 const double *changeLowerBound,
const double *changeUpperBound,
84 const double *changeLowerRhs,
const double *changeUpperRhs,
85 const double *changeObjective);
100 const double *changeLowerBound,
const double *changeUpperBound,
101 const double *changeLowerRhs,
const double *changeUpperRhs);
103 const double *changeObjective);
137 const double *changeLower,
const double *changeUpper,
141 ClpDataSave &data,
bool canSkipFactorization =
false);
143 ClpDataSave &data,
bool canSkipFactorization =
false);
164 const double *changeObjective);
170 const double *changeObjective);
175 const double *changeUpper);
187 double &costIncrease,
int &sequenceIncrease,
double &alphaIncrease,
188 double &costDecrease,
int &sequenceDecrease,
double &alphaDecrease);
214 bool writeValues =
false,
215 int formatType = 0)
const;
228 bool checkAccuracy =
false);
237 int &nBound,
bool moreBounds =
false,
bool tightenBounds =
false);
242 const int *whichRows,
const int *whichColumns,
252 const int *whichColumns);
255 const int *whichColumns)
const;
272 double *buildObj, CoinBigIndex *buildStart,
273 int *buildRow,
double *buildElement,
int reConstruct = -1)
const;
This is a tiny class where data can be saved round calls.
This is for Simplex stuff which is neither dual nor primal.
void dualRanging(int numberCheck, const int *which, double *costIncrease, int *sequenceIncrease, double *costDecrease, int *sequenceDecrease, double *valueIncrease=NULL, double *valueDecrease=NULL)
Dual ranging.
void redoInternalArrays()
Redo lower_ from rowLower_ etc.
int setInDual(ClpSimplex *dualProblem)
Sets solution in dualized problem non-zero return code indicates minor problems.
char * guess(int mode) const
Create a string of commands to guess at best strategy for model At present mode is ignored.
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...
void originalBound(int iSequence, double theta, const double *changeLower, const double *changeUpper)
Restores bound to original bound.
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.
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 parametricsObj(double startingTheta, double &endingTheta, const double *changeObjective)
void setGubBasis(ClpSimplex &original, const int *whichRows, const int *whichColumns)
Sets basis from original.
void checkPrimalRatios(CoinIndexedVector *rowArray, int direction)
Row array has pivot column This is used in primal ranging.
void cleanupAfterPostsolve()
Quick try at cleaning up duals if postsolve gets wrong.
int parametrics(const char *dataFile)
Version of parametrics which reads from file See CbcClpParam.cpp for details of format Returns -2 if ...
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).
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...
ClpSimplex * crunch(double *rhs, int *whichRows, int *whichColumns, int &nBound, bool moreBounds=false, bool tightenBounds=false)
Does very cursory presolve.
void statusOfProblemInParametrics(int type, ClpDataSave &saveData)
Refactorizes if necessary Checks if finished.
int restoreFromDual(const ClpSimplex *dualProblem, bool checkAccuracy=false)
Restores solution from dualized problem non-zero return code indicates minor problems.
void statusOfProblemInParametricsObj(int type, ClpDataSave &saveData)
double computeRhsEtc(parametricsData ¶mData)
Compute new rowLower_ etc (return negative if infeasible - otherwise largest change)
int whileIteratingObj(parametricsData ¶mData)
int tightenIntegerBounds(double *rhsSpace)
Tightens integer bounds - returns number tightened or -1 if infeasible.
int nextThetaObj(double maxTheta, parametricsData ¶mData)
int parametrics(double startingTheta, double &endingTheta, const double *changeLowerBound, const double *changeUpperBound, const double *changeLowerRhs, const double *changeUpperRhs)
Parametrics This is an initial slow version.
int whileIterating(parametricsData ¶mData, double reportIncrement, const double *changeObjective)
This has the flow between re-factorizations.
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.
int parametricsLoop(parametricsData ¶mData, ClpDataSave &data, bool canSkipFactorization=false)
int parametricsObjLoop(parametricsData ¶mData, ClpDataSave &data, bool canSkipFactorization=false)
void primalRanging(int numberCheck, const int *which, double *valueIncrease, int *sequenceIncrease, double *valueDecrease, int *sequenceDecrease)
Primal ranging.
double primalRanging1(int whichIn, int whichOther)
Returns new value of whichOther when whichIn enters basis.
void getGubBasis(ClpSimplex &original, const int *whichRows, const int *whichColumns) const
Restores basis to original.
int readBasis(const char *filename)
Read a basis from the given filename.
double bestPivot(bool justColumns=false)
Finds best possible pivot.
void afterCrunch(const ClpSimplex &small, const int *whichRows, const int *whichColumns, int nBound)
After very cursory presolve.
int writeBasis(const char *filename, bool writeValues=false, int formatType=0) const
Write the basis in MPS format to the specified file.
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...
This solves LPs using the simplex method.
double theta() const
Theta (pivot change)
ClpDataSave saveData()
Save data.
CoinIndexedVector * rowArray(int index) const
Useful row length arrays (0,1,2,3,4,5)
CoinIndexedVector * columnArray(int index) const
Useful column length arrays (0,1,2,3,4,5)
int factorizationFrequency() const
Factorization frequency.
double * upperCoefficient
double * lowerCoefficient
int unscaledChangesOffset
double acceptableMaxTheta