Clp trunk
|
00001 /* $Id$ */ 00002 // Copyright (C) 2003, 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 ClpPredictorCorrector_H 00012 #define ClpPredictorCorrector_H 00013 00014 #include "ClpInterior.hpp" 00015 00037 class ClpPredictorCorrector : public ClpInterior { 00038 00039 public: 00040 00050 int solve(); 00052 00055 00056 //phase - 0 predictor 00057 // 1 corrector 00058 // 2 primal dual 00059 CoinWorkDouble findStepLength( int phase); 00061 CoinWorkDouble findDirectionVector(const int phase); 00063 int createSolution(); 00065 //phase 0=as is , 1 = after predictor , 2 after corrector 00066 CoinWorkDouble complementarityGap(int & numberComplementarityPairs, int & numberComplementarityItems, 00067 const int phase); 00069 //phase 0=affine , 1 = corrector , 2 = primal-dual 00070 void setupForSolve(const int phase); 00072 void solveSystem(CoinWorkDouble * region1, CoinWorkDouble * region2, 00073 const CoinWorkDouble * region1In, const CoinWorkDouble * region2In, 00074 const CoinWorkDouble * saveRegion1, const CoinWorkDouble * saveRegion2, 00075 bool gentleRefine); 00077 bool checkGoodMove(const bool doCorrector, CoinWorkDouble & bestNextGap, 00078 bool allowIncreasingGap); 00080 bool checkGoodMove2(CoinWorkDouble move, CoinWorkDouble & bestNextGap, 00081 bool allowIncreasingGap); 00083 //returns number fixed 00084 int updateSolution(CoinWorkDouble nextGap); 00086 CoinWorkDouble affineProduct(); 00088 void debugMove(int phase, CoinWorkDouble primalStep, CoinWorkDouble dualStep); 00090 00091 }; 00092 #endif