12#ifndef CoinAbcDenseFactorization_H
13#define CoinAbcDenseFactorization_H
18#include "CoinTypes.hpp"
20#include "CoinIndexedVector.hpp"
21class CoinPackedMatrix;
61 inline void setParallelMode(
int value)
63 parallelMode_ = value;
214 CoinBigIndex maximumL,
215 CoinBigIndex maximumU)
226#ifdef EARLY_FACTORIZE
228 virtual int factorize(
AbcSimplex * , CoinIndexedVector & )
234 virtual void postProcess(
const int *sequence,
int *pivotVariable) = 0;
246 virtual int checkReplace ( CoinIndexedVector * ,
255 virtual int replaceColumn ( CoinIndexedVector * regionSparse,
258 bool skipBtranU=
false,
259 double acceptablePivot=1.0e-8)=0;
261#ifdef EARLY_FACTORIZE
263 virtual int replaceColumns(
const AbcSimplex * ,
264 CoinIndexedVector & ,
270#ifdef ABC_LONG_FACTORIZATION
272 virtual void clearHiddenArrays() {}
279#ifdef ABC_LONG_FACTORIZATION
289#ifdef ABC_LONG_FACTORIZATION
294 CoinIndexedVector * ,
313#ifdef ABC_LONG_FACTORIZATION
317 double acceptablePivot = 1.0e-8)
322 CoinIndexedVector *regionSparse,
323 CoinIndexedVector *tableauColumn,
325#ifdef ABC_LONG_FACTORIZATION
333 CoinIndexedVector *regionSparse,
334 CoinIndexedVector *tableauColumn,
335 CoinIndexedVector *partialUpdate,
337#ifdef ABC_LONG_FACTORIZATION
355 CoinIndexedVector &partialUpdate,
363 CoinIndexedVector ®ionOther)
394#define slackValue2_ 1.0
466 CoinBigIndex maximumL,
467 CoinBigIndex maximumU);
478 virtual void postProcess(
const int *sequence,
int *pivotVariable);
504 bool skipBtranU =
false,
505 double acceptablePivot = 1.0e-8);
511#ifdef ABC_LONG_FACTORIZATION
515 double acceptablePivot = 1.0e-8);
519 CoinIndexedVector *regionSparse,
520 CoinIndexedVector *tableauColumn,
522#ifdef ABC_LONG_FACTORIZATION
529 CoinIndexedVector *regionSparse,
530 CoinIndexedVector *tableauColumn,
531 CoinIndexedVector * ,
533#ifdef ABC_LONG_FACTORIZATION
560 virtual void updateColumnFT(CoinIndexedVector ®ionSparseFT, CoinIndexedVector & ,
int )
569 CoinIndexedVector ®ionOther);
Abstract base class which also has some scalars so can be used from Dense or Simp.
virtual CoinAbcAnyFactorization * clone() const =0
Clone.
void setStatus(int value)
Sets status.
virtual int * intWorkArea() const
Returns int work area.
double getAccuracyCheck() const
virtual int numberElements() const =0
Total number of elements in factorization.
virtual int updateTwoColumnsFT(CoinIndexedVector ®ionFT, CoinIndexedVector ®ionOther)=0
does FTRAN on two unpacked columns
virtual ~CoinAbcAnyFactorization()
Destructor.
int maximumPivots_
Maximum number of pivots before factorization.
virtual void updateFullColumnTranspose(CoinIndexedVector ®ionSparse) const =0
Updates one column (BTRAN) from unpacked regionSparse.
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 solveMode() const
Get solve mode e.g.
virtual void preProcess()=0
PreProcesses column ordered copy of basis.
int numberGoodColumns() const
Number of good columns in factorization.
CoinBigIndex factorElements_
Number of elements after factorization.
double zeroTolerance() const
Zero tolerance.
double pivotTolerance() const
Pivot tolerance.
void pivotTolerance(double value)
int pivots() const
Returns number of pivots since factorization.
double zeroTolerance_
Zero tolerance.
void setNumberSlacks(int value)
Sets number of slacks.
void zeroTolerance(double value)
virtual double checkReplacePart1b(CoinIndexedVector *, int)
virtual CoinFactorizationDouble * workArea() const
Returns work area.
int maximumPivots() const
Maximum number of pivots between factorizations.
virtual int * permute() const =0
Returns permute in.
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,...
virtual void updateWeights(CoinIndexedVector ®ionSparse) const =0
Updates one column for dual steepest edge weights (FTRAN)
void setNumberRows(int value)
Set number of Rows after factorization.
virtual CoinFactorizationDouble * pivotRegion() const
virtual CoinFactorizationDouble * elements() const
Returns array to put basis elements in.
virtual void clearArrays()
Get rid of all memory.
int * pivotRow_
Pivot row.
void setPivots(int value)
Sets number of pivots since factorization.
virtual int * numberInRow() const
Number of entries in each row.
int status_
Status of factorization.
CoinFactorizationDouble * elements_
Elements of factorization and updates length is maxR*maxR+maxSpace will always be long enough so can ...
void setSolveMode(int value)
Set solve mode e.g.
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.
void minimumPivotTolerance(double value)
double areaFactor_
Area factor.
virtual void updateColumnFTPart2(CoinIndexedVector ®ionSparse)=0
virtual double checkReplacePart1(CoinIndexedVector *, CoinIndexedVector *, int)
virtual int updateColumnFTPart1(CoinIndexedVector ®ionSparse)=0
void relaxAccuracyCheck(double value)
Allows change of pivot accuracy check 1.0 == none >1.0 relaxed.
virtual int factor(AbcSimplex *model)=0
Does most of factorization returning status 0 - OK -99 - needs more memory -1 - singular - use number...
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 makeNonSingular(int *sequence)=0
Makes a non-singular basis by replacing variables.
CoinAbcAnyFactorization(const CoinAbcAnyFactorization &other)
Copy constructor.
virtual bool wantsTableauColumn() const
Returns true if wants tableauColumn in replaceColumn.
CoinAbcAnyFactorization()
Default constructor.
int numberSlacks() const
Returns number of slacks.
double minimumPivotTolerance_
Minimum pivot tolerance.
int numberDense_
Number of dense rows in factorization.
virtual void updateColumnFT(CoinIndexedVector ®ionSparseFT, CoinIndexedVector &partialUpdate, int which)=0
virtual void postProcess(const int *sequence, int *pivotVariable)=0
Does post processing on valid factorization - putting variables on correct rows.
virtual int updateColumnFT(CoinIndexedVector ®ionSparse)=0
Updates one column (FTRAN) from unpacked regionSparse Tries to do FT update number returned is negati...
virtual int * pivotColumn() const
Returns pivotColumn or permute.
virtual void maximumPivots(int value)
Set maximum pivots.
virtual void checkReplacePart1a(CoinIndexedVector *, int)
int maximumRows_
Maximum rows ever (i.e. use to copy arrays etc)
CoinAbcAnyFactorization & operator=(const CoinAbcAnyFactorization &other)
= copy
double areaFactor() const
Area factor.
virtual int updateColumnTranspose(CoinIndexedVector ®ionSparse) const =0
Updates one column (BTRAN) from unpacked regionSparse.
int numberRows() const
Number of Rows after factorization.
int numberPivots_
Number pivots since last factorization.
int status() const
Returns status.
int numberSlacks_
Number slacks.
virtual int * indices() const =0
Returns array to put basis indices in.
virtual CoinBigIndex * starts() const
Returns array to put basis starts in.
virtual void updateFullColumn(CoinIndexedVector ®ionSparse) const =0
This version does FTRAN on array when indices not set up.
virtual void updateColumnTransposeCpu(CoinIndexedVector ®ionSparse, int whichCpu) const
Updates one column (BTRAN)
virtual double checkReplacePart1(CoinIndexedVector *, int)
Checks if can replace one Column to basis, returns update alpha Fills in region for use later partial...
CoinSimplexInt numberDense() const
Number of dense rows after factorization.
double minimumPivotTolerance() const
Minimum pivot tolerance.
int solveMode_
Solve mode e.g.
int numberGoodU_
Number factorized in U (not row singletons)
virtual void goSparse()
Sees whether to go sparse.
virtual int * permuteBack() const
Returns permute back.
double relaxCheck_
Relax check on accuracy in replaceColumn.
virtual void updateColumnCpu(CoinIndexedVector ®ionSparse, int whichCpu) const
Updates one column (FTRAN)
virtual int * numberInColumn() const
Number of entries in each column.
virtual void checkMarkArrays() const
virtual int * pivotRow() const
Returns pivot row.
int numberRows_
Number of Rows in factorization.
double pivotTolerance_
Pivot tolerance.
void areaFactor(CoinSimplexDouble value)
virtual void replaceColumnPart3(const AbcSimplex *model, CoinIndexedVector *regionSparse, CoinIndexedVector *tableauColumn, CoinIndexedVector *partialUpdate, int pivotRow, double alpha)=0
Replaces one Column to basis, partial update in vector.
CoinFactorizationDouble * workArea_
Work area of numberRows_.
virtual void getAreas(int numberRows, int numberColumns, CoinBigIndex maximumL, CoinBigIndex maximumU)=0
Gets space for a factorization.
This deals with Factorization and Updates This is a simple dense version so other people can write a ...
CoinAbcDenseFactorization & operator=(const CoinAbcDenseFactorization &other)
= copy
void gutsOfCopy(const CoinAbcDenseFactorization &other)
The real work of copy.
virtual void updateFullColumnTranspose(CoinIndexedVector ®ionSparse) const
Updates one column (BTRAN) from unpacked regionSparse.
int checkPivot(double saveFromU, double oldPivot) const
Returns accuracy status of replaceColumn returns 0=OK, 1=Probably OK, 2=singular.
virtual int updateTwoColumnsFT(CoinIndexedVector ®ionFT, CoinIndexedVector ®ionOther)
does FTRAN on two unpacked columns
virtual void updateWeights(CoinIndexedVector ®ionSparse) const
Updates one column for dual steepest edge weights (FTRAN)
virtual CoinAbcAnyFactorization * clone() const
Clone.
CoinBigIndex maximumSpace_
Maximum length of iterating area.
virtual void postProcess(const int *sequence, int *pivotVariable)
Does post processing on valid factorization - putting variables on correct rows.
virtual int * permute() const
Returns permute in.
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...
void clearArrays()
Get rid of all memory.
virtual void updateFullColumn(CoinIndexedVector ®ionSparse) const
This version does FTRAN on array when indices not set up.
virtual void updateColumnFT(CoinIndexedVector ®ionSparseFT, CoinIndexedVector &, int)
virtual int * indices() const
Returns array to put basis indices in.
void gutsOfInitialize()
The real work of constructor.
virtual void makeNonSingular(int *sequence)
Makes a non-singular basis by replacing variables.
CoinAbcDenseFactorization()
Default constructor.
double maximumCoefficient() const
Returns maximum absolute value in 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,...
friend void CoinAbcDenseFactorizationUnitTest(const std::string &mpsDir)
virtual void getAreas(int numberRows, int numberColumns, CoinBigIndex maximumL, CoinBigIndex maximumU)
Gets space for a factorization.
virtual int updateColumnFT(CoinIndexedVector ®ionSparse)
Updates one column (FTRAN) from unpacked regionSparse Tries to do FT update number returned is negati...
virtual int factor(AbcSimplex *model)
Does most of factorization returning status 0 - OK -99 - needs more memory -1 - singular - use number...
virtual void preProcess()
PreProcesses column ordered copy of basis.
virtual int updateColumn(CoinIndexedVector ®ionSparse) const
This version has same effect as above with FTUpdate==false so number returned is always >=0.
CoinAbcDenseFactorization(const CoinAbcDenseFactorization &other)
Copy constructor.
virtual int updateColumnFTPart1(CoinIndexedVector ®ionSparse)
virtual ~CoinAbcDenseFactorization()
Destructor.
virtual int numberElements() const
Total number of elements in factorization.
virtual int updateColumnTranspose(CoinIndexedVector ®ionSparse) const
Updates one column (BTRAN) from unpacked regionSparse.
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 void updateColumnFTPart2(CoinIndexedVector &)
virtual void replaceColumnPart3(const AbcSimplex *model, CoinIndexedVector *regionSparse, CoinIndexedVector *tableauColumn, int pivotRow, double alpha)
Replaces one Column to basis, partial update already in U.
CoinSimplexInt maximumRowsAdjusted_
Use for array size to get multiple of 8.
void gutsOfDestructor()
The real work of desstructor.