6 #ifndef ClpPrimalColumnSteepest_H
7 #define ClpPrimalColumnSteepest_H
13 class CoinIndexedVector;
37 virtual int pivotColumn(CoinIndexedVector * updates,
38 CoinIndexedVector * spareRow1,
39 CoinIndexedVector * spareRow2,
40 CoinIndexedVector * spareColumn1,
41 CoinIndexedVector * spareColumn2);
44 CoinIndexedVector * spareRow1,
45 CoinIndexedVector * spareRow2,
46 CoinIndexedVector * spareColumn1,
47 CoinIndexedVector * spareColumn2);
49 void justDjs(CoinIndexedVector * updates,
50 CoinIndexedVector * spareRow2,
51 CoinIndexedVector * spareColumn1,
52 CoinIndexedVector * spareColumn2);
55 CoinIndexedVector * spareRow2,
60 CoinIndexedVector * spareRow2,
61 CoinIndexedVector * spareColumn1,
62 CoinIndexedVector * spareColumn2);
65 CoinIndexedVector * spareRow2,
66 CoinIndexedVector * spareColumn1,
67 CoinIndexedVector * spareColumn2);
70 CoinIndexedVector * spareRow2,
71 CoinIndexedVector * spareColumn1,
72 CoinIndexedVector * spareColumn2);
75 CoinIndexedVector * spareRow2,
76 CoinIndexedVector * spareColumn1,
77 CoinIndexedVector * spareColumn2);
79 void justDevex(CoinIndexedVector * updates,
80 CoinIndexedVector * spareRow2,
81 CoinIndexedVector * spareColumn1,
82 CoinIndexedVector * spareColumn2);
85 CoinIndexedVector * spareRow2,
86 CoinIndexedVector * spareColumn1,
87 CoinIndexedVector * spareColumn2);
89 void transposeTimes2(
const CoinIndexedVector * pi1, CoinIndexedVector * dj1,
90 const CoinIndexedVector * pi2, CoinIndexedVector * dj2,
91 CoinIndexedVector * spare,
double scaleFactor);
98 CoinIndexedVector * rowArray1,
99 CoinIndexedVector * rowArray2);
125 inline int mode()
const {
176 return ((reference_[i>>5] >> (i & 31)) & 1) != 0;
179 unsigned int & value = reference_[i>>5];
184 value &= ~(1 << bit);
191 return persistence_ ;
204 CoinIndexedVector * infeasible_;
206 CoinIndexedVector * alternateWeights_;
208 double * savedWeights_;
210 unsigned int * reference_;
237 int savedPivotSequence_;
239 int savedSequenceOut_;
243 int sizeFactorization_;
virtual bool looksOptimal() const
Returns true if would not find any column.
void djsAndDevex(CoinIndexedVector *updates, CoinIndexedVector *spareRow2, CoinIndexedVector *spareColumn1, CoinIndexedVector *spareColumn2)
Update djs, weights for Devex using djs.
virtual void saveWeights(ClpSimplex *model, int mode)
Save weights - this may initialize weights as well mode is - 1) before factorization 2) after factori...
Primal Column Pivot Abstract Base Class.
int partialPricing(CoinIndexedVector *updates, CoinIndexedVector *spareRow2, int numberWanted, int numberLook)
Update djs doing partial pricing (dantzig)
void justSteepest(CoinIndexedVector *updates, CoinIndexedVector *spareRow2, CoinIndexedVector *spareColumn1, CoinIndexedVector *spareColumn2)
Update weights for Steepest.
void djsAndDevex2(CoinIndexedVector *updates, CoinIndexedVector *spareRow2, CoinIndexedVector *spareColumn1, CoinIndexedVector *spareColumn2)
Update djs, weights for Devex using pivot row.
Primal Column Pivot Steepest Edge Algorithm Class.
void initializeWeights()
Initialize weights.
void setPersistence(Persistence life)
Set/ get persistence.
virtual ClpPrimalColumnPivot * clone(bool copyData=true) const
Clone.
void checkAccuracy(int sequence, double relativeTolerance, CoinIndexedVector *rowArray1, CoinIndexedVector *rowArray2)
Checks accuracy - just for debug.
bool reference(int i) const
reference would be faster using ClpSimplex's status_, but I prefer to keep modularity.
void justDjs(CoinIndexedVector *updates, CoinIndexedVector *spareRow2, CoinIndexedVector *spareColumn1, CoinIndexedVector *spareColumn2)
Just update djs.
int pivotColumnOldMethod(CoinIndexedVector *updates, CoinIndexedVector *spareRow1, CoinIndexedVector *spareRow2, CoinIndexedVector *spareColumn1, CoinIndexedVector *spareColumn2)
For quadratic or funny nonlinearities.
virtual int numberSprintColumns(int &numberIterations) const
Returns number of extra columns for sprint algorithm - 0 means off.
virtual void switchOffSprint()
Switch off sprint idea.
This solves LPs using the simplex method.
void djsAndSteepest2(CoinIndexedVector *updates, CoinIndexedVector *spareRow2, CoinIndexedVector *spareColumn1, CoinIndexedVector *spareColumn2)
Update djs, weights for Steepest using pivot row.
ClpPrimalColumnSteepest & operator=(const ClpPrimalColumnSteepest &rhs)
Assignment operator.
Persistence persistence() const
void justDevex(CoinIndexedVector *updates, CoinIndexedVector *spareRow2, CoinIndexedVector *spareColumn1, CoinIndexedVector *spareColumn2)
Update weights for Devex.
virtual void clearArrays()
Gets rid of all arrays.
ClpSimplex * model()
Returns model.
virtual void unrollWeights()
Gets rid of last update.
virtual void updateWeights(CoinIndexedVector *input)
Updates weights - part 1 - also checks accuracy.
void transposeTimes2(const CoinIndexedVector *pi1, CoinIndexedVector *dj1, const CoinIndexedVector *pi2, CoinIndexedVector *dj2, CoinIndexedVector *spare, double scaleFactor)
Updates two arrays for steepest.
void setReference(int i, bool trueFalse)
Persistence
enums for persistence
virtual void maximumPivotsChanged()
Called when maximum pivots changes.
void djsAndSteepest(CoinIndexedVector *updates, CoinIndexedVector *spareRow2, CoinIndexedVector *spareColumn1, CoinIndexedVector *spareColumn2)
Update djs, weights for Steepest using djs.
ClpPrimalColumnSteepest(int mode=3)
Default Constructor 0 is exact devex, 1 full steepest, 2 is partial exact devex 3 switches between 0 ...
virtual ~ClpPrimalColumnSteepest()
Destructor.
virtual int pivotColumn(CoinIndexedVector *updates, CoinIndexedVector *spareRow1, CoinIndexedVector *spareRow2, CoinIndexedVector *spareColumn1, CoinIndexedVector *spareColumn2)
Returns pivot column, -1 if none.