Go to the documentation of this file.
11 #ifndef ClpSimplexDual_H
12 #define ClpSimplexDual_H
117 int dual(
int ifValuesPass,
int startFinishOptions = 0);
127 double *newLower,
double *newUpper,
128 double **outputSolution,
129 int *outputStatus,
int *outputIterations,
130 bool stopOnFirstInfeasible =
true,
131 bool alwaysFinish =
false,
132 int startFinishOptions = 0);
165 CoinIndexedVector *outputArray,
167 double &objectiveChange,
193 CoinIndexedVector *spareArray,
194 CoinIndexedVector *spareArray2,
195 double accpetablePivot,
196 CoinBigIndex *dubiousWeights);
200 CoinIndexedVector *spareArray,
201 double acceptablePivot,
202 double &upperReturn,
double &badFree);
211 double acceptablePivot);
220 double acceptablePivot);
235 void dualRow(
int alreadyChosen);
245 int changeBounds(
int initialize, CoinIndexedVector *outputArray,
278 int fastDual(
bool alwaysFinish =
false);
292 int startupSolve(
int ifValuesPass,
double *saveDuals,
int startFinishOptions);
294 void gutsOfDual(
int ifValuesPass,
double *&saveDuals,
int initialStatus,
This solves LPs using the simplex method.
This just implements CoinFactorization when an ClpMatrixBase object is passed.
double theta() const
Theta (pivot change)
int changeBounds(int initialize, CoinIndexedVector *outputArray, double &changeCost)
Checks if any fake bounds active - if so returns number and modifies updatedDualBound_ and everything...
int strongBranching(int numberVariables, const int *variables, double *newLower, double *newUpper, double **outputSolution, int *outputStatus, int *outputIterations, bool stopOnFirstInfeasible=true, bool alwaysFinish=false, int startFinishOptions=0)
For strong branching.
This solves LPs using the dual simplex method.
void gutsOfDual(int ifValuesPass, double *&saveDuals, int initialStatus, ClpDataSave &saveData)
int checkFakeBounds() const
Just checks if any fake bounds active - if so returns number.
CoinIndexedVector * rowArray(int index) const
Useful row length arrays (0,1,2,3,4,5)
int updateDualsInDual(CoinIndexedVector *rowArray, CoinIndexedVector *columnArray, CoinIndexedVector *outputArray, double theta, double &objectiveChange, bool fullRecompute)
The duals are updated by the given arrays.
void updateDualsInValuesPass(CoinIndexedVector *rowArray, CoinIndexedVector *columnArray, double theta)
The duals are updated by the given arrays.
void dualRow(int alreadyChosen)
Chooses dual pivot row Would be faster with separate region to scan and will have this (with square o...
CoinIndexedVector * columnArray(int index) const
Useful column length arrays (0,1,2,3,4,5)
void doEasyOnesInValuesPass(double *givenReducedCosts)
This sees if we can move duals in dual values pass.
This is a tiny class where data can be saved round calls.
void originalBound(int iSequence)
Restores bound to original bound.
int whileIterating(double *&givenPi, int ifValuesPass)
This has the flow between re-factorizations Broken out for clarity and will be used by strong branchi...
double * ray() const
For advanced users - no need to delete - sign not changed.
bool changeBound(int iSequence)
As changeBounds but just changes new bounds for a single variable.
int numberAtFakeBound()
Checks number of variables at fake bounds.
int checkUnbounded(CoinIndexedVector *ray, CoinIndexedVector *spare, double changeCost)
Checks if tentative optimal actually means unbounded in dual Returns -3 if not, 2 if is unbounded.
int fastDual(bool alwaysFinish=false)
Fast iterations.
int startupSolve(int ifValuesPass, double *saveDuals, int startFinishOptions)
Startup part of dual (may be extended to other algorithms) returns 0 if good, 1 if bad.
ClpFactorization * setupForStrongBranching(char *arrays, int numberRows, int numberColumns, bool solveLp=false)
This does first part of StrongBranching.
void flipBounds(CoinIndexedVector *rowArray, CoinIndexedVector *columnArray)
While updateDualsInDual sees what effect is of flip this does actual flipping.
ClpFactorization * factorization() const
factorization
int pivotResultPart1()
Pivot in a variable and choose an outgoing one.
void cleanupAfterStrongBranching(ClpFactorization *factorization)
This cleans up after strong branching.
double dualColumn(CoinIndexedVector *rowArray, CoinIndexedVector *columnArray, CoinIndexedVector *spareArray, CoinIndexedVector *spareArray2, double accpetablePivot, CoinBigIndex *dubiousWeights)
Row array has row part of pivot row Column array has column part.
int nextSuperBasic()
Get next free , -1 if none.
ClpDataSave saveData()
Save data.
int perturb()
Perturbs problem (method depends on perturbation()) returns nonzero if should go to dual.
int dual(int ifValuesPass, int startFinishOptions=0)
Dual algorithm.
void checkPossibleValuesMove(CoinIndexedVector *rowArray, CoinIndexedVector *columnArray, double acceptablePivot)
Row array has row part of pivot row Column array has column part.
int numberColumns() const
void finishSolve(int startFinishOptions)
void statusOfProblemInDual(int &lastCleaned, int type, double *givenDjs, ClpDataSave &saveData, int ifValuesPass)
Refactorizes if necessary Checks if finished.
void checkPossibleCleanup(CoinIndexedVector *rowArray, CoinIndexedVector *columnArray, double acceptablePivot)
Row array has row part of pivot row Column array has column part.
void resetFakeBounds(int type)
int numberRows() const
Number of rows.
int dualColumn0(const CoinIndexedVector *rowArray, const CoinIndexedVector *columnArray, CoinIndexedVector *spareArray, double acceptablePivot, double &upperReturn, double &badFree)
Does first bit of dualColumn.