13 #ifndef CoinAbcDenseFactorization_H
14 #define CoinAbcDenseFactorization_H
19 #include "CoinTypes.hpp"
21 #include "CoinIndexedVector.hpp"
22 class CoinPackedMatrix;
46 inline int status ( )
const {
58 inline void setParallelMode(
int value)
60 {parallelMode_=value;};
124 virtual CoinFactorizationDouble *
elements()
const;
128 virtual CoinFactorizationDouble *
workArea()
const;
136 virtual CoinBigIndex *
starts()
const;
168 virtual int *
indices()
const = 0;
171 virtual int *
permute()
const = 0;
182 CoinBigIndex maximumL,
183 CoinBigIndex maximumU ) = 0;
193 #ifdef EARLY_FACTORIZE
194 virtual int factorize (
AbcSimplex * , CoinIndexedVector & )
198 virtual void postProcess(
const int * sequence,
int * pivotVariable) = 0;
211 virtual int checkReplace ( CoinIndexedVector * ,
220 virtual int replaceColumn ( CoinIndexedVector * regionSparse,
223 bool skipBtranU=
false,
224 double acceptablePivot=1.0e-8)=0;
226 #ifdef EARLY_FACTORIZE
227 virtual int replaceColumns (
const AbcSimplex * ,
229 CoinIndexedVector & ,
233 #ifdef ABC_LONG_FACTORIZATION
234 virtual void clearHiddenArrays() {}
242 #ifdef ABC_LONG_FACTORIZATION
249 #ifdef ABC_LONG_FACTORIZATION
253 CoinIndexedVector * ,
267 #ifdef ABC_LONG_FACTORIZATION
271 double acceptablePivot = 1.0e-8) = 0;
275 CoinIndexedVector * regionSparse,
276 CoinIndexedVector * tableauColumn,
278 #ifdef ABC_LONG_FACTORIZATION
285 CoinIndexedVector * regionSparse,
286 CoinIndexedVector * tableauColumn,
287 CoinIndexedVector * partialUpdate,
289 #ifdef ABC_LONG_FACTORIZATION
302 virtual int updateColumnFT ( CoinIndexedVector & regionSparse) = 0;
306 CoinIndexedVector & partialUpdate,
310 virtual int updateColumn ( CoinIndexedVector & regionSparse)
const = 0;
313 CoinIndexedVector & regionOther) = 0;
318 virtual void updateFullColumn ( CoinIndexedVector & regionSparse)
const = 0;
323 virtual void updateWeights ( CoinIndexedVector & regionSparse)
const=0;
325 virtual void updateColumnCpu ( CoinIndexedVector & regionSparse,
int whichCpu)
const;
344 #define slackValue2_ 1.0
419 CoinBigIndex maximumL,
420 CoinBigIndex maximumU );
431 virtual void postProcess(
const int * sequence,
int * pivotVariable);
453 virtual int replaceColumn ( CoinIndexedVector * regionSparse,
456 bool skipBtranU=
false,
457 double acceptablePivot=1.0e-8);
463 #ifdef ABC_LONG_FACTORIZATION
467 double acceptablePivot = 1.0e-8) ;
471 CoinIndexedVector * regionSparse,
472 CoinIndexedVector * tableauColumn,
474 #ifdef ABC_LONG_FACTORIZATION
481 CoinIndexedVector * regionSparse,
482 CoinIndexedVector * tableauColumn,
483 CoinIndexedVector * ,
485 #ifdef ABC_LONG_FACTORIZATION
505 virtual void updateColumnFT ( CoinIndexedVector & regionSparseFT,CoinIndexedVector & ,
int )
509 virtual int updateColumn ( CoinIndexedVector & regionSparse)
const;
512 CoinIndexedVector & regionOther);
524 virtual void updateWeights ( CoinIndexedVector & regionSparse)
const;
553 int checkPivot(
double saveFromU,
double oldPivot)
const;
virtual void updateFullColumn(CoinIndexedVector ®ionSparse) const
This version does FTRAN on array when indices not set up.
virtual void makeNonSingular(int *sequence)=0
Makes a non-singular basis by replacing variables.
virtual void updateFullColumnTranspose(CoinIndexedVector ®ionSparse) const
Updates one column (BTRAN) from unpacked regionSparse.
CoinSimplexInt maximumRowsAdjusted_
Use for array size to get multiple of 8.
virtual int factor(AbcSimplex *model)
Does most of factorization returning status 0 - OK -99 - needs more memory -1 - singular - use number...
double zeroTolerance() const
Zero tolerance.
virtual int factor(AbcSimplex *model)=0
Does most of factorization returning status 0 - OK -99 - needs more memory -1 - singular - use number...
int numberRows_
Number of Rows in factorization.
virtual int replaceColumn(CoinIndexedVector *regionSparse, int pivotRow, double pivotCheck, bool skipBtranU=false, double acceptablePivot=1.0e-8)
Replaces one Column to basis, returns 0=OK, 1=Probably OK, 2=singular, 3=no room If skipBtranU is fal...
CoinFactorizationDouble * elements_
Elements of factorization and updates length is maxR*maxR+maxSpace will always be long enough so can ...
virtual void preProcess()
PreProcesses column ordered copy of basis.
virtual double checkReplacePart1(CoinIndexedVector *, int)
Checks if can replace one Column to basis, returns update alpha Fills in region for use later partial...
virtual int updateColumnTranspose(CoinIndexedVector ®ionSparse) const
Updates one column (BTRAN) from unpacked regionSparse.
virtual void replaceColumnPart3(const AbcSimplex *model, CoinIndexedVector *regionSparse, CoinIndexedVector *tableauColumn, int pivotRow, double alpha)
Replaces one Column to basis, partial update already in U.
void areaFactor(CoinSimplexDouble value)
virtual ~CoinAbcAnyFactorization()
Destructor.
virtual int * pivotColumn() const
Returns pivotColumn or permute.
Abstract base class which also has some scalars so can be used from Dense or Simp.
virtual int * permuteBack() const
Returns permute back.
virtual void updateFullColumnTranspose(CoinIndexedVector ®ionSparse) const =0
Updates one column (BTRAN) from unpacked regionSparse.
virtual int updateColumnFTPart1(CoinIndexedVector ®ionSparse)=0
int numberSlacks_
Number slacks.
int numberPivots_
Number pivots since last factorization.
virtual int updateColumnTranspose(CoinIndexedVector ®ionSparse) const =0
Updates one column (BTRAN) from unpacked regionSparse.
virtual void updateColumnFTPart2(CoinIndexedVector &)
double areaFactor() const
Area factor.
CoinAbcAnyFactorization()
Default constructor.
virtual void updateFullColumn(CoinIndexedVector ®ionSparse) const =0
This version does FTRAN on array when indices not set up.
double relaxCheck_
Relax check on accuracy in replaceColumn.
int maximumRows_
Maximum rows ever (i.e. use to copy arrays etc)
virtual int updateTwoColumnsFT(CoinIndexedVector ®ionFT, CoinIndexedVector ®ionOther)=0
does FTRAN on two unpacked columns
int numberRows() const
Number of Rows after factorization.
virtual int * permute() const
Returns permute in.
void gutsOfInitialize()
The real work of constructor.
virtual int updateTwoColumnsFT(CoinIndexedVector ®ionFT, CoinIndexedVector ®ionOther)
does FTRAN on two unpacked columns
virtual CoinFactorizationDouble * pivotRegion() const
virtual int * indices() const
Returns array to put basis indices in.
CoinBigIndex maximumSpace_
Maximum length of iterating area.
int status() const
Returns status.
virtual int * pivotRow() const
Returns pivot row.
virtual void updateColumnCpu(CoinIndexedVector ®ionSparse, int whichCpu) const
Updates one column (FTRAN)
void setNumberSlacks(int value)
Sets number of slacks.
virtual int updateColumnFT(CoinIndexedVector ®ionSparse)=0
Updates one column (FTRAN) from unpacked regionSparse Tries to do FT update number returned is negati...
double pivotTolerance() const
Pivot tolerance.
virtual int updateColumnFTPart1(CoinIndexedVector ®ionSparse)
CoinAbcDenseFactorization()
Default constructor.
CoinFactorizationDouble * workArea_
Work area of numberRows_.
virtual void postProcess(const int *sequence, int *pivotVariable)
Does post processing on valid factorization - putting variables on correct rows.
This deals with Factorization and Updates This is a simple dense version so other people can write a ...
int numberGoodU_
Number factorized in U (not row singletons)
virtual void makeNonSingular(int *sequence)
Makes a non-singular basis by replacing variables.
int maximumPivots_
Maximum number of pivots before factorization.
CoinSimplexInt numberDense() const
Number of dense rows after factorization.
virtual CoinAbcAnyFactorization * clone() const =0
Clone.
virtual void setUsefulInformation(const int *info, int whereFrom)
Useful information for factorization 0 - iteration number whereFrom is 0 for factorize and 1 for repl...
int * pivotRow_
Pivot row.
virtual CoinFactorizationDouble * elements() const
Returns array to put basis elements in.
virtual int * numberInRow() const
Number of entries in each row.
int numberGoodColumns() const
Number of good columns in factorization.
virtual CoinFactorizationDouble * workArea() const
Returns work area.
void setNumberRows(int value)
Set number of Rows after factorization.
virtual CoinAbcAnyFactorization * clone() const
Clone.
void setStatus(int value)
Sets status.
virtual double checkReplacePart1(CoinIndexedVector *, CoinIndexedVector *, int)
virtual void replaceColumnPart3(const AbcSimplex *model, CoinIndexedVector *regionSparse, CoinIndexedVector *tableauColumn, CoinIndexedVector *, int pivotRow, double alpha)
Replaces one Column to basis, partial update in vector.
virtual int * indices() const =0
Returns array to put basis indices in.
int numberDense_
Number of dense rows in factorization.
CoinAbcAnyFactorization & operator=(const CoinAbcAnyFactorization &other)
= copy
virtual void updateColumnTransposeCpu(CoinIndexedVector ®ionSparse, int whichCpu) const
Updates one column (BTRAN)
virtual int updateColumn(CoinIndexedVector ®ionSparse) const =0
This version has same effect as above with FTUpdate==false so number returned is always >=0...
virtual void checkReplacePart1a(CoinIndexedVector *, int)
virtual int numberElements() const =0
Total number of elements in factorization.
virtual ~CoinAbcDenseFactorization()
Destructor.
void gutsOfCopy(const CoinAbcDenseFactorization &other)
The real work of copy.
virtual void postProcess(const int *sequence, int *pivotVariable)=0
Does post processing on valid factorization - putting variables on correct rows.
void setPivots(int value)
Sets number of pivots since factorization.
virtual void updateColumnFT(CoinIndexedVector ®ionSparseFT, CoinIndexedVector &, int)
virtual void getAreas(int numberRows, int numberColumns, CoinBigIndex maximumL, CoinBigIndex maximumU)=0
Gets space for a factorization.
double minimumPivotTolerance() const
Minimum pivot tolerance.
virtual bool wantsTableauColumn() const
Returns true if wants tableauColumn in replaceColumn.
virtual void getAreas(int numberRows, int numberColumns, CoinBigIndex maximumL, CoinBigIndex maximumU)
Gets space for a factorization.
int solveMode() const
Get solve mode e.g.
friend void CoinAbcDenseFactorizationUnitTest(const std::string &mpsDir)
double maximumCoefficient() const
Returns maximum absolute value in factorization.
virtual int * permute() const =0
Returns permute in.
virtual int updateColumnFT(CoinIndexedVector ®ionSparse)
Updates one column (FTRAN) from unpacked regionSparse Tries to do FT update number returned is negati...
void relaxAccuracyCheck(double value)
Allows change of pivot accuracy check 1.0 == none >1.0 relaxed.
virtual double checkReplacePart1b(CoinIndexedVector *, int)
void clearArrays()
Get rid of all memory.
virtual void preProcess()=0
PreProcesses column ordered copy of basis.
int checkPivot(double saveFromU, double oldPivot) const
Returns accuracy status of replaceColumn returns 0=OK, 1=Probably OK, 2=singular. ...
virtual void updateWeights(CoinIndexedVector ®ionSparse) const =0
Updates one column for dual steepest edge weights (FTRAN)
virtual void updateWeights(CoinIndexedVector ®ionSparse) const
Updates one column for dual steepest edge weights (FTRAN)
double pivotTolerance_
Pivot tolerance.
int numberSlacks() const
Returns number of slacks.
virtual int checkReplacePart2(int pivotRow, double btranAlpha, double ftranAlpha, double ftAlpha, double acceptablePivot=1.0e-8)=0
Checks if can replace one Column to basis, returns 0=OK, 1=Probably OK, 2=singular, 3=no room, 5 max pivots.
double areaFactor_
Area factor.
virtual int * intWorkArea() const
Returns int work area.
virtual int * numberInColumn() const
Number of entries in each column.
double getAccuracyCheck() const
void setSolveMode(int value)
Set solve mode e.g.
int pivots() const
Returns number of pivots since factorization.
virtual int checkReplacePart2(int pivotRow, double btranAlpha, double ftranAlpha, double ftAlpha, double acceptablePivot=1.0e-8)
Checks if can replace one Column to basis, returns 0=OK, 1=Probably OK, 2=singular, 3=no room, 5 max pivots.
CoinAbcDenseFactorization & operator=(const CoinAbcDenseFactorization &other)
= copy
double minimumPivotTolerance_
Minimum pivot tolerance.
void gutsOfDestructor()
The real work of desstructor.
int status_
Status of factorization.
int solveMode_
Solve mode e.g.
virtual CoinBigIndex * starts() const
Returns array to put basis starts in.
virtual void checkMarkArrays() const
virtual void clearArrays()
Get rid of all memory.
int maximumPivots() const
Maximum number of pivots between factorizations.
double zeroTolerance_
Zero tolerance.
virtual int updateColumn(CoinIndexedVector ®ionSparse) const
This version has same effect as above with FTUpdate==false so number returned is always >=0...
virtual void goSparse()
Sees whether to go sparse.
virtual void updateColumnFTPart2(CoinIndexedVector ®ionSparse)=0
CoinBigIndex factorElements_
Number of elements after factorization.
virtual int numberElements() const
Total number of elements in factorization.
virtual void replaceColumnPart3(const AbcSimplex *model, CoinIndexedVector *regionSparse, CoinIndexedVector *tableauColumn, int pivotRow, double alpha)=0
Replaces one Column to basis, partial update already in U.