4 #ifndef ClpFactorization_H
5 #define ClpFactorization_H
8 #include "CoinPragma.hpp"
10 #include "CoinFactorization.hpp"
14 class CoinOtherFactorization;
15 #ifndef CLP_MULTIPLE_FACTORIZATIONS
16 #define CLP_MULTIPLE_FACTORIZATIONS 4
18 #ifdef CLP_MULTIPLE_FACTORIZATIONS
19 #include "CoinDenseFactorization.hpp"
21 #ifndef COIN_FAST_CODE
22 #define COIN_FAST_CODE
31 :
public CoinFactorization
67 #ifdef CLP_MULTIPLE_FACTORIZATIONS
86 CoinIndexedVector * regionSparse,
87 CoinIndexedVector * tableauColumn,
90 bool checkBeforeModifying =
false,
91 double acceptablePivot = 1.0e-8);
102 CoinIndexedVector * regionSparse2);
106 CoinIndexedVector * regionSparse2,
107 bool noPermute =
false)
const;
114 CoinIndexedVector * regionSparse2,
115 CoinIndexedVector * regionSparse3,
116 bool noPermuteRegion3 =
false) ;
119 CoinIndexedVector * regionSparse2,
120 bool noPermute =
false)
const;
124 CoinIndexedVector * regionSparse2)
const;
126 #ifdef CLP_MULTIPLE_FACTORIZATIONS
311 #ifndef COIN_FAST_CODE
360 #ifndef COIN_FAST_CODE
366 inline void goDense() {}
402 #ifdef CLP_MULTIPLE_FACTORIZATIONS
void forceOtherFactorization(int which)
If nonzero force use of 1,dense 2,small 3,osl.
int numberDense() const
Returns number of dense rows.
int updateColumnTranspose(CoinIndexedVector *regionSparse, CoinIndexedVector *regionSparse2) const
Updates one column (BTRAN) from region2 region1 starts as zero and is zero at end.
int goSmallThreshold() const
Get switch to small if number rows <= this.
int factorize(ClpSimplex *model, int solveType, bool valuesPass)
When part of LP - given by basic variables.
bool networkBasis() const
Says if a network basis.
void almostDestructor()
Delete all stuff (leaves as after CoinFactorization())
~ClpFactorization()
Destructor.
bool needToReorder() const
Says whether to redo pivot order.
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...
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.
int numberElements() const
Total number of elements in factorization.
int updateColumnForDebug(CoinIndexedVector *regionSparse, CoinIndexedVector *regionSparse2, bool noPermute=false) const
For debug (no statistics update)
double adjustedAreaFactor() const
Returns areaFactor but adjusted for dense.
void setPersistenceFlag(int value)
Total number of elements in factorization.
void zeroTolerance(double value)
Set zero tolerance.
ClpNetworkBasis * networkBasis_
Pointer to network basis.
int status() const
Returns status.
void setStatus(int value)
Sets status.
CoinBigIndex numberElementsR() const
Returns number in R area.
#define CLP_MULTIPLE_FACTORIZATIONS
ClpFactorization()
Default constructor.
This deals with Factorization and Updates for network structures.
CoinOtherFactorization * coinFactorizationB_
Pointer to CoinOtherFactorization.
bool timeToRefactorize() const
Total number of elements in factorization.
int * permute() const
Returns address of permute region.
CoinBigIndex numberElementsU() const
Returns number in U area.
int maximumPivots() const
Maximum number of pivots between factorizations.
int goDenseThreshold() const
Get switch to dense if number rows <= this.
int numberRows() const
Number of Rows after factorization.
ClpFactorization & operator=(const ClpFactorization &)
The copy constructor from an CoinFactorization.
int denseThreshold() const
Gets dense threshold.
void setFactorization(ClpFactorization &factorization)
Sets factorization.
double zeroTolerance() const
Zero tolerance.
void clearArrays()
Get rid of all memory.
void saferTolerances(double zeroTolerance, double pivotTolerance)
Set tolerances to safer of existing and given.
double pivotTolerance() const
Pivot tolerance.
void cleanUp()
Cleans up i.e. gets rid of network basis.
void pivotTolerance(double value)
Set pivot tolerance.
void setForrestTomlin(bool value)
true if Forrest Tomlin update, false if PFI
int goSmallThreshold_
Switch to small if number rows <= this.
void setGoOslThreshold(int value)
Set switch to osl if number rows <= this.
void setGoSmallThreshold(int value)
Set switch to small if number rows <= this.
This solves LPs using the simplex method.
void sparseThreshold(int value)
Set sparse threshold.
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...
int goOslThreshold() const
Get switch to osl if number rows <= this.
void setGoDenseThreshold(int value)
Set switch to dense if number rows <= this.
int updateColumnFT(CoinIndexedVector *regionSparse, CoinIndexedVector *regionSparse2)
Updates one column (FTRAN) from region2 Tries to do FT update number returned is negative if no room ...
Abstract base class for Clp Matrices.
void setDefaultValues()
Sets default values.
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 * pivotColumn() const
Returns address of pivotColumn region (also used for permuting)
void areaFactor(double value)
Set whether larger areas needed.
void getWeights(int *weights) const
Fills weighted row list.
int forceB_
If nonzero force use of 1,dense 2,small 3,osl.
double areaFactor() const
Whether larger areas needed.
void goDenseOrSmall(int numberRows)
Go over to dense or small code if small enough.
CoinFactorization * coinFactorizationA_
Pointer to CoinFactorization.
int goDenseThreshold_
Switch to dense if number rows <= this.
CoinBigIndex numberElementsL() const
Returns number in L area.
void messageLevel(int value)
Set level of detail of messages.
int sparseThreshold() const
get sparse threshold
void goSparse()
makes a row copy of L for speed and to allow very sparse problems
void maximumPivots(int value)
Set maximum number of pivots between factorizations.
void setDenseThreshold(int value)
Sets dense threshold.
void relaxAccuracyCheck(double value)
Allows change of pivot accuracy check 1.0 == none >1.0 relaxed.
int isDenseOrSmall() const
Return 1 if dense code.
int messageLevel() const
Level of detail of messages.
void setBiasLU(int value)
Total number of elements in factorization.
This just implements CoinFactorization when an ClpMatrixBase object is passed.
int goOslThreshold_
Switch to osl if number rows <= this.
int pivots() const
Returns number of pivots since factorization.