6 #ifndef ClpFactorization_H
7 #define ClpFactorization_H
16 #ifndef CLP_MULTIPLE_FACTORIZATIONS
17 #define CLP_MULTIPLE_FACTORIZATIONS 4
19 #ifdef CLP_MULTIPLE_FACTORIZATIONS
23 #ifndef COIN_FAST_CODE
24 #define COIN_FAST_CODE
26 #ifndef CLP_FACTORIZATION_NEW_TIMING
27 #define CLP_FACTORIZATION_NEW_TIMING 1
71 #ifdef CLP_MULTIPLE_FACTORIZATIONS
94 bool checkBeforeModifying =
false,
95 double acceptablePivot = 1.0e-8);
96 #if ABOCA_LITE_FACTORIZATION
119 bool noPermute =
false)
const;
128 bool noPermuteRegion3 =
false);
132 bool noPermute =
false)
const;
145 #ifdef CLP_MULTIPLE_FACTORIZATIONS
293 #if CLP_FACTORIZATION_NEW_TIMING > 1
294 void statsRefactor(
char when)
const;
412 #ifndef COIN_FAST_CODE
473 #ifndef COIN_FAST_CODE
479 inline void goDense() {}
521 #ifdef CLP_MULTIPLE_FACTORIZATIONS
526 #ifdef CLP_REUSE_ETAS
539 #ifdef CLP_FACTORIZATION_NEW_TIMING
int pivots() const
Returns number of pivots since factorization.
int goOslThreshold_
Switch to osl if number rows <= this.
int updateColumn(CoinIndexedVector *regionSparse, CoinIndexedVector *regionSparse2, bool noPermute=false) const
Updates one column (FTRAN) from region2 region1 starts as zero and is zero at end.
void setGoOslThreshold(int value)
Set switch to osl if number rows <= this.
void setGoSmallThreshold(int value)
Set switch to small if number rows <= this.
void sparseThreshold(int value)
Set sparse threshold.
double areaFactor() const
Whether larger areas needed.
int numberDense() const
Returns number of dense rows.
int status() const
Returns status.
int denseThreshold() const
Gets dense threshold.
Abstract base class for Clp Matrices.
int updateTwoColumnsFT(CoinIndexedVector *regionSparse1, CoinIndexedVector *regionSparse2, CoinIndexedVector *regionSparse3, bool noPermuteRegion3=false)
Updates one column (FTRAN) from region2 Tries to do FT update number returned is negative if no room...
void setStatus(int value)
Sets status.
int numberElementsL() const
Returns number in L area.
int * pivotColumn() const
Returns address of pivotColumn region (also used for permuting)
double shortestAverage_
For guessing when to re-factorize.
Abstract base class which also has some scalars so can be used from Dense or Simp.
void setForrestTomlin(bool value)
int goDenseThreshold() const
Get switch to dense if number rows <= this.
int factorize(ClpSimplex *model, int solveType, bool valuesPass)
When part of LP - given by basic variables.
void setDenseThreshold(int value)
Sets dense threshold.
double pivotTolerance() const
Pivot tolerance.
void almostDestructor()
Delete all stuff (leaves as after CoinFactorization())
void relaxAccuracyCheck(double value)
Allows change of pivot accuracy check 1.0 == none >1.0 relaxed.
void forceOtherFactorization(int which)
If nonzero force use of 1,dense 2,small 3,osl.
int numberRows() const
Number of Rows after factorization.
int * permute() const
Returns address of permute region.
void setFactorization(ClpFactorization &factorization)
Sets factorization.
double areaFactor() const
Whether larger areas needed.
CoinBigIndex numberElementsR() const
Returns number in R area.
int numberElements() const
Total number of elements in factorization.
ClpNetworkBasis * networkBasis_
Pointer to network basis.
void saferTolerances(double zeroTolerance, double pivotTolerance)
Set tolerances to safer of existing and given.
int numberRows() const
Number of Rows after factorization.
void setGoDenseThreshold(int value)
Set switch to dense if number rows <= this.
void setDefaultValues()
Sets default values.
double adjustedAreaFactor() const
Returns areaFactor but adjusted for dense.
int status() const
Returns status.
This deals with Factorization and Updates for network structures.
This just implements CoinFactorization when an ClpMatrixBase object is passed.
void setBiasLU(int value)
CoinBigIndex numberElementsL() const
Returns number in L area.
CoinFactorization * coinFactorization() const
Return coinFactorizationA_.
double zeroTolerance() const
Zero tolerance.
void setPersistenceFlag(int value)
#define CLP_MULTIPLE_FACTORIZATIONS
virtual void clearArrays()
Get rid of all memory.
bool networkBasis() const
Says if a network basis.
int sparseThreshold() const
get sparse threshold
CoinBigIndex numberElementsU() const
Returns number in U area.
int sparseThreshold() const
get sparse threshold
bool doStatistics_
To switch statistics on or off.
void maximumPivots(int value)
Set maximum number of pivots between factorizations.
void setPersistenceFlag(int value)
int maximumPivots() const
Maximum number of pivots between factorizations.
~ClpFactorization()
Destructor.
int denseThreshold() const
Gets dense threshold.
int messageLevel() const
Level of detail of messages.
void cleanUp()
Cleans up i.e. gets rid of network basis.
double zeroTolerance() const
Zero tolerance.
void setBiasLU(int value)
int pivots() const
Returns number of pivots since factorization.
This solves LPs using the simplex method.
int updateColumnTranspose(CoinIndexedVector *regionSparse, CoinIndexedVector *regionSparse2) const
Updates one column (BTRAN) from region2 region1 starts as zero and is zero at end.
void goDenseOrSmall(int numberRows)
Go over to dense or small code if small enough.
void clearArrays()
Get rid of all memory.
CoinFactorization * coinFactorizationA_
Pointer to CoinFactorization.
int goSmallThreshold() const
Get switch to small if number rows <= this.
void updateTwoColumnsTranspose(CoinIndexedVector *regionSparse, CoinIndexedVector *regionSparse2, CoinIndexedVector *regionSparse3) const
Updates two columns (BTRAN) from regionSparse2 and 3 regionSparse starts as zero and is zero at end N...
void almostDestructor()
Delete all stuff (leaves as after CoinFactorization())
ClpFactorization()
Default constructor.
int numberRows() const
Number of Rows after factorization.
void setStatus(int value)
Sets status.
void zeroTolerance(double value)
Set zero tolerance.
int maximumPivots() const
Maximum number of pivots between factorizations.
ClpFactorization & operator=(const ClpFactorization &)
void goSparse()
makes a row copy of L for speed and to allow very sparse problems
int maximumPivots() const
Maximum number of pivots between factorizations.
double zeroTolerance() const
Zero tolerance.
double adjustedAreaFactor() const
Returns areaFactor but adjusted for dense.
void setStatus(int value)
Sets status.
int numberElementsR() const
Returns number in R area.
int effectiveStartNumberU_
int status() const
Returns status.
int replaceColumn(const ClpSimplex *model, CoinIndexedVector *regionSparse, CoinIndexedVector *tableauColumn, int pivotRow, double pivotCheck, bool checkBeforeModifying=false, double acceptablePivot=1.0e-8)
Replaces one Column to basis, returns 0=OK, 1=Probably OK, 2=singular, 3=no room If checkBeforeModify...
int goSmallThreshold_
Switch to small if number rows <= this.
double slackValue() const
Whether slack value is +1 or -1.
double pivotTolerance() const
Pivot tolerance.
int goOslThreshold() const
Get switch to osl if number rows <= this.
void clearArrays()
Get rid of all memory.
int numberDense() const
Returns number of dense rows.
int goDenseThreshold_
Switch to dense if number rows <= this.
int * permute() const
Returns address of permute region.
void messageLevel(int value)
Set level of detail of messages.
This deals with Factorization and Updates.
int * pivotColumn() const
Returns address of pivotColumn region (also used for permuting)
void doStatistics(bool trueFalse) const
To switch statistics on or off.
bool needToReorder() const
Says whether to redo pivot order.
int isDenseOrSmall() const
Return 1 if dense code.
int numberElements() const
Total number of elements in factorization.
bool timeToRefactorize() const
void setDenseThreshold(int value)
Sets dense threshold.
int pivots() const
Returns number of pivots since factorization.
int updateColumnFT(CoinIndexedVector *regionSparse, CoinIndexedVector *regionSparse2)
Updates one column (FTRAN) from region2 Tries to do FT update number returned is negative if no room ...
int numberElementsU() const
Returns number in U area.
double totalInIncreasingU_
int persistenceFlag() const
Array persistence flag If 0 then as now (delete/new) 1 then only do arrays if bigger needed 2 as 1 bu...
virtual int * permute() const =0
Returns permute in.
void getWeights(int *weights) const
Fills weighted row list.
int messageLevel() const
Level of detail of messages.
int updateColumnForDebug(CoinIndexedVector *regionSparse, CoinIndexedVector *regionSparse2, bool noPermute=false) const
For debug (no statistics update)
double pivotTolerance() const
Pivot tolerance.
int persistenceFlag() const
Array persistence flag If 0 then as now (delete/new) 1 then only do arrays if bigger needed 2 as 1 bu...
void pivotTolerance(double value)
Set pivot tolerance.
void setForrestTomlin(bool value)
true if Forrest Tomlin update, false if PFI
int forceB_
If nonzero force use of 1,dense 2,small 3,osl.
void areaFactor(double value)
Set whether larger areas needed.
CoinOtherFactorization * coinFactorizationB_
Pointer to CoinOtherFactorization.
void relaxAccuracyCheck(double value)
Allows change of pivot accuracy check 1.0 == none >1.0 relaxed.
virtual int numberElements() const =0
Total number of elements in factorization.