00001
00002
00003
00004
00005
00006
00007
00008
00009
00010 #ifndef ClpSimplexDual_H
00011 #define ClpSimplexDual_H
00012
00013 #include "ClpSimplex.hpp"
00014
00022 class ClpSimplexDual : public ClpSimplex {
00023
00024 public:
00025
00116 int dual(int ifValuesPass);
00125 int strongBranching(int numberVariables,const int * variables,
00126 double * newLower, double * newUpper,
00127 double ** outputSolution,
00128 int * outputStatus, int * outputIterations,
00129 bool stopOnFirstInfeasible=true,
00130 bool alwaysFinish=false);
00132
00148 int whileIterating(double * & givenPi);
00156 int updateDualsInDual(CoinIndexedVector * rowArray,
00157 CoinIndexedVector * columnArray,
00158 CoinIndexedVector * outputArray,
00159 double theta,
00160 double & objectiveChange,
00161 bool fullRecompute);
00165 void updateDualsInValuesPass(CoinIndexedVector * rowArray,
00166 CoinIndexedVector * columnArray,
00167 double theta);
00172 void flipBounds(CoinIndexedVector * rowArray,
00173 CoinIndexedVector * columnArray,
00174 double change);
00186 void dualColumn(CoinIndexedVector * rowArray,
00187 CoinIndexedVector * columnArray,
00188 CoinIndexedVector * spareArray,
00189 CoinIndexedVector * spareArray2,
00190 double accpetablePivot,
00191 CoinBigIndex * dubiousWeights);
00199 int checkPossibleValuesMove(CoinIndexedVector * rowArray,
00200 CoinIndexedVector * columnArray,
00201 double acceptablePivot,
00202 CoinBigIndex * dubiousWeights);
00207 void doEasyOnesInValuesPass(double * givenReducedCosts);
00217 void dualRow(int alreadyChosen);
00226 int changeBounds(bool initialize,CoinIndexedVector * outputArray,
00227 double & changeCost);
00230 bool changeBound( int iSequence);
00232 void originalBound(int iSequence);
00235 int checkUnbounded(CoinIndexedVector * ray,CoinIndexedVector * spare,
00236 double changeCost);
00246 void statusOfProblemInDual(int & lastCleaned, int type,
00247 ClpSimplexProgress * progress,
00248 double * givenDjs);
00250 void perturb();
00256 int fastDual(bool alwaysFinish=false);
00259 int numberAtFakeBound();
00260
00266 int pivotResult();
00268 int nextSuperBasic();
00269
00271 };
00272 #endif