AbcSimplexDual.hpp

Go to the documentation of this file.
00001 /* $Id: AbcSimplexDual.hpp 1910 2013-01-27 02:00:13Z stefan $ */
00002 // Copyright (C) 2002, International Business Machines
00003 // Corporation and others, Copyright (C) 2012, FasterCoin.  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 AbcSimplexDual_H
00012 #define AbcSimplexDual_H
00013 
00014 #include "AbcSimplex.hpp"
00015 #if 0
00016 #undef ABC_PARALLEL
00017 #define ABC_PARALLEL 2
00018 #undef cilk_for 
00019 #undef cilk_spawn
00020 #undef cilk_sync
00021 #include <cilk/cilk.h>
00022 #endif
00023 typedef struct {
00024   double theta;
00025   double totalThru;
00026   double useThru;
00027   double bestEverPivot;
00028   double increaseInObjective;
00029   double tentativeTheta;
00030   double lastPivotValue;
00031   double thisPivotValue;
00032   double thruThis;
00033   double increaseInThis;
00034   int lastSequence;
00035   int sequence;
00036   int block;
00037   int numberSwapped;
00038   int numberRemaining;
00039   int numberLastSwapped;
00040   bool modifyCosts;
00041 } dualColumnResult;
00049 class AbcSimplexDual : public AbcSimplex {
00050   
00051 public:
00052   
00144   int dual();
00153   int strongBranching(int numberVariables, const int * variables,
00154                       double * newLower, double * newUpper,
00155                       double ** outputSolution,
00156                       int * outputStatus, int * outputIterations,
00157                       bool stopOnFirstInfeasible = true,
00158                       bool alwaysFinish = false,
00159                       int startFinishOptions = 0);
00161   AbcSimplexFactorization * setupForStrongBranching(char * arrays, int numberRows,
00162                                                     int numberColumns, bool solveLp = false);
00164   void cleanupAfterStrongBranching(AbcSimplexFactorization * factorization);
00166   
00182   int whileIteratingSerial();
00183 #if ABC_PARALLEL==1
00184   int whileIteratingThread();
00185 #endif
00186 #if ABC_PARALLEL==2
00187   int whileIteratingCilk();
00188 #endif
00189   void whileIterating2();
00190   int whileIteratingParallel(int numberIterations);
00191   int whileIterating3();
00192   void updatePrimalSolution();
00193   int noPivotRow();
00194   int noPivotColumn();
00195   void dualPivotColumn();
00197   void createDualPricingVectorSerial();
00198   int getTableauColumnFlipAndStartReplaceSerial();
00199   void getTableauColumnPart1Serial();
00200 #if ABC_PARALLEL==1
00202   void createDualPricingVectorThread();
00203   int getTableauColumnFlipAndStartReplaceThread();
00204   void getTableauColumnPart1Thread();
00205 #endif
00206 #if ABC_PARALLEL==2
00208   void createDualPricingVectorCilk();
00209   int getTableauColumnFlipAndStartReplaceCilk();
00210   void getTableauColumnPart1Cilk();
00211 #endif
00212   void getTableauColumnPart2();
00213   int checkReplace();
00214   void replaceColumnPart3();
00215   void checkReplacePart1();
00216   void checkReplacePart1a();
00217   void checkReplacePart1b();
00219   void updateDualsInDual();
00223   //void updateDualsInValuesPass(CoinIndexedVector * array,
00224   //                           double theta);
00229   int flipBounds();
00232   void flipBack(int number);
00239   void dualColumn1(bool doAll=false);
00245   double dualColumn1A();
00247   double dualColumn1B();
00253   void dualColumn2();
00254   void dualColumn2Most(dualColumnResult & result);
00255   void dualColumn2First(dualColumnResult & result);
00261   void dualColumn2(dualColumnResult & result);
00266   void checkPossibleCleanup(CoinIndexedVector * array);
00273   void dualPivotRow();
00281   int changeBounds(int initialize, double & changeCost);
00284   bool changeBound( int iSequence);
00286   void originalBound(int iSequence);
00289   int checkUnbounded(CoinIndexedVector & ray,  double changeCost);
00299   void statusOfProblemInDual(int type);
00305 
00306 
00307   int whatNext();
00309   bool checkCutoff(bool computeObjective);
00311   int bounceTolerances(int type);
00313   void perturb(double factor);
00315   void perturbB(double factor,int type);
00317   int makeNonFreeVariablesDualFeasible(bool changeCosts=false);
00318   int fastDual(bool alwaysFinish = false);
00321   int numberAtFakeBound();
00322   
00327   int pivotResultPart1();
00329   int nextSuperBasic();
00331   void startupSolve();
00333   void finishSolve();
00334   void gutsOfDual();
00335   //int dual2(int ifValuesPass,int startFinishOptions=0);
00336   int resetFakeBounds(int type);
00337   
00339 };
00340 #if ABC_PARALLEL==1
00341 void * abc_parallelManager(void * simplex);
00342 #endif
00343 #endif
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines

Generated on 31 Mar 2015 for Cgl by  doxygen 1.6.1