Cgl 0.59.7

- Main Page
- Related Pages
- Modules
- Namespaces
- Classes
- Files

- File List
- File Members

All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
ClpSimplexDual.hpp
Go to the documentation of this file.
1 /* $Id: ClpSimplexDual.hpp 1761 2011-07-06 16:06:24Z forrest $ */
2 // Copyright (C) 2002, International Business Machines
3 // Corporation and others. All Rights Reserved.
4 // This code is licensed under the terms of the Eclipse Public License (EPL).
5 /*
6 Authors
7
8 John Forrest
9
10 */
11 #ifndef ClpSimplexDual_H
12 #define ClpSimplexDual_H
13
14 #include "ClpSimplex.hpp"
15
23 class ClpSimplexDual : public ClpSimplex {
24
25 public:
26
118 int dual(int ifValuesPass, int startFinishOptions = 0);
127 int strongBranching(int numberVariables, const int * variables,
128 double * newLower, double * newUpper,
129 double ** outputSolution,
130 int * outputStatus, int * outputIterations,
131 bool stopOnFirstInfeasible = true,
132 bool alwaysFinish = false,
133 int startFinishOptions = 0);
135 ClpFactorization * setupForStrongBranching(char * arrays, int numberRows,
136 int numberColumns, bool solveLp = false);
138 void cleanupAfterStrongBranching(ClpFactorization * factorization);
140
156 int whileIterating(double * & givenPi, int ifValuesPass);
164 int updateDualsInDual(CoinIndexedVector * rowArray,
165 CoinIndexedVector * columnArray,
166 CoinIndexedVector * outputArray,
167 double theta,
168 double & objectiveChange,
169 bool fullRecompute);
173 void updateDualsInValuesPass(CoinIndexedVector * rowArray,
174 CoinIndexedVector * columnArray,
175 double theta);
179 void flipBounds(CoinIndexedVector * rowArray,
180 CoinIndexedVector * columnArray);
192 double dualColumn(CoinIndexedVector * rowArray,
193 CoinIndexedVector * columnArray,
194 CoinIndexedVector * spareArray,
195 CoinIndexedVector * spareArray2,
196 double accpetablePivot,
197 CoinBigIndex * dubiousWeights);
199 int dualColumn0(const CoinIndexedVector * rowArray,
200 const CoinIndexedVector * columnArray,
201 CoinIndexedVector * spareArray,
202 double acceptablePivot,
203 double & upperReturn, double &bestReturn, double & badFree);
210 void checkPossibleValuesMove(CoinIndexedVector * rowArray,
211 CoinIndexedVector * columnArray,
212 double acceptablePivot);
219 void checkPossibleCleanup(CoinIndexedVector * rowArray,
220 CoinIndexedVector * columnArray,
221 double acceptablePivot);
226 void doEasyOnesInValuesPass(double * givenReducedCosts);
236 void dualRow(int alreadyChosen);
246 int changeBounds(int initialize, CoinIndexedVector * outputArray,
247 double & changeCost);
250 bool changeBound( int iSequence);
252 void originalBound(int iSequence);
255 int checkUnbounded(CoinIndexedVector * ray, CoinIndexedVector * spare,
256 double changeCost);
266 void statusOfProblemInDual(int & lastCleaned, int type,
267 double * givenDjs, ClpDataSave & saveData,
268 int ifValuesPass);
271 int perturb();
277 int fastDual(bool alwaysFinish = false);
280 int numberAtFakeBound();
281
286 int pivotResultPart1();
288 int nextSuperBasic();
291 int startupSolve(int ifValuesPass, double * saveDuals, int startFinishOptions);
292 void finishSolve(int startFinishOptions);
293 void gutsOfDual(int ifValuesPass, double * & saveDuals, int initialStatus,
294 ClpDataSave & saveData);
295 //int dual2(int ifValuesPass,int startFinishOptions=0);
296 void resetFakeBounds(int type);
297
299 };
300 #endif
ClpModel::ray
double * ray() const
For advanced users - no need to delete - sign not changed.
Definition: ClpModel.hpp:772
ClpSimplexDual::numberAtFakeBound
int numberAtFakeBound()
Checks number of variables at fake bounds.
ClpSimplexDual::checkUnbounded
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...
ClpSimplexDual::fastDual
int fastDual(bool alwaysFinish=false)
Fast iterations.
ClpSimplex.hpp
ClpSimplexDual::startupSolve
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...
ClpSimplexDual::setupForStrongBranching
ClpFactorization * setupForStrongBranching(char *arrays, int numberRows, int numberColumns, bool solveLp=false)
This does first part of StrongBranching.
ClpSimplexDual::changeBound
bool changeBound(int iSequence)
As changeBounds but just changes new bounds for a single variable.
ClpSimplex::theta
double theta() const
Theta (pivot change)
Definition: ClpSimplex.hpp:1182
ClpSimplexDual::changeBounds
int changeBounds(int initialize, CoinIndexedVector *outputArray, double &changeCost)
Checks if any fake bounds active - if so returns number and modifies updatedDualBound_ and everything...
ClpSimplexDual::gutsOfDual
void gutsOfDual(int ifValuesPass, double *&saveDuals, int initialStatus, ClpDataSave &saveData)
ClpSimplexDual::statusOfProblemInDual
void statusOfProblemInDual(int &lastCleaned, int type, double *givenDjs, ClpDataSave &saveData, int ifValuesPass)
Refactorizes if necessary Checks if finished.
ClpSimplexDual::cleanupAfterStrongBranching
void cleanupAfterStrongBranching(ClpFactorization *factorization)
This cleans up after strong branching.
ClpFactorization
This just implements CoinFactorization when an ClpMatrixBase object is passed.
Definition: ClpFactorization.hpp:35
ClpSimplexDual::checkPossibleCleanup
void checkPossibleCleanup(CoinIndexedVector *rowArray, CoinIndexedVector *columnArray, double acceptablePivot)
Row array has row part of pivot row Column array has column part.
ClpSimplexDual::pivotResultPart1
int pivotResultPart1()
Pivot in a variable and choose an outgoing one.
ClpModel::numberColumns
int numberColumns() const
Definition: ClpModel.hpp:325
ClpSimplexDual::dualRow
void dualRow(int alreadyChosen)
Chooses dual pivot row Would be faster with separate region to scan and will have this (with square o...
ClpSimplexDual::strongBranching
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.
ClpSimplexDual::dualColumn
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.
ClpSimplexDual::perturb
int perturb()
Perturbs problem (method depends on perturbation()) returns nonzero if should go to dual...
ClpSimplexDual::dual
int dual(int ifValuesPass, int startFinishOptions=0)
Dual algorithm.
ClpSimplex
This solves LPs using the simplex method.
Definition: ClpSimplex.hpp:70
ClpSimplexDual::updateDualsInDual
int updateDualsInDual(CoinIndexedVector *rowArray, CoinIndexedVector *columnArray, CoinIndexedVector *outputArray, double theta, double &objectiveChange, bool fullRecompute)
The duals are updated by the given arrays.
CoinIndexedVector
Indexed Vector.
Definition: CoinIndexedVector.hpp:104
ClpSimplexDual::checkPossibleValuesMove
void checkPossibleValuesMove(CoinIndexedVector *rowArray, CoinIndexedVector *columnArray, double acceptablePivot)
Row array has row part of pivot row Column array has column part.
ClpSimplexDual::doEasyOnesInValuesPass
void doEasyOnesInValuesPass(double *givenReducedCosts)
This sees if we can move duals in dual values pass.
ClpSimplexDual::finishSolve
void finishSolve(int startFinishOptions)
ClpSimplexDual::flipBounds
void flipBounds(CoinIndexedVector *rowArray, CoinIndexedVector *columnArray)
While updateDualsInDual sees what effect is of flip this does actual flipping.
ClpDataSave
This is a tiny class where data can be saved round calls.
Definition: ClpModel.hpp:1269
ClpSimplex::columnArray
CoinIndexedVector * columnArray(int index) const
Useful column length arrays (0,1,2,3,4,5)
Definition: ClpSimplex.hpp:731
ClpSimplexDual::originalBound
void originalBound(int iSequence)
Restores bound to original bound.
ClpSimplexDual::resetFakeBounds
void resetFakeBounds(int type)
ClpModel::numberRows
int numberRows() const
Number of rows.
Definition: ClpModel.hpp:315
CoinBigIndex
int CoinBigIndex
Definition: Coin_C_defines.h:105
ClpSimplexDual::updateDualsInValuesPass
void updateDualsInValuesPass(CoinIndexedVector *rowArray, CoinIndexedVector *columnArray, double theta)
The duals are updated by the given arrays.
ClpSimplex::factorization
ClpFactorization * factorization() const
factorization
Definition: ClpSimplex.hpp:607
ClpSimplexDual::nextSuperBasic
int nextSuperBasic()
Get next free , -1 if none.
ClpSimplex::rowArray
CoinIndexedVector * rowArray(int index) const
Useful row length arrays (0,1,2,3,4,5)
Definition: ClpSimplex.hpp:727
ClpSimplex::saveData
ClpDataSave saveData()
Save data.
ClpSimplexDual
This solves LPs using the dual simplex method.
Definition: ClpSimplexDual.hpp:23
ClpSimplexDual::dualColumn0
int dualColumn0(const CoinIndexedVector *rowArray, const CoinIndexedVector *columnArray, CoinIndexedVector *spareArray, double acceptablePivot, double &upperReturn, double &bestReturn, double &badFree)
Does first bit of dualColumn.
ClpSimplexDual::whileIterating
int whileIterating(double *&givenPi, int ifValuesPass)
This has the flow between re-factorizations Broken out for clarity and will be used by strong branchi...