Clp  1.17.6
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
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 */
Persistence persistence_
Life of weights.
virtual void updateWeights2(CoinIndexedVector &input, CoinIndexedVector &updateColumn)
Actually updates weights.
CoinIndexedVector * infeasible_
square of infeasibility array (just for infeasible rows)
virtual ~AbcDualRowSteepest()
Destructor.
AbcSimplex * model() const
Model.
virtual void updatePrimalSolutionAndWeights(CoinIndexedVector &weightsVector, CoinIndexedVector &updateColumn, double theta)
virtual void updatePrimalSolution(CoinIndexedVector &input, double theta)
Updates primal solution (and maybe list of candidates) Uses input vector which it deletes...
int mode() const
Mode.
Persistence
enums for persistence
virtual bool looksOptimal() const
Returns true if would not find any row.
Dual Row Pivot Steepest Edge Algorithm Class.
virtual int pivotRow()
Returns pivot row, -1 if none.
int state_
Status 0) Normal -1) Needs initialization 1) Weights are stored by sequence number.
AbcDualRowSteepest & operator=(const AbcDualRowSteepest &rhs)
Assignment operator.
virtual void recomputeInfeasibilities()
Recompute infeasibilities.
void setPersistence(Persistence life)
Set/ get persistence.
Dual Row Pivot Abstract Base Class.
Indexed Vector.
CoinIndexedVector * infeasible() const
Infeasible vector.
AbcSimplex * model_
Pointer to model.
virtual void clearArrays()
Gets rid of all arrays.
virtual AbcDualRowPivot * clone(bool copyData=true) const
Clone.
virtual double updateWeights(CoinIndexedVector &input, CoinIndexedVector &updatedColumn)
Updates weights and returns pivot alpha.
virtual void saveWeights(AbcSimplex *model, int mode)
Saves any weights round factorization as pivot rows may change Save model May also recompute infeasib...
CoinIndexedVector * savedWeights_
save weight array (so we can use checkpoint)
CoinIndexedVector * weights_
weight array
Persistence persistence() const
AbcDualRowSteepest(int mode=3)
Default Constructor 0 is uninitialized, 1 full, 2 is partial uninitialized, 3 starts as 2 but may swi...
int mode_
If 0 then we are using uninitialized weights, 1 then full, if 2 then uninitialized partial...
CoinIndexedVector * weights() const
Weights vector.
virtual void updateWeightsOnly(CoinIndexedVector &input)
virtual double updateWeights1(CoinIndexedVector &input, CoinIndexedVector &updateColumn)
Does most of work for weights and returns pivot alpha.
double factorizationRatio_
Ratio of size of factorization to number of rows.
void fill(const AbcDualRowSteepest &rhs)
Fill most values.