00001 /* $Id: AbcDualRowPivot.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 #ifndef AbcDualRowPivot_H 00007 #define AbcDualRowPivot_H 00008 #include "AbcCommon.hpp" 00009 00010 class AbcSimplex; 00011 class CoinIndexedVector; 00012 00013 //############################################################################# 00014 00023 class AbcDualRowPivot { 00024 00025 public: 00026 00028 00029 00031 virtual int pivotRow() = 0; 00032 00035 virtual double updateWeights1(CoinIndexedVector & input,CoinIndexedVector & updateColumn) = 0; 00036 virtual void updateWeightsOnly(CoinIndexedVector & input) = 0; 00037 virtual double updateWeights(CoinIndexedVector & input,CoinIndexedVector & updateColumn) = 0; 00039 virtual void updateWeights2(CoinIndexedVector & input,CoinIndexedVector & updateColumn) = 0; 00040 00046 virtual void updatePrimalSolution(CoinIndexedVector & updateColumn, 00047 double theta) = 0; 00048 virtual void updatePrimalSolutionAndWeights(CoinIndexedVector & weightsVector, 00049 CoinIndexedVector & updateColumn, 00050 double theta); 00061 virtual void saveWeights(AbcSimplex * model, int mode); 00063 virtual void recomputeInfeasibilities(); 00065 virtual void checkAccuracy(); 00067 virtual void clearArrays(); 00069 virtual bool looksOptimal() const { 00070 return false; 00071 } 00073 00074 00076 00077 00078 AbcDualRowPivot(); 00079 00081 AbcDualRowPivot(const AbcDualRowPivot &); 00082 00084 AbcDualRowPivot & operator=(const AbcDualRowPivot& rhs); 00085 00087 virtual ~AbcDualRowPivot (); 00088 00090 virtual AbcDualRowPivot * clone(bool copyData = true) const = 0; 00091 00093 00095 00096 00097 inline AbcSimplex * model() { 00098 return model_; 00099 } 00100 00102 inline void setModel(AbcSimplex * newmodel) { 00103 model_ = newmodel; 00104 } 00105 00107 inline int type() { 00108 return type_; 00109 } 00110 00112 00113 //--------------------------------------------------------------------------- 00114 00115 protected: 00117 00118 00119 AbcSimplex * model_; 00121 int type_; 00123 }; 00124 #ifndef CLP_DUAL_COLUMN_MULTIPLIER 00125 //#define CLP_DUAL_COLUMN_MULTIPLIER 0.99999 00126 #endif 00127 #endif