coin-Bcp
AbcDualRowSteepest.hpp
Go to the documentation of this file.
1 /* $Id: AbcDualRowSteepest.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 AbcDualRowSteepest_H
7 #define AbcDualRowSteepest_H
8 
9 #include "AbcDualRowPivot.hpp"
10 class CoinIndexedVector;
11 
12 //#############################################################################
13 
21 
22 public:
24 
25 
27  virtual int pivotRow();
28 
31  virtual double updateWeights(CoinIndexedVector &input, CoinIndexedVector &updatedColumn);
32  virtual double updateWeights1(CoinIndexedVector &input, CoinIndexedVector &updateColumn);
33  virtual void updateWeightsOnly(CoinIndexedVector &input);
35  virtual void updateWeights2(CoinIndexedVector &input, CoinIndexedVector &updateColumn);
36 
40  virtual void updatePrimalSolution(CoinIndexedVector &input,
41  double theta);
42 
43  virtual void updatePrimalSolutionAndWeights(CoinIndexedVector &weightsVector,
44  CoinIndexedVector &updateColumn,
45  double theta);
56  virtual void saveWeights(AbcSimplex *model, int mode);
58  virtual void recomputeInfeasibilities();
60  virtual void clearArrays();
62  virtual bool looksOptimal() const;
64 
67  enum Persistence {
68  normal = 0x00, // create (if necessary) and destroy
69  keep = 0x01 // create (if necessary) and leave
70  };
71 
73 
74 
81  AbcDualRowSteepest(int mode = 3);
82 
85 
88 
90  void fill(const AbcDualRowSteepest &rhs);
91 
93  virtual ~AbcDualRowSteepest();
94 
96  virtual AbcDualRowPivot *clone(bool copyData = true) const;
97 
99 
101  inline int mode() const
103  {
104  return mode_;
105  }
107  inline void setPersistence(Persistence life)
108  {
109  persistence_ = life;
110  }
111  inline Persistence persistence() const
112  {
113  return persistence_;
114  }
117  {
118  return infeasible_;
119  }
121  inline CoinIndexedVector *weights() const
122  {
123  return weights_;
124  }
126  inline AbcSimplex *model() const
127  {
128  return model_;
129  }
131 
132  //---------------------------------------------------------------------------
133 
134 private:
137  double norm_;
145  int state_;
148  int mode_;
158 };
159 
160 // For Devex stuff
161 #undef DEVEX_TRY_NORM
162 #define DEVEX_TRY_NORM 1.0e-8
163 #define DEVEX_ADD_ONE 1.0
164 #endif
165 
166 /* vi: softtabstop=2 shiftwidth=2 expandtab tabstop=2
167 */
virtual bool looksOptimal() const
Returns true if would not find any row.
AbcSimplex * model() const
Model.
virtual void updatePrimalSolutionAndWeights(CoinIndexedVector &weightsVector, CoinIndexedVector &updateColumn, double theta)
Returns pivot row, -1 if none.
double factorizationRatio_
Ratio of size of factorization to number of rows.
CoinIndexedVector * infeasible() const
Infeasible vector.
virtual double updateWeights1(CoinIndexedVector &input, CoinIndexedVector &updateColumn)
Returns pivot row, -1 if none.
virtual void updateWeightsOnly(CoinIndexedVector &input)
Returns pivot row, -1 if none.
virtual AbcDualRowPivot * clone(bool copyData=true) const
Clone.
virtual void saveWeights(AbcSimplex *model, int mode)
Saves any weights round factorization as pivot rows may change Save model May also recompute infeasib...
AbcSimplex * model_
Pointer to model.
void fill(const AbcDualRowSteepest &rhs)
Fill most values.
AbcDualRowSteepest & operator=(const AbcDualRowSteepest &rhs)
Assignment operator.
virtual void updateWeights2(CoinIndexedVector &input, CoinIndexedVector &updateColumn)
Actually updates weights.
int state_
Status 0) Normal -1) Needs initialization 1) Weights are stored by sequence number.
int mode() const
Mode.
virtual void updatePrimalSolution(CoinIndexedVector &input, double theta)
Updates primal solution (and maybe list of candidates) Uses input vector which it deletes...
virtual void recomputeInfeasibilities()
Recompute infeasibilities.
CoinIndexedVector * weights() const
Weights vector.
AbcDualRowSteepest(int mode=3)
Default Constructor 0 is uninitialized, 1 full, 2 is partial uninitialized, 3 starts as 2 but may swi...
virtual ~AbcDualRowSteepest()
Destructor.
CoinIndexedVector * savedWeights_
save weight array (so we can use checkpoint)
Indexed Vector.
Persistence persistence_
Life of weights.
double norm_
Ratio of size of factorization to number of rows.
virtual int pivotRow()
Returns pivot row, -1 if none.
CoinIndexedVector * weights_
weight array
int mode_
If 0 then we are using uninitialized weights, 1 then full, if 2 then uninitialized partial...
Persistence persistence() const
Mode.
Dual Row Pivot Abstract Base Class.
virtual void clearArrays()
Gets rid of all arrays.
virtual double updateWeights(CoinIndexedVector &input, CoinIndexedVector &updatedColumn)
Updates weights and returns pivot alpha.
CoinIndexedVector * infeasible_
square of infeasibility array (just for infeasible rows)
void setPersistence(Persistence life)
Set/ get persistence.
Persistence
enums for persistence
Dual Row Pivot Steepest Edge Algorithm Class.