/build/buildd/clp-1.12.0/Clp/src/ClpSimplexDual.hpp
Go to the documentation of this file.
00001 /* $Id: ClpSimplexDual.hpp 1525 2010-02-26 17:27:59Z mjs $ */
00002 // Copyright (C) 2002, International Business Machines
00003 // Corporation and others.  All Rights Reserved.
00004 
00005 /*
00006    Authors
00007 
00008    John Forrest
00009 
00010  */
00011 #ifndef ClpSimplexDual_H
00012 #define ClpSimplexDual_H
00013 
00014 #include "ClpSimplex.hpp"
00015 
00023 class ClpSimplexDual : public ClpSimplex {
00024 
00025 public:
00026 
00118      int dual(int ifValuesPass, int startFinishOptions = 0);
00127      int strongBranching(int numberVariables, const int * variables,
00128                          double * newLower, double * newUpper,
00129                          double ** outputSolution,
00130                          int * outputStatus, int * outputIterations,
00131                          bool stopOnFirstInfeasible = true,
00132                          bool alwaysFinish = false,
00133                          int startFinishOptions = 0);
00135      ClpFactorization * setupForStrongBranching(char * arrays, int numberRows,
00136                int numberColumns, bool solveLp = false);
00138      void cleanupAfterStrongBranching(ClpFactorization * factorization);
00140 
00156      int whileIterating(double * & givenPi, int ifValuesPass);
00164      int updateDualsInDual(CoinIndexedVector * rowArray,
00165                            CoinIndexedVector * columnArray,
00166                            CoinIndexedVector * outputArray,
00167                            double theta,
00168                            double & objectiveChange,
00169                            bool fullRecompute);
00173      void updateDualsInValuesPass(CoinIndexedVector * rowArray,
00174                                   CoinIndexedVector * columnArray,
00175                                   double theta);
00179      void flipBounds(CoinIndexedVector * rowArray,
00180                      CoinIndexedVector * columnArray);
00192      double dualColumn(CoinIndexedVector * rowArray,
00193                        CoinIndexedVector * columnArray,
00194                        CoinIndexedVector * spareArray,
00195                        CoinIndexedVector * spareArray2,
00196                        double accpetablePivot,
00197                        CoinBigIndex * dubiousWeights);
00199      int dualColumn0(const CoinIndexedVector * rowArray,
00200                      const CoinIndexedVector * columnArray,
00201                      CoinIndexedVector * spareArray,
00202                      double acceptablePivot,
00203                      double & upperReturn, double &bestReturn, double & badFree);
00210      void checkPossibleValuesMove(CoinIndexedVector * rowArray,
00211                                   CoinIndexedVector * columnArray,
00212                                   double acceptablePivot);
00219      void checkPossibleCleanup(CoinIndexedVector * rowArray,
00220                                CoinIndexedVector * columnArray,
00221                                double acceptablePivot);
00226      void doEasyOnesInValuesPass(double * givenReducedCosts);
00236      void dualRow(int alreadyChosen);
00246      int changeBounds(int initialize, CoinIndexedVector * outputArray,
00247                       double & changeCost);
00250      bool changeBound( int iSequence);
00252      void originalBound(int iSequence);
00255      int checkUnbounded(CoinIndexedVector * ray, CoinIndexedVector * spare,
00256                         double changeCost);
00266      void statusOfProblemInDual(int & lastCleaned, int type,
00267                                 double * givenDjs, ClpDataSave & saveData,
00268                                 int ifValuesPass);
00271      int perturb();
00277      int fastDual(bool alwaysFinish = false);
00280      int numberAtFakeBound();
00281 
00287      int pivotResult();
00289      int nextSuperBasic();
00292      int startupSolve(int ifValuesPass, double * saveDuals, int startFinishOptions);
00293      void finishSolve(int startFinishOptions);
00294      void gutsOfDual(int ifValuesPass, double * & saveDuals, int initialStatus,
00295                      ClpDataSave & saveData);
00296      //int dual2(int ifValuesPass,int startFinishOptions=0);
00297      void resetFakeBounds(int type);
00298 
00300 };
00301 #endif