00001
00002
00003 #ifndef ClpDualRowSteepest_H
00004 #define ClpDualRowSteepest_H
00005
00006 #include "ClpDualRowPivot.hpp"
00007
00008
00009
00016 class CoinIndexedVector;
00017
00018 class ClpDualRowSteepest : public ClpDualRowPivot {
00019
00020 public:
00021
00023
00024
00026 virtual int pivotRow();
00027
00029 virtual double updateWeights(CoinIndexedVector * input,
00030 CoinIndexedVector * spare,
00031 CoinIndexedVector * updatedColumn);
00032
00037 virtual void updatePrimalSolution(CoinIndexedVector * input,
00038 double theta,
00039 double & changeInObjective);
00040
00051 virtual void saveWeights(ClpSimplex * model, int mode);
00053 virtual void unrollWeights();
00055 virtual void clearArrays();
00057 virtual bool looksOptimal() const;
00059
00060
00062
00063
00070 ClpDualRowSteepest(int mode=3);
00071
00073 ClpDualRowSteepest(const ClpDualRowSteepest &);
00074
00076 ClpDualRowSteepest & operator=(const ClpDualRowSteepest& rhs);
00077
00079 virtual ~ClpDualRowSteepest ();
00080
00082 virtual ClpDualRowPivot * clone(bool copyData = true) const;
00083
00085
00087
00088 inline int mode() const
00089 { return mode_;};
00091
00092
00093
00094 private:
00096
00101 int state_;
00104 int mode_;
00106 double * weights_;
00108 CoinIndexedVector * infeasible_;
00110 CoinIndexedVector * alternateWeights_;
00112 CoinIndexedVector * savedWeights_;
00114 int * dubiousWeights_;
00116 };
00117
00118 #endif