Cgl  0.60.3
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
AbcDualRowPivot.hpp
Go to the documentation of this file.
1 /* $Id: AbcDualRowPivot.hpp 2385 2019-01-06 19:43:06Z unxusr $ */
2 // Copyright (C) 2002, International Business Machines
3 // Corporation and others, Copyright (C) 2012, FasterCoin. All Rights Reserved.
4 // This code is licensed under the terms of the Eclipse Public License (EPL).
5 
6 #ifndef AbcDualRowPivot_H
7 #define AbcDualRowPivot_H
8 #include "AbcCommon.hpp"
9 
10 class AbcSimplex;
11 class CoinIndexedVector;
12 
13 //#############################################################################
14 
24 
25 public:
27 
28 
30  virtual int pivotRow() = 0;
31 
34  virtual double updateWeights1(CoinIndexedVector &input, CoinIndexedVector &updateColumn) = 0;
35  virtual void updateWeightsOnly(CoinIndexedVector &input) = 0;
36  virtual double updateWeights(CoinIndexedVector &input, CoinIndexedVector &updateColumn) = 0;
38  virtual void updateWeights2(CoinIndexedVector &input, CoinIndexedVector &updateColumn) = 0;
39 
45  virtual void updatePrimalSolution(CoinIndexedVector &updateColumn,
46  double theta)
47  = 0;
48  virtual void updatePrimalSolutionAndWeights(CoinIndexedVector &weightsVector,
49  CoinIndexedVector &updateColumn,
50  double theta);
61  virtual void saveWeights(AbcSimplex *model, int mode);
63  virtual void recomputeInfeasibilities();
65  virtual void checkAccuracy();
67  virtual void clearArrays();
69  virtual bool looksOptimal() const
70  {
71  return false;
72  }
74 
76 
79 
82 
85 
87  virtual ~AbcDualRowPivot();
88 
90  virtual AbcDualRowPivot *clone(bool copyData = true) const = 0;
91 
93 
95 
96  inline AbcSimplex *model()
98  {
99  return model_;
100  }
101 
103  inline void setModel(AbcSimplex *newmodel)
104  {
105  model_ = newmodel;
106  }
107 
109  inline int type()
110  {
111  return type_;
112  }
113 
115 
116  //---------------------------------------------------------------------------
117 
118 protected:
120 
124  int type_;
126 };
127 #ifndef CLP_DUAL_COLUMN_MULTIPLIER
128 //#define CLP_DUAL_COLUMN_MULTIPLIER 0.99999
129 #endif
130 #endif
131 
132 /* vi: softtabstop=2 shiftwidth=2 expandtab tabstop=2
133 */
virtual void checkAccuracy()
checks accuracy and may re-initialize (may be empty)
virtual void updateWeightsOnly(CoinIndexedVector &input)=0
virtual double updateWeights(CoinIndexedVector &input, CoinIndexedVector &updateColumn)=0
virtual int pivotRow()=0
Returns pivot row, -1 if none.
virtual void updatePrimalSolutionAndWeights(CoinIndexedVector &weightsVector, CoinIndexedVector &updateColumn, double theta)
virtual double updateWeights1(CoinIndexedVector &input, CoinIndexedVector &updateColumn)=0
Does most of work for weights and returns pivot alpha.
Dual Row Pivot Abstract Base Class.
Indexed Vector.
AbcDualRowPivot & operator=(const AbcDualRowPivot &rhs)
Assignment operator.
void setModel(AbcSimplex *newmodel)
Sets model (normally to NULL)
int type()
Returns type (above 63 is extra information)
AbcDualRowPivot()
Default Constructor.
virtual void recomputeInfeasibilities()
Recompute infeasibilities.
AbcSimplex * model_
Pointer to model.
virtual void updatePrimalSolution(CoinIndexedVector &updateColumn, double theta)=0
Updates primal solution (and maybe list of candidates) Uses input vector which it deletes Would be fa...
virtual void updateWeights2(CoinIndexedVector &input, CoinIndexedVector &updateColumn)=0
Actually updates weights.
virtual bool looksOptimal() const
Returns true if would not find any row.
AbcSimplex * model()
Returns model.
int type_
Type of row pivot algorithm.
virtual void clearArrays()
Gets rid of all arrays (may be empty)
virtual void saveWeights(AbcSimplex *model, int mode)
Saves any weights round factorization as pivot rows may change Will be empty unless steepest edge (wi...
virtual ~AbcDualRowPivot()
Destructor.
virtual AbcDualRowPivot * clone(bool copyData=true) const =0
Clone.