Clp trunk
Public Types
ClpPrimalColumnSteepest Class Reference

Primal Column Pivot Steepest Edge Algorithm Class. More...

#include <ClpPrimalColumnSteepest.hpp>

Inheritance diagram for ClpPrimalColumnSteepest:
Collaboration diagram for ClpPrimalColumnSteepest:

List of all members.

Public Types

enum  Persistence { normal = 0x00, keep = 0x01 }
 enums for persistence More...

Public Member Functions

Algorithmic methods
virtual int pivotColumn (CoinIndexedVector *updates, CoinIndexedVector *spareRow1, CoinIndexedVector *spareRow2, CoinIndexedVector *spareColumn1, CoinIndexedVector *spareColumn2)
 Returns pivot column, -1 if none.
int pivotColumnOldMethod (CoinIndexedVector *updates, CoinIndexedVector *spareRow1, CoinIndexedVector *spareRow2, CoinIndexedVector *spareColumn1, CoinIndexedVector *spareColumn2)
 For quadratic or funny nonlinearities.
void justDjs (CoinIndexedVector *updates, CoinIndexedVector *spareRow2, CoinIndexedVector *spareColumn1, CoinIndexedVector *spareColumn2)
 Just update djs.
int partialPricing (CoinIndexedVector *updates, CoinIndexedVector *spareRow2, int numberWanted, int numberLook)
 Update djs doing partial pricing (dantzig)
void djsAndDevex (CoinIndexedVector *updates, CoinIndexedVector *spareRow2, CoinIndexedVector *spareColumn1, CoinIndexedVector *spareColumn2)
 Update djs, weights for Devex using djs.
void djsAndSteepest (CoinIndexedVector *updates, CoinIndexedVector *spareRow2, CoinIndexedVector *spareColumn1, CoinIndexedVector *spareColumn2)
 Update djs, weights for Steepest using djs.
void djsAndDevex2 (CoinIndexedVector *updates, CoinIndexedVector *spareRow2, CoinIndexedVector *spareColumn1, CoinIndexedVector *spareColumn2)
 Update djs, weights for Devex using pivot row.
void djsAndSteepest2 (CoinIndexedVector *updates, CoinIndexedVector *spareRow2, CoinIndexedVector *spareColumn1, CoinIndexedVector *spareColumn2)
 Update djs, weights for Steepest using pivot row.
void justDevex (CoinIndexedVector *updates, CoinIndexedVector *spareRow2, CoinIndexedVector *spareColumn1, CoinIndexedVector *spareColumn2)
 Update weights for Devex.
void justSteepest (CoinIndexedVector *updates, CoinIndexedVector *spareRow2, CoinIndexedVector *spareColumn1, CoinIndexedVector *spareColumn2)
 Update weights for Steepest.
void transposeTimes2 (const CoinIndexedVector *pi1, CoinIndexedVector *dj1, const CoinIndexedVector *pi2, CoinIndexedVector *dj2, CoinIndexedVector *spare, double scaleFactor)
 Updates two arrays for steepest.
virtual void updateWeights (CoinIndexedVector *input)
 Updates weights - part 1 - also checks accuracy.
void checkAccuracy (int sequence, double relativeTolerance, CoinIndexedVector *rowArray1, CoinIndexedVector *rowArray2)
 Checks accuracy - just for debug.
void initializeWeights ()
 Initialize weights.
virtual void saveWeights (ClpSimplex *model, int mode)
 Save weights - this may initialize weights as well mode is - 1) before factorization 2) after factorization 3) just redo infeasibilities 4) restore weights 5) at end of values pass (so need initialization)
virtual void unrollWeights ()
 Gets rid of last update.
virtual void clearArrays ()
 Gets rid of all arrays.
virtual bool looksOptimal () const
 Returns true if would not find any column.
virtual void maximumPivotsChanged ()
 Called when maximum pivots changes.
gets and sets
int mode () const
 Mode.
virtual int numberSprintColumns (int &numberIterations) const
 Returns number of extra columns for sprint algorithm - 0 means off.
virtual void switchOffSprint ()
 Switch off sprint idea.
Constructors and destructors
 ClpPrimalColumnSteepest (int mode=3)
 Default Constructor 0 is exact devex, 1 full steepest, 2 is partial exact devex 3 switches between 0 and 2 depending on factorization 4 starts as partial dantzig/devex but then may switch between 0 and 2.
 ClpPrimalColumnSteepest (const ClpPrimalColumnSteepest &rhs)
 Copy constructor.
ClpPrimalColumnSteepestoperator= (const ClpPrimalColumnSteepest &rhs)
 Assignment operator.
virtual ~ClpPrimalColumnSteepest ()
 Destructor.
virtual ClpPrimalColumnPivotclone (bool copyData=true) const
 Clone.
Private functions to deal with devex
bool reference (int i) const
 reference would be faster using ClpSimplex's status_, but I prefer to keep modularity.
void setReference (int i, bool trueFalse)
void setPersistence (Persistence life)
 Set/ get persistence.
Persistence persistence () const

Detailed Description

Primal Column Pivot Steepest Edge Algorithm Class.

See Forrest-Goldfarb paper for algorithm

Definition at line 23 of file ClpPrimalColumnSteepest.hpp.


Member Enumeration Documentation

enums for persistence

Enumerator:
normal 
keep 

Definition at line 140 of file ClpPrimalColumnSteepest.hpp.


Constructor & Destructor Documentation

ClpPrimalColumnSteepest::ClpPrimalColumnSteepest ( int  mode = 3)

Default Constructor 0 is exact devex, 1 full steepest, 2 is partial exact devex 3 switches between 0 and 2 depending on factorization 4 starts as partial dantzig/devex but then may switch between 0 and 2.

By partial exact devex is meant that the weights are updated as normal but only part of the nonbasic variables are scanned. This can be faster on very easy problems.

ClpPrimalColumnSteepest::ClpPrimalColumnSteepest ( const ClpPrimalColumnSteepest rhs)

Copy constructor.

virtual ClpPrimalColumnSteepest::~ClpPrimalColumnSteepest ( ) [virtual]

Destructor.


Member Function Documentation

virtual int ClpPrimalColumnSteepest::pivotColumn ( CoinIndexedVector *  updates,
CoinIndexedVector *  spareRow1,
CoinIndexedVector *  spareRow2,
CoinIndexedVector *  spareColumn1,
CoinIndexedVector *  spareColumn2 
) [virtual]

Returns pivot column, -1 if none.

The Packed CoinIndexedVector updates has cost updates - for normal LP that is just +-weight where a feasibility changed. It also has reduced cost from last iteration in pivot row Parts of operation split out into separate functions for profiling and speed

Implements ClpPrimalColumnPivot.

int ClpPrimalColumnSteepest::pivotColumnOldMethod ( CoinIndexedVector *  updates,
CoinIndexedVector *  spareRow1,
CoinIndexedVector *  spareRow2,
CoinIndexedVector *  spareColumn1,
CoinIndexedVector *  spareColumn2 
)

For quadratic or funny nonlinearities.

void ClpPrimalColumnSteepest::justDjs ( CoinIndexedVector *  updates,
CoinIndexedVector *  spareRow2,
CoinIndexedVector *  spareColumn1,
CoinIndexedVector *  spareColumn2 
)

Just update djs.

int ClpPrimalColumnSteepest::partialPricing ( CoinIndexedVector *  updates,
CoinIndexedVector *  spareRow2,
int  numberWanted,
int  numberLook 
)

Update djs doing partial pricing (dantzig)

void ClpPrimalColumnSteepest::djsAndDevex ( CoinIndexedVector *  updates,
CoinIndexedVector *  spareRow2,
CoinIndexedVector *  spareColumn1,
CoinIndexedVector *  spareColumn2 
)

Update djs, weights for Devex using djs.

void ClpPrimalColumnSteepest::djsAndSteepest ( CoinIndexedVector *  updates,
CoinIndexedVector *  spareRow2,
CoinIndexedVector *  spareColumn1,
CoinIndexedVector *  spareColumn2 
)

Update djs, weights for Steepest using djs.

void ClpPrimalColumnSteepest::djsAndDevex2 ( CoinIndexedVector *  updates,
CoinIndexedVector *  spareRow2,
CoinIndexedVector *  spareColumn1,
CoinIndexedVector *  spareColumn2 
)

Update djs, weights for Devex using pivot row.

void ClpPrimalColumnSteepest::djsAndSteepest2 ( CoinIndexedVector *  updates,
CoinIndexedVector *  spareRow2,
CoinIndexedVector *  spareColumn1,
CoinIndexedVector *  spareColumn2 
)

Update djs, weights for Steepest using pivot row.

void ClpPrimalColumnSteepest::justDevex ( CoinIndexedVector *  updates,
CoinIndexedVector *  spareRow2,
CoinIndexedVector *  spareColumn1,
CoinIndexedVector *  spareColumn2 
)

Update weights for Devex.

void ClpPrimalColumnSteepest::justSteepest ( CoinIndexedVector *  updates,
CoinIndexedVector *  spareRow2,
CoinIndexedVector *  spareColumn1,
CoinIndexedVector *  spareColumn2 
)

Update weights for Steepest.

void ClpPrimalColumnSteepest::transposeTimes2 ( const CoinIndexedVector *  pi1,
CoinIndexedVector *  dj1,
const CoinIndexedVector *  pi2,
CoinIndexedVector *  dj2,
CoinIndexedVector *  spare,
double  scaleFactor 
)

Updates two arrays for steepest.

virtual void ClpPrimalColumnSteepest::updateWeights ( CoinIndexedVector *  input) [virtual]

Updates weights - part 1 - also checks accuracy.

Reimplemented from ClpPrimalColumnPivot.

void ClpPrimalColumnSteepest::checkAccuracy ( int  sequence,
double  relativeTolerance,
CoinIndexedVector *  rowArray1,
CoinIndexedVector *  rowArray2 
)

Checks accuracy - just for debug.

void ClpPrimalColumnSteepest::initializeWeights ( )

Initialize weights.

virtual void ClpPrimalColumnSteepest::saveWeights ( ClpSimplex model,
int  mode 
) [virtual]

Save weights - this may initialize weights as well mode is - 1) before factorization 2) after factorization 3) just redo infeasibilities 4) restore weights 5) at end of values pass (so need initialization)

Implements ClpPrimalColumnPivot.

virtual void ClpPrimalColumnSteepest::unrollWeights ( ) [virtual]

Gets rid of last update.

virtual void ClpPrimalColumnSteepest::clearArrays ( ) [virtual]

Gets rid of all arrays.

Reimplemented from ClpPrimalColumnPivot.

virtual bool ClpPrimalColumnSteepest::looksOptimal ( ) const [virtual]

Returns true if would not find any column.

Reimplemented from ClpPrimalColumnPivot.

virtual void ClpPrimalColumnSteepest::maximumPivotsChanged ( ) [virtual]

Called when maximum pivots changes.

Reimplemented from ClpPrimalColumnPivot.

int ClpPrimalColumnSteepest::mode ( ) const [inline]

Mode.

Definition at line 126 of file ClpPrimalColumnSteepest.hpp.

virtual int ClpPrimalColumnSteepest::numberSprintColumns ( int &  numberIterations) const [virtual]

Returns number of extra columns for sprint algorithm - 0 means off.

Also number of iterations before recompute

Reimplemented from ClpPrimalColumnPivot.

virtual void ClpPrimalColumnSteepest::switchOffSprint ( ) [virtual]

Switch off sprint idea.

Reimplemented from ClpPrimalColumnPivot.

ClpPrimalColumnSteepest& ClpPrimalColumnSteepest::operator= ( const ClpPrimalColumnSteepest rhs)

Assignment operator.

virtual ClpPrimalColumnPivot* ClpPrimalColumnSteepest::clone ( bool  copyData = true) const [virtual]

Clone.

Implements ClpPrimalColumnPivot.

bool ClpPrimalColumnSteepest::reference ( int  i) const [inline]

reference would be faster using ClpSimplex's status_, but I prefer to keep modularity.

Definition at line 175 of file ClpPrimalColumnSteepest.hpp.

void ClpPrimalColumnSteepest::setReference ( int  i,
bool  trueFalse 
) [inline]

Definition at line 178 of file ClpPrimalColumnSteepest.hpp.

void ClpPrimalColumnSteepest::setPersistence ( Persistence  life) [inline]

Set/ get persistence.

Definition at line 187 of file ClpPrimalColumnSteepest.hpp.

Persistence ClpPrimalColumnSteepest::persistence ( ) const [inline]

Definition at line 190 of file ClpPrimalColumnSteepest.hpp.


The documentation for this class was generated from the following file:
 All Classes Files Functions Variables Typedefs Enumerations Enumerator Friends Defines