AbcPrimalColumnSteepest Class Reference

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

#include <AbcPrimalColumnSteepest.hpp>

Inheritance diagram for AbcPrimalColumnSteepest:
Inheritance graph
[legend]
Collaboration diagram for AbcPrimalColumnSteepest:
Collaboration graph
[legend]

List of all members.

Public Types

enum  Persistence { normal = 0x00, keep = 0x01 }
 

enums for persistence

More...

Public Member Functions

Algorithmic methods



virtual int pivotColumn (CoinPartitionedVector *updates, CoinPartitionedVector *spareRow2, CoinPartitionedVector *spareColumn1)
 Returns pivot column, -1 if none.
void justDjs (CoinIndexedVector *updates, CoinIndexedVector *spareColumn1)
 Just update djs.
int partialPricing (CoinIndexedVector *updates, int numberWanted, int numberLook)
 Update djs doing partial pricing (dantzig).
void djsAndDevex (CoinIndexedVector *updates, CoinIndexedVector *spareRow2, CoinIndexedVector *spareColumn1)
 Update djs, weights for Devex using djs.
void djsAndDevex2 (CoinIndexedVector *updates, CoinIndexedVector *spareColumn1)
 Update djs, weights for Devex using pivot row.
void justDevex (CoinIndexedVector *updates, CoinIndexedVector *spareColumn1)
 Update weights for Devex.
int doSteepestWork (CoinPartitionedVector *updates, CoinPartitionedVector *spareRow2, CoinPartitionedVector *spareColumn1, int type)
 Does steepest work type - 0 - just djs 1 - just steepest 2 - both using scaleFactor 3 - both using extra array.
virtual void updateWeights (CoinIndexedVector *input)
 Updates weights - part 1 - also checks accuracy.
void checkAccuracy (int sequence, double relativeTolerance, CoinIndexedVector *rowArray1)
 Checks accuracy - just for debug.
void initializeWeights ()
 Initialize weights.
virtual void saveWeights (AbcSimplex *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.
Constructors and destructors



 AbcPrimalColumnSteepest (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.
 AbcPrimalColumnSteepest (const AbcPrimalColumnSteepest &rhs)
 Copy constructor.
AbcPrimalColumnSteepestoperator= (const AbcPrimalColumnSteepest &rhs)
 Assignment operator.
virtual ~AbcPrimalColumnSteepest ()
 Destructor.
virtual AbcPrimalColumnPivotclone (bool copyData=true) const
 Clone.
Private functions to deal with devex



bool reference (int i) const
 reference would be faster using AbcSimplex's status_, but I prefer to keep modularity.
void setReference (int i, bool trueFalse)
 reference would be faster using AbcSimplex's status_, but I prefer to keep modularity.
void setPersistence (Persistence life)
 Set/ get persistence.
Persistence persistence () const
 reference would be faster using AbcSimplex's status_, but I prefer to keep modularity.

Private Attributes

Private member data



double devex_
 weight array
double * weights_
 weight array
CoinIndexedVectorinfeasible_
 square of infeasibility array (just for infeasible columns)
CoinIndexedVectoralternateWeights_
 alternate weight array (so we can unroll)
double * savedWeights_
 save weight array (so we can use checkpoint)
unsigned int * reference_
 weight array
int state_
 Status 0) Normal -1) Needs initialization 1) Weights are stored by sequence number.
int mode_
 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.
Persistence persistence_
 Life of weights.
int numberSwitched_
 Number of times switched from partial dantzig to 0/2.
int pivotSequence_
 weight array
int savedPivotSequence_
 weight array
int savedSequenceOut_
 weight array
int lastRectified_
 weight array
int sizeFactorization_
 weight array

Detailed Description

Primal Column Pivot Steepest Edge Algorithm Class.

See Forrest-Goldfarb paper for algorithm

Definition at line 23 of file AbcPrimalColumnSteepest.hpp.


Member Enumeration Documentation

enums for persistence

Enumerator:
normal 
keep 

Definition at line 108 of file AbcPrimalColumnSteepest.hpp.


Constructor & Destructor Documentation

AbcPrimalColumnSteepest::AbcPrimalColumnSteepest ( 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.

AbcPrimalColumnSteepest::AbcPrimalColumnSteepest ( const AbcPrimalColumnSteepest rhs  ) 

Copy constructor.

virtual AbcPrimalColumnSteepest::~AbcPrimalColumnSteepest (  )  [virtual]

Destructor.


Member Function Documentation

virtual int AbcPrimalColumnSteepest::pivotColumn ( CoinPartitionedVector updates,
CoinPartitionedVector spareRow2,
CoinPartitionedVector spareColumn1 
) [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 AbcPrimalColumnPivot.

void AbcPrimalColumnSteepest::justDjs ( CoinIndexedVector updates,
CoinIndexedVector spareColumn1 
)

Just update djs.

int AbcPrimalColumnSteepest::partialPricing ( CoinIndexedVector updates,
int  numberWanted,
int  numberLook 
)

Update djs doing partial pricing (dantzig).

void AbcPrimalColumnSteepest::djsAndDevex ( CoinIndexedVector updates,
CoinIndexedVector spareRow2,
CoinIndexedVector spareColumn1 
)

Update djs, weights for Devex using djs.

void AbcPrimalColumnSteepest::djsAndDevex2 ( CoinIndexedVector updates,
CoinIndexedVector spareColumn1 
)

Update djs, weights for Devex using pivot row.

void AbcPrimalColumnSteepest::justDevex ( CoinIndexedVector updates,
CoinIndexedVector spareColumn1 
)

Update weights for Devex.

int AbcPrimalColumnSteepest::doSteepestWork ( CoinPartitionedVector updates,
CoinPartitionedVector spareRow2,
CoinPartitionedVector spareColumn1,
int  type 
)

Does steepest work type - 0 - just djs 1 - just steepest 2 - both using scaleFactor 3 - both using extra array.

virtual void AbcPrimalColumnSteepest::updateWeights ( CoinIndexedVector input  )  [virtual]

Updates weights - part 1 - also checks accuracy.

Reimplemented from AbcPrimalColumnPivot.

void AbcPrimalColumnSteepest::checkAccuracy ( int  sequence,
double  relativeTolerance,
CoinIndexedVector rowArray1 
)

Checks accuracy - just for debug.

void AbcPrimalColumnSteepest::initializeWeights (  ) 

Initialize weights.

virtual void AbcPrimalColumnSteepest::saveWeights ( AbcSimplex 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 AbcPrimalColumnPivot.

virtual void AbcPrimalColumnSteepest::unrollWeights (  )  [virtual]

Gets rid of last update.

virtual void AbcPrimalColumnSteepest::clearArrays (  )  [virtual]

Gets rid of all arrays.

Reimplemented from AbcPrimalColumnPivot.

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

Returns true if would not find any column.

Reimplemented from AbcPrimalColumnPivot.

virtual void AbcPrimalColumnSteepest::maximumPivotsChanged (  )  [virtual]

Called when maximum pivots changes.

Reimplemented from AbcPrimalColumnPivot.

int AbcPrimalColumnSteepest::mode (  )  const [inline]

Mode.

Definition at line 101 of file AbcPrimalColumnSteepest.hpp.

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

Assignment operator.

Reimplemented from AbcPrimalColumnPivot.

virtual AbcPrimalColumnPivot* AbcPrimalColumnSteepest::clone ( bool  copyData = true  )  const [virtual]

Clone.

Implements AbcPrimalColumnPivot.

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

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

Definition at line 143 of file AbcPrimalColumnSteepest.hpp.

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

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

Definition at line 146 of file AbcPrimalColumnSteepest.hpp.

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

Set/ get persistence.

Definition at line 155 of file AbcPrimalColumnSteepest.hpp.

Persistence AbcPrimalColumnSteepest::persistence (  )  const [inline]

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

Definition at line 158 of file AbcPrimalColumnSteepest.hpp.


Member Data Documentation

weight array

Definition at line 168 of file AbcPrimalColumnSteepest.hpp.

weight array

Definition at line 170 of file AbcPrimalColumnSteepest.hpp.

square of infeasibility array (just for infeasible columns)

Definition at line 172 of file AbcPrimalColumnSteepest.hpp.

alternate weight array (so we can unroll)

Definition at line 174 of file AbcPrimalColumnSteepest.hpp.

save weight array (so we can use checkpoint)

Definition at line 176 of file AbcPrimalColumnSteepest.hpp.

unsigned int* AbcPrimalColumnSteepest::reference_ [private]

weight array

Definition at line 178 of file AbcPrimalColumnSteepest.hpp.

Status 0) Normal -1) Needs initialization 1) Weights are stored by sequence number.

Definition at line 184 of file AbcPrimalColumnSteepest.hpp.

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.

5 is always partial dantzig 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.

New dubious option is >=10 which does mini-sprint

Definition at line 197 of file AbcPrimalColumnSteepest.hpp.

Life of weights.

Definition at line 199 of file AbcPrimalColumnSteepest.hpp.

Number of times switched from partial dantzig to 0/2.

Definition at line 201 of file AbcPrimalColumnSteepest.hpp.

weight array

Definition at line 203 of file AbcPrimalColumnSteepest.hpp.

weight array

Definition at line 205 of file AbcPrimalColumnSteepest.hpp.

weight array

Definition at line 207 of file AbcPrimalColumnSteepest.hpp.

weight array

Definition at line 209 of file AbcPrimalColumnSteepest.hpp.

weight array

Definition at line 211 of file AbcPrimalColumnSteepest.hpp.


The documentation for this class was generated from the following file:

Generated on 5 Apr 2015 by  doxygen 1.6.1