diff options
Diffstat (limited to 'build/Bonmin/include/coin/ClpFactorization.hpp')
-rw-r--r-- | build/Bonmin/include/coin/ClpFactorization.hpp | 432 |
1 files changed, 0 insertions, 432 deletions
diff --git a/build/Bonmin/include/coin/ClpFactorization.hpp b/build/Bonmin/include/coin/ClpFactorization.hpp deleted file mode 100644 index dda8ff7..0000000 --- a/build/Bonmin/include/coin/ClpFactorization.hpp +++ /dev/null @@ -1,432 +0,0 @@ -/* $Id: ClpFactorization.hpp 2078 2015-01-05 12:39:49Z forrest $ */ -// Copyright (C) 2002, International Business Machines -// Corporation and others. All Rights Reserved. -// This code is licensed under the terms of the Eclipse Public License (EPL). - -#ifndef ClpFactorization_H -#define ClpFactorization_H - - -#include "CoinPragma.hpp" - -#include "CoinFactorization.hpp" -class ClpMatrixBase; -class ClpSimplex; -class ClpNetworkBasis; -class CoinOtherFactorization; -#ifndef CLP_MULTIPLE_FACTORIZATIONS -#define CLP_MULTIPLE_FACTORIZATIONS 4 -#endif -#ifdef CLP_MULTIPLE_FACTORIZATIONS -#include "CoinDenseFactorization.hpp" -#include "ClpSimplex.hpp" -#endif -#ifndef COIN_FAST_CODE -#define COIN_FAST_CODE -#endif -#ifndef CLP_FACTORIZATION_NEW_TIMING -#define CLP_FACTORIZATION_NEW_TIMING 1 -#endif - -/** This just implements CoinFactorization when an ClpMatrixBase object - is passed. If a network then has a dummy CoinFactorization and - a genuine ClpNetworkBasis object -*/ -class ClpFactorization -#ifndef CLP_MULTIPLE_FACTORIZATIONS - : public CoinFactorization -#endif -{ - - //friend class CoinFactorization; - -public: - /**@name factorization */ - //@{ - /** When part of LP - given by basic variables. - Actually does factorization. - Arrays passed in have non negative value to say basic. - If status is okay, basic variables have pivot row - this is only needed - if increasingRows_ >1. - Allows scaling - If status is singular, then basic variables have pivot row - and ones thrown out have -1 - returns 0 -okay, -1 singular, -2 too many in basis, -99 memory */ - int factorize (ClpSimplex * model, int solveType, bool valuesPass); - //@} - - - /**@name Constructors, destructor */ - //@{ - /** Default constructor. */ - ClpFactorization(); - /** Destructor */ - ~ClpFactorization(); - //@} - - /**@name Copy method */ - //@{ - /** The copy constructor from an CoinFactorization. */ - ClpFactorization(const CoinFactorization&); - /** The copy constructor. */ - ClpFactorization(const ClpFactorization&, int denseIfSmaller = 0); -#ifdef CLP_MULTIPLE_FACTORIZATIONS - /** The copy constructor from an CoinOtherFactorization. */ - ClpFactorization(const CoinOtherFactorization&); -#endif - ClpFactorization& operator=(const ClpFactorization&); - //@} - - /* **** below here is so can use networkish basis */ - /**@name rank one updates which do exist */ - //@{ - - /** Replaces one Column to basis, - returns 0=OK, 1=Probably OK, 2=singular, 3=no room - If checkBeforeModifying is true will do all accuracy checks - before modifying factorization. Whether to set this depends on - speed considerations. You could just do this on first iteration - after factorization and thereafter re-factorize - partial update already in U */ - int replaceColumn ( const ClpSimplex * model, - CoinIndexedVector * regionSparse, - CoinIndexedVector * tableauColumn, - int pivotRow, - double pivotCheck , - bool checkBeforeModifying = false, - double acceptablePivot = 1.0e-8); - //@} - - /**@name various uses of factorization (return code number elements) - which user may want to know about */ - //@{ - /** Updates one column (FTRAN) from region2 - Tries to do FT update - number returned is negative if no room - region1 starts as zero and is zero at end */ - int updateColumnFT ( CoinIndexedVector * regionSparse, - CoinIndexedVector * regionSparse2); - /** Updates one column (FTRAN) from region2 - region1 starts as zero and is zero at end */ - int updateColumn ( CoinIndexedVector * regionSparse, - CoinIndexedVector * regionSparse2, - bool noPermute = false) const; - /** Updates one column (FTRAN) from region2 - Tries to do FT update - number returned is negative if no room. - Also updates region3 - region1 starts as zero and is zero at end */ - int updateTwoColumnsFT ( CoinIndexedVector * regionSparse1, - CoinIndexedVector * regionSparse2, - CoinIndexedVector * regionSparse3, - bool noPermuteRegion3 = false) ; - /// For debug (no statistics update) - int updateColumnForDebug ( CoinIndexedVector * regionSparse, - CoinIndexedVector * regionSparse2, - bool noPermute = false) const; - /** Updates one column (BTRAN) from region2 - region1 starts as zero and is zero at end */ - int updateColumnTranspose ( CoinIndexedVector * regionSparse, - CoinIndexedVector * regionSparse2) const; - //@} -#ifdef CLP_MULTIPLE_FACTORIZATIONS - /**@name Lifted from CoinFactorization */ - //@{ - /// Total number of elements in factorization - inline int numberElements ( ) const { - if (coinFactorizationA_) return coinFactorizationA_->numberElements(); - else return coinFactorizationB_->numberElements() ; - } - /// Returns address of permute region - inline int *permute ( ) const { - if (coinFactorizationA_) return coinFactorizationA_->permute(); - else return coinFactorizationB_->permute() ; - } - /// Returns address of pivotColumn region (also used for permuting) - inline int *pivotColumn ( ) const { - if (coinFactorizationA_) return coinFactorizationA_->pivotColumn(); - else return coinFactorizationB_->permute() ; - } - /// Maximum number of pivots between factorizations - inline int maximumPivots ( ) const { - if (coinFactorizationA_) return coinFactorizationA_->maximumPivots(); - else return coinFactorizationB_->maximumPivots() ; - } - /// Set maximum number of pivots between factorizations - inline void maximumPivots ( int value) { - if (coinFactorizationA_) coinFactorizationA_->maximumPivots(value); - else coinFactorizationB_->maximumPivots(value); - } - /// Returns number of pivots since factorization - inline int pivots ( ) const { - if (coinFactorizationA_) return coinFactorizationA_->pivots(); - else return coinFactorizationB_->pivots() ; - } - /// Whether larger areas needed - inline double areaFactor ( ) const { - if (coinFactorizationA_) return coinFactorizationA_->areaFactor(); - else return 0.0 ; - } - /// Set whether larger areas needed - inline void areaFactor ( double value) { - if (coinFactorizationA_) coinFactorizationA_->areaFactor(value); - } - /// Zero tolerance - inline double zeroTolerance ( ) const { - if (coinFactorizationA_) return coinFactorizationA_->zeroTolerance(); - else return coinFactorizationB_->zeroTolerance() ; - } - /// Set zero tolerance - inline void zeroTolerance ( double value) { - if (coinFactorizationA_) coinFactorizationA_->zeroTolerance(value); - else coinFactorizationB_->zeroTolerance(value); - } - /// Set tolerances to safer of existing and given - void saferTolerances ( double zeroTolerance, double pivotTolerance); - /** get sparse threshold */ - inline int sparseThreshold ( ) const { - if (coinFactorizationA_) return coinFactorizationA_->sparseThreshold(); - else return 0 ; - } - /** Set sparse threshold */ - inline void sparseThreshold ( int value) { - if (coinFactorizationA_) coinFactorizationA_->sparseThreshold(value); - } - /// Returns status - inline int status ( ) const { - if (coinFactorizationA_) return coinFactorizationA_->status(); - else return coinFactorizationB_->status() ; - } - /// Sets status - inline void setStatus ( int value) { - if (coinFactorizationA_) coinFactorizationA_->setStatus(value); - else coinFactorizationB_->setStatus(value) ; - } - /// Returns number of dense rows - inline int numberDense() const { - if (coinFactorizationA_) return coinFactorizationA_->numberDense(); - else return 0 ; - } -#if 1 - /// Returns number in U area - inline CoinBigIndex numberElementsU ( ) const { - if (coinFactorizationA_) return coinFactorizationA_->numberElementsU(); - else return -1 ; - } - /// Returns number in L area - inline CoinBigIndex numberElementsL ( ) const { - if (coinFactorizationA_) return coinFactorizationA_->numberElementsL(); - else return -1 ; - } - /// Returns number in R area - inline CoinBigIndex numberElementsR ( ) const { - if (coinFactorizationA_) return coinFactorizationA_->numberElementsR(); - else return 0 ; - } -#endif - bool timeToRefactorize() const; -#if CLP_FACTORIZATION_NEW_TIMING>1 - void statsRefactor(char when) const; -#endif - /// Level of detail of messages - inline int messageLevel ( ) const { - if (coinFactorizationA_) return coinFactorizationA_->messageLevel(); - else return 1 ; - } - /// Set level of detail of messages - inline void messageLevel ( int value) { - if (coinFactorizationA_) coinFactorizationA_->messageLevel(value); - } - /// Get rid of all memory - inline void clearArrays() { - if (coinFactorizationA_) - coinFactorizationA_->clearArrays(); - else if (coinFactorizationB_) - coinFactorizationB_->clearArrays(); - } - /// Number of Rows after factorization - inline int numberRows ( ) const { - if (coinFactorizationA_) return coinFactorizationA_->numberRows(); - else return coinFactorizationB_->numberRows() ; - } - /// Gets dense threshold - inline int denseThreshold() const { - if (coinFactorizationA_) return coinFactorizationA_->denseThreshold(); - else return 0 ; - } - /// Sets dense threshold - inline void setDenseThreshold(int value) { - if (coinFactorizationA_) coinFactorizationA_->setDenseThreshold(value); - } - /// Pivot tolerance - inline double pivotTolerance ( ) const { - if (coinFactorizationA_) return coinFactorizationA_->pivotTolerance(); - else if (coinFactorizationB_) return coinFactorizationB_->pivotTolerance(); - return 1.0e-8 ; - } - /// Set pivot tolerance - inline void pivotTolerance ( double value) { - if (coinFactorizationA_) coinFactorizationA_->pivotTolerance(value); - else if (coinFactorizationB_) coinFactorizationB_->pivotTolerance(value); - } - /// Allows change of pivot accuracy check 1.0 == none >1.0 relaxed - inline void relaxAccuracyCheck(double value) { - if (coinFactorizationA_) coinFactorizationA_->relaxAccuracyCheck(value); - } - /** Array persistence flag - If 0 then as now (delete/new) - 1 then only do arrays if bigger needed - 2 as 1 but give a bit extra if bigger needed - */ - inline int persistenceFlag() const { - if (coinFactorizationA_) return coinFactorizationA_->persistenceFlag(); - else return 0 ; - } - inline void setPersistenceFlag(int value) { - if (coinFactorizationA_) coinFactorizationA_->setPersistenceFlag(value); - } - /// Delete all stuff (leaves as after CoinFactorization()) - inline void almostDestructor() { - if (coinFactorizationA_) - coinFactorizationA_->almostDestructor(); - else if (coinFactorizationB_) - coinFactorizationB_->clearArrays(); - } - /// Returns areaFactor but adjusted for dense - inline double adjustedAreaFactor() const { - if (coinFactorizationA_) return coinFactorizationA_->adjustedAreaFactor(); - else return 0.0 ; - } - inline void setBiasLU(int value) { - if (coinFactorizationA_) coinFactorizationA_->setBiasLU(value); - } - /// true if Forrest Tomlin update, false if PFI - inline void setForrestTomlin(bool value) { - if (coinFactorizationA_) coinFactorizationA_->setForrestTomlin(value); - } - /// Sets default values - inline void setDefaultValues() { - if (coinFactorizationA_) { - // row activities have negative sign -#ifndef COIN_FAST_CODE - coinFactorizationA_->slackValue(-1.0); -#endif - coinFactorizationA_->zeroTolerance(1.0e-13); - } - } - /// If nonzero force use of 1,dense 2,small 3,osl - void forceOtherFactorization(int which); - /// Get switch to osl if number rows <= this - inline int goOslThreshold() const { - return goOslThreshold_; - } - /// Set switch to osl if number rows <= this - inline void setGoOslThreshold(int value) { - goOslThreshold_ = value; - } - /// Get switch to dense if number rows <= this - inline int goDenseThreshold() const { - return goDenseThreshold_; - } - /// Set switch to dense if number rows <= this - inline void setGoDenseThreshold(int value) { - goDenseThreshold_ = value; - } - /// Get switch to small if number rows <= this - inline int goSmallThreshold() const { - return goSmallThreshold_; - } - /// Set switch to small if number rows <= this - inline void setGoSmallThreshold(int value) { - goSmallThreshold_ = value; - } - /// Go over to dense or small code if small enough - void goDenseOrSmall(int numberRows) ; - /// Sets factorization - void setFactorization(ClpFactorization & factorization); - /// Return 1 if dense code - inline int isDenseOrSmall() const { - return coinFactorizationB_ ? 1 : 0; - } -#else - inline bool timeToRefactorize() const { - return (pivots() * 3 > maximumPivots() * 2 && - numberElementsR() * 3 > (numberElementsL() + numberElementsU()) * 2 + 1000 && - !numberDense()); - } - /// Sets default values - inline void setDefaultValues() { - // row activities have negative sign -#ifndef COIN_FAST_CODE - slackValue(-1.0); -#endif - zeroTolerance(1.0e-13); - } - /// Go over to dense code - inline void goDense() {} -#endif - //@} - - /**@name other stuff */ - //@{ - /** makes a row copy of L for speed and to allow very sparse problems */ - void goSparse(); - /// Cleans up i.e. gets rid of network basis - void cleanUp(); - /// Says whether to redo pivot order - bool needToReorder() const; -#ifndef SLIM_CLP - /// Says if a network basis - inline bool networkBasis() const { - return (networkBasis_ != NULL); - } -#else - /// Says if a network basis - inline bool networkBasis() const { - return false; - } -#endif - /// Fills weighted row list - void getWeights(int * weights) const; - //@} - -////////////////// data ////////////////// -private: - - /**@name data */ - //@{ - /// Pointer to network basis -#ifndef SLIM_CLP - ClpNetworkBasis * networkBasis_; -#endif -#ifdef CLP_MULTIPLE_FACTORIZATIONS - /// Pointer to CoinFactorization - CoinFactorization * coinFactorizationA_; - /// Pointer to CoinOtherFactorization - CoinOtherFactorization * coinFactorizationB_; -#ifdef CLP_REUSE_ETAS - /// Pointer to model - ClpSimplex * model_; -#endif - /// If nonzero force use of 1,dense 2,small 3,osl - int forceB_; - /// Switch to osl if number rows <= this - int goOslThreshold_; - /// Switch to small if number rows <= this - int goSmallThreshold_; - /// Switch to dense if number rows <= this - int goDenseThreshold_; -#endif -#ifdef CLP_FACTORIZATION_NEW_TIMING - /// For guessing when to re-factorize - mutable double shortestAverage_; - mutable double totalInR_; - mutable double totalInIncreasingU_; - mutable int endLengthU_; - mutable int lastNumberPivots_; - mutable int effectiveStartNumberU_; -#endif - //@} -}; - -#endif |