# ClpSimplexDual.hpp

Go to the documentation of this file.

    00001 /* $Id: ClpSimplexDual.hpp 1761 2011-07-06 16:06:24Z forrest $ */
    00002 // Copyright (C) 2002, International Business Machines
    00003 // Corporation and others.  All Rights Reserved.
    00004 // This code is licensed under the terms of the Eclipse Public License (EPL).
    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
    00286      int pivotResultPart1();
    00288      int nextSuperBasic();
    00291      int startupSolve(int ifValuesPass, double * saveDuals, int startFinishOptions);
    00292      void finishSolve(int startFinishOptions);
    00293      void gutsOfDual(int ifValuesPass, double * & saveDuals, int initialStatus,
    00294                      ClpDataSave & saveData);
    00295      //int dual2(int ifValuesPass,int startFinishOptions=0);
    00296      void resetFakeBounds(int type);
    00297
    00299 };
    00300 #endif

All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines