Clp 1.17.5
Loading...
Searching...
No Matches
AbcPrimalColumnSteepest.hpp
Go to the documentation of this file.
1/* $Id: AbcPrimalColumnSteepest.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 AbcPrimalColumnSteepest_H
7#define AbcPrimalColumnSteepest_H
8
10#include <bitset>
11
12//#############################################################################
13class CoinIndexedVector;
14
22
23public:
25
26
34 virtual int pivotColumn(CoinPartitionedVector *updates,
35 CoinPartitionedVector *spareRow2,
36 CoinPartitionedVector *spareColumn1);
38 void justDjs(CoinIndexedVector *updates,
39 CoinIndexedVector *spareColumn1);
41 int partialPricing(CoinIndexedVector *updates,
42 int numberWanted,
43 int numberLook);
45 void djsAndDevex(CoinIndexedVector *updates,
46 CoinIndexedVector *spareRow2,
47 CoinIndexedVector *spareColumn1);
49 void djsAndDevex2(CoinIndexedVector *updates,
50 CoinIndexedVector *spareColumn1);
52 void justDevex(CoinIndexedVector *updates,
53 CoinIndexedVector *spareColumn1);
61 int doSteepestWork(CoinPartitionedVector *updates,
62 CoinPartitionedVector *spareRow2,
63 CoinPartitionedVector *spareColumn1,
64 int type);
65
67 virtual void updateWeights(CoinIndexedVector *input);
68
70 void checkAccuracy(int sequence, double relativeTolerance,
71 CoinIndexedVector *rowArray1);
72
75
84 virtual void saveWeights(AbcSimplex *model, int mode);
86 virtual void unrollWeights();
88 virtual void clearArrays();
90 virtual bool looksOptimal() const;
92 virtual void maximumPivotsChanged();
94
98 inline int mode() const
99 {
100 return mode_;
101 }
103
107 normal = 0x00, // create (if necessary) and destroy
108 keep = 0x01 // create (if necessary) and leave
109 };
110
112
113
122
125
128
131
133 virtual AbcPrimalColumnPivot *clone(bool copyData = true) const;
134
136
138
141 inline bool reference(int i) const
142 {
143 return ((reference_[i >> 5] >> (i & 31)) & 1) != 0;
144 }
145 inline void setReference(int i, bool trueFalse)
146 {
147 unsigned int &value = reference_[i >> 5];
148 int bit = i & 31;
149 if (trueFalse)
150 value |= (1 << bit);
151 else
152 value &= ~(1 << bit);
153 }
155 inline void setPersistence(Persistence life)
156 {
157 persistence_ = life;
158 }
160 {
161 return persistence_;
162 }
163
165 //---------------------------------------------------------------------------
166
167private:
169 // Update weight
170 double devex_;
172 double *weights_;
174 CoinIndexedVector *infeasible_;
176 CoinIndexedVector *alternateWeights_;
179 // Array for exact devex to say what is in reference framework
180 unsigned int *reference_;
199 int mode_;
204 // This is pivot row (or pivot sequence round re-factorization)
206 // This is saved pivot sequence
208 // This is saved outgoing variable
210 // Iteration when last rectified
212 // Size of factorization at invert (used to decide algorithm)
215};
216
217#endif
218
219/* vi: softtabstop=2 shiftwidth=2 expandtab tabstop=2
220*/
Primal Column Pivot Abstract Base Class.
AbcSimplex * model()
Returns model.
int type()
Returns type (above 63 is extra information)
Primal Column Pivot Steepest Edge Algorithm Class.
int mode_
0 is exact devex, 1 full steepest, 2 is partial exact devex 3 switches between 0 and 2 depending on f...
void initializeWeights()
Initialize weights.
void djsAndDevex(CoinIndexedVector *updates, CoinIndexedVector *spareRow2, CoinIndexedVector *spareColumn1)
Update djs, weights for Devex using djs.
void setPersistence(Persistence life)
Set/ get persistence.
bool reference(int i) const
reference would be faster using AbcSimplex's status_, but I prefer to keep modularity.
int doSteepestWork(CoinPartitionedVector *updates, CoinPartitionedVector *spareRow2, CoinPartitionedVector *spareColumn1, int type)
Does steepest work type - 0 - just djs 1 - just steepest 2 - both using scaleFactor 3 - both using ex...
AbcPrimalColumnSteepest(const AbcPrimalColumnSteepest &rhs)
Copy constructor.
virtual void updateWeights(CoinIndexedVector *input)
Updates weights - part 1 - also checks accuracy.
void justDevex(CoinIndexedVector *updates, CoinIndexedVector *spareColumn1)
Update weights for Devex.
Persistence persistence_
Life of weights.
void justDjs(CoinIndexedVector *updates, CoinIndexedVector *spareColumn1)
Just update djs.
CoinIndexedVector * infeasible_
square of infeasibility array (just for infeasible columns)
int numberSwitched_
Number of times switched from partial dantzig to 0/2.
virtual void unrollWeights()
Gets rid of last update.
void checkAccuracy(int sequence, double relativeTolerance, CoinIndexedVector *rowArray1)
Checks accuracy - just for debug.
double * savedWeights_
save weight array (so we can use checkpoint)
virtual AbcPrimalColumnPivot * clone(bool copyData=true) const
Clone.
virtual ~AbcPrimalColumnSteepest()
Destructor.
virtual void maximumPivotsChanged()
Called when maximum pivots changes.
AbcPrimalColumnSteepest & operator=(const AbcPrimalColumnSteepest &rhs)
Assignment operator.
void djsAndDevex2(CoinIndexedVector *updates, CoinIndexedVector *spareColumn1)
Update djs, weights for Devex using pivot row.
virtual void clearArrays()
Gets rid of all arrays.
virtual void saveWeights(AbcSimplex *model, int mode)
Save weights - this may initialize weights as well mode is - 1) before factorization 2) after factori...
CoinIndexedVector * alternateWeights_
alternate weight array (so we can unroll)
int partialPricing(CoinIndexedVector *updates, int numberWanted, int numberLook)
Update djs doing partial pricing (dantzig)
void setReference(int i, bool trueFalse)
AbcPrimalColumnSteepest(int mode=3)
Default Constructor 0 is exact devex, 1 full steepest, 2 is partial exact devex 3 switches between 0 ...
int state_
Status 0) Normal -1) Needs initialization 1) Weights are stored by sequence number.
virtual int pivotColumn(CoinPartitionedVector *updates, CoinPartitionedVector *spareRow2, CoinPartitionedVector *spareColumn1)
Returns pivot column, -1 if none.
virtual bool looksOptimal() const
Returns true if would not find any column.