Public Types
ClpDynamicMatrix Class Reference

This implements a dynamic matrix when we have a limit on the number of "interesting rows". More...

#include <ClpDynamicMatrix.hpp>

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

List of all members.

Public Types

enum  DynamicStatus { soloKey = 0x00, inSmall = 0x01, atUpperBound = 0x02, atLowerBound = 0x03 }
 enums for status of various sorts More...

Public Member Functions

Main functions provided
virtual void partialPricing (ClpSimplex *model, double start, double end, int &bestSequence, int &numberWanted)
 Partial pricing.
virtual int updatePivot (ClpSimplex *model, double oldInValue, double oldOutValue)
 update information for a pivot (and effective rhs)
virtual double * rhsOffset (ClpSimplex *model, bool forceRefresh=false, bool check=false)
 Returns effective RHS offset if it is being used.
virtual void times (double scalar, const double *x, double *y) const
 Return y + A * scalar *x in y.
void modifyOffset (int sequence, double amount)
 Modifies rhs offset.
double keyValue (int iSet) const
 Gets key value when none in small.
virtual void dualExpanded (ClpSimplex *model, CoinIndexedVector *array, double *other, int mode)
 mode=0 - Set up before "updateTranspose" and "transposeTimes" for duals using extended updates array (and may use other if dual values pass) mode=1 - Update dual solution after "transposeTimes" using extended rows.
virtual int generalExpanded (ClpSimplex *model, int mode, int &number)
 mode=0 - Create list of non-key basics in pivotVariable_ using number as numberBasic in and out mode=1 - Set all key variables as basic mode=2 - return number extra rows needed, number gives maximum number basic mode=3 - before replaceColumn mode=4 - return 1 if can do primal, 2 if dual, 3 if both mode=5 - save any status stuff (when in good state) mode=6 - restore status stuff mode=7 - flag given variable (normally sequenceIn) mode=8 - unflag all variables mode=9 - synchronize costs mode=10 - return 1 if there may be changing bounds on variable (column generation) mode=11 - make sure set is clean (used when a variable rejected - but not flagged) mode=12 - after factorize but before permute stuff mode=13 - at end of simplex to delete stuff
virtual int refresh (ClpSimplex *model)
 Purely for column generation and similar ideas.
virtual void createVariable (ClpSimplex *model, int &bestSequence)
 Creates a variable.
virtual double reducedCost (ClpSimplex *model, int sequence) const
 Returns reduced cost of a variable.
void gubCrash ()
 Does gub crash.
void initialProblem ()
 Populates initial matrix from dynamic status.
int addColumn (int numberEntries, const int *row, const double *element, double cost, double lower, double upper, int iSet, DynamicStatus status)
 Adds in a column to gub structure (called from descendant) and returns sequence.
virtual void packDown (const int *, int)
 If addColumn forces compression then this allows descendant to know what to do.
double columnLower (int sequence) const
 Gets lower bound (to simplify coding)
double columnUpper (int sequence) const
 Gets upper bound (to simplify coding)
Constructors, destructor
 ClpDynamicMatrix ()
 Default constructor.
 ClpDynamicMatrix (ClpSimplex *model, int numberSets, int numberColumns, const int *starts, const double *lower, const double *upper, const int *startColumn, const int *row, const double *element, const double *cost, const double *columnLower=NULL, const double *columnUpper=NULL, const unsigned char *status=NULL, const unsigned char *dynamicStatus=NULL)
 This is the real constructor.
virtual ~ClpDynamicMatrix ()
 Destructor.
Copy method
 ClpDynamicMatrix (const ClpDynamicMatrix &)
 The copy constructor.
 ClpDynamicMatrix (const CoinPackedMatrix &)
 The copy constructor from an CoinPackedMatrix.
ClpDynamicMatrixoperator= (const ClpDynamicMatrix &)
 The copy constructor.
virtual ClpMatrixBaseclone () const
 Clone.
gets and sets
ClpSimplex::Status getStatus (int sequence) const
 Status of row slacks.
void setStatus (int sequence, ClpSimplex::Status status)
 Status of row slacks.
int numberSets () const
 Number of sets (dynamic rows)
bool flagged (int i) const
 Whether flagged.
void setFlagged (int i)
 Status of row slacks.
void unsetFlagged (int i)
 Status of row slacks.
void setDynamicStatus (int sequence, DynamicStatus status)
 Status of row slacks.
DynamicStatus getDynamicStatus (int sequence) const
 Status of row slacks.
double objectiveOffset () const
 Saved value of objective offset.
CoinBigIndex * startColumn () const
 Starts of each column.
int * row () const
 rows
double * element () const
 elements
double * cost () const
 costs
int * id () const
 ids of active columns (just index here)
double * columnLower () const
 Optional lower bounds on columns.
double * columnUpper () const
 Optional upper bounds on columns.
double * lowerSet () const
 Lower bounds on sets.
double * upperSet () const
 Upper bounds on sets.
int numberGubColumns () const
 size
int firstAvailable () const
 first free
int firstDynamic () const
 first dynamic
int lastDynamic () const
 number of columns in dynamic model
int numberStaticRows () const
 number of rows in original model
int numberElements () const
 size of working matrix (max)
int * keyVariable () const
 Status of row slacks.
void switchOffCheck ()
 Switches off dj checking each factorization (for BIG models)
unsigned char * gubRowStatus () const
 Status region for gub slacks.
unsigned char * dynamicStatus () const
 Status region for gub variables.
int whichSet (int sequence) const
 Returns which set a variable is in.

Protected Attributes

Data members

The data members are protected to allow access for derived classes.

double sumDualInfeasibilities_
 Sum of dual infeasibilities.
double sumPrimalInfeasibilities_
 Sum of primal infeasibilities.
double sumOfRelaxedDualInfeasibilities_
 Sum of Dual infeasibilities using tolerance based on error in duals.
double sumOfRelaxedPrimalInfeasibilities_
 Sum of Primal infeasibilities using tolerance based on error in primals.
double savedBestGubDual_
 Saved best dual on gub row in pricing.
int savedBestSet_
 Saved best set in pricing.
int * backToPivotRow_
 Backward pointer to pivot row !!!
int * keyVariable_
 Key variable of set (only accurate if none in small problem)
int * toIndex_
 Backward pointer to extra row.
int * fromIndex_
 Sum of dual infeasibilities.
int numberSets_
 Number of sets (dynamic rows)
int numberActiveSets_
 Number of active sets.
double objectiveOffset_
 Saved value of objective offset.
double * lowerSet_
 Lower bounds on sets.
double * upperSet_
 Upper bounds on sets.
unsigned char * status_
 Status of slack on set.
ClpSimplexmodel_
 Pointer back to model.
int firstAvailable_
 first free
int firstAvailableBefore_
 first free when iteration started
int firstDynamic_
 first dynamic
int lastDynamic_
 number of columns in dynamic model
int numberStaticRows_
 number of rows in original model
int numberElements_
 size of working matrix (max)
int numberDualInfeasibilities_
 Number of dual infeasibilities.
int numberPrimalInfeasibilities_
 Number of primal infeasibilities.
int noCheck_
 If pricing will declare victory (i.e.
double infeasibilityWeight_
 Infeasibility weight when last full pass done.
int numberGubColumns_
 size
int maximumGubColumns_
 current maximum number of columns (then compress)
int maximumElements_
 current maximum number of elemnts (then compress)
int * startSet_
 Start of each set.
int * next_
 next in chain
CoinBigIndex * startColumn_
 Starts of each column.
int * row_
 rows
double * element_
 elements
double * cost_
 costs
int * id_
 ids of active columns (just index here)
unsigned char * dynamicStatus_
 for status and which bound
double * columnLower_
 Optional lower bounds on columns.
double * columnUpper_
 Optional upper bounds on columns.

Detailed Description

This implements a dynamic matrix when we have a limit on the number of "interesting rows".

This version inherits from ClpPackedMatrix and knows that the real matrix is gub. A later version could use shortest path to generate columns.

Definition at line 18 of file ClpDynamicMatrix.hpp.


Member Enumeration Documentation

enums for status of various sorts

Enumerator:
soloKey 
inSmall 
atUpperBound 
atLowerBound 

Definition at line 22 of file ClpDynamicMatrix.hpp.


Constructor & Destructor Documentation

Default constructor.

ClpDynamicMatrix::ClpDynamicMatrix ( ClpSimplex model,
int  numberSets,
int  numberColumns,
const int *  starts,
const double *  lower,
const double *  upper,
const int *  startColumn,
const int *  row,
const double *  element,
const double *  cost,
const double *  columnLower = NULL,
const double *  columnUpper = NULL,
const unsigned char *  status = NULL,
const unsigned char *  dynamicStatus = NULL 
)

This is the real constructor.

It assumes factorization frequency will not be changed. This resizes model !!!! The contents of original matrix in model will be taken over and original matrix will be sanitized so can be deleted (to avoid a very small memory leak)

virtual ClpDynamicMatrix::~ClpDynamicMatrix ( ) [virtual]

Destructor.

The copy constructor.

ClpDynamicMatrix::ClpDynamicMatrix ( const CoinPackedMatrix &  )

The copy constructor from an CoinPackedMatrix.


Member Function Documentation

virtual void ClpDynamicMatrix::partialPricing ( ClpSimplex model,
double  start,
double  end,
int &  bestSequence,
int &  numberWanted 
) [virtual]

Partial pricing.

Reimplemented from ClpPackedMatrix.

Reimplemented in ClpDynamicExampleMatrix.

virtual int ClpDynamicMatrix::updatePivot ( ClpSimplex model,
double  oldInValue,
double  oldOutValue 
) [virtual]

update information for a pivot (and effective rhs)

Reimplemented from ClpMatrixBase.

virtual double* ClpDynamicMatrix::rhsOffset ( ClpSimplex model,
bool  forceRefresh = false,
bool  check = false 
) [virtual]

Returns effective RHS offset if it is being used.

This is used for long problems or big dynamic or anywhere where going through full columns is expensive. This may re-compute

Reimplemented from ClpMatrixBase.

virtual void ClpDynamicMatrix::times ( double  scalar,
const double *  x,
double *  y 
) const [virtual]

Return y + A * scalar *x in y.

Precondition:
x must be of size numColumns()
y must be of size numRows()

Reimplemented from ClpPackedMatrix.

void ClpDynamicMatrix::modifyOffset ( int  sequence,
double  amount 
)

Modifies rhs offset.

double ClpDynamicMatrix::keyValue ( int  iSet) const

Gets key value when none in small.

virtual void ClpDynamicMatrix::dualExpanded ( ClpSimplex model,
CoinIndexedVector *  array,
double *  other,
int  mode 
) [virtual]

mode=0 - Set up before "updateTranspose" and "transposeTimes" for duals using extended updates array (and may use other if dual values pass) mode=1 - Update dual solution after "transposeTimes" using extended rows.

mode=2 - Compute all djs and compute key dual infeasibilities mode=3 - Report on key dual infeasibilities mode=4 - Modify before updateTranspose in partial pricing

Reimplemented from ClpMatrixBase.

virtual int ClpDynamicMatrix::generalExpanded ( ClpSimplex model,
int  mode,
int &  number 
) [virtual]

mode=0 - Create list of non-key basics in pivotVariable_ using number as numberBasic in and out mode=1 - Set all key variables as basic mode=2 - return number extra rows needed, number gives maximum number basic mode=3 - before replaceColumn mode=4 - return 1 if can do primal, 2 if dual, 3 if both mode=5 - save any status stuff (when in good state) mode=6 - restore status stuff mode=7 - flag given variable (normally sequenceIn) mode=8 - unflag all variables mode=9 - synchronize costs mode=10 - return 1 if there may be changing bounds on variable (column generation) mode=11 - make sure set is clean (used when a variable rejected - but not flagged) mode=12 - after factorize but before permute stuff mode=13 - at end of simplex to delete stuff

Reimplemented from ClpMatrixBase.

virtual int ClpDynamicMatrix::refresh ( ClpSimplex model) [virtual]

Purely for column generation and similar ideas.

Allows matrix and any bounds or costs to be updated (sensibly). Returns non-zero if any changes.

Reimplemented from ClpPackedMatrix.

virtual void ClpDynamicMatrix::createVariable ( ClpSimplex model,
int &  bestSequence 
) [virtual]

Creates a variable.

This is called after partial pricing and will modify matrix. Will update bestSequence.

Reimplemented from ClpMatrixBase.

Reimplemented in ClpDynamicExampleMatrix.

virtual double ClpDynamicMatrix::reducedCost ( ClpSimplex model,
int  sequence 
) const [virtual]

Returns reduced cost of a variable.

Reimplemented from ClpMatrixBase.

Does gub crash.

Populates initial matrix from dynamic status.

int ClpDynamicMatrix::addColumn ( int  numberEntries,
const int *  row,
const double *  element,
double  cost,
double  lower,
double  upper,
int  iSet,
DynamicStatus  status 
)

Adds in a column to gub structure (called from descendant) and returns sequence.

virtual void ClpDynamicMatrix::packDown ( const int *  ,
int   
) [inline, virtual]

If addColumn forces compression then this allows descendant to know what to do.

If >=0 then entry stayed in, if -1 then entry went out to lower bound.of zero. Entries at upper bound (really nonzero) never go out (at present).

Reimplemented in ClpDynamicExampleMatrix.

Definition at line 105 of file ClpDynamicMatrix.hpp.

double ClpDynamicMatrix::columnLower ( int  sequence) const [inline]

Gets lower bound (to simplify coding)

Definition at line 107 of file ClpDynamicMatrix.hpp.

double ClpDynamicMatrix::columnUpper ( int  sequence) const [inline]

Gets upper bound (to simplify coding)

Definition at line 112 of file ClpDynamicMatrix.hpp.

ClpDynamicMatrix& ClpDynamicMatrix::operator= ( const ClpDynamicMatrix )

The copy constructor.

virtual ClpMatrixBase* ClpDynamicMatrix::clone ( ) const [virtual]

Clone.

Reimplemented from ClpPackedMatrix.

Reimplemented in ClpDynamicExampleMatrix.

ClpSimplex::Status ClpDynamicMatrix::getStatus ( int  sequence) const [inline]

Status of row slacks.

Definition at line 158 of file ClpDynamicMatrix.hpp.

void ClpDynamicMatrix::setStatus ( int  sequence,
ClpSimplex::Status  status 
) [inline]

Status of row slacks.

Definition at line 161 of file ClpDynamicMatrix.hpp.

int ClpDynamicMatrix::numberSets ( ) const [inline]

Number of sets (dynamic rows)

Definition at line 167 of file ClpDynamicMatrix.hpp.

bool ClpDynamicMatrix::flagged ( int  i) const [inline]

Whether flagged.

Definition at line 171 of file ClpDynamicMatrix.hpp.

void ClpDynamicMatrix::setFlagged ( int  i) [inline]

Status of row slacks.

Definition at line 174 of file ClpDynamicMatrix.hpp.

void ClpDynamicMatrix::unsetFlagged ( int  i) [inline]

Status of row slacks.

Reimplemented in ClpDynamicExampleMatrix.

Definition at line 177 of file ClpDynamicMatrix.hpp.

void ClpDynamicMatrix::setDynamicStatus ( int  sequence,
DynamicStatus  status 
) [inline]

Status of row slacks.

Definition at line 180 of file ClpDynamicMatrix.hpp.

DynamicStatus ClpDynamicMatrix::getDynamicStatus ( int  sequence) const [inline]

Status of row slacks.

Definition at line 185 of file ClpDynamicMatrix.hpp.

double ClpDynamicMatrix::objectiveOffset ( ) const [inline]

Saved value of objective offset.

Definition at line 189 of file ClpDynamicMatrix.hpp.

CoinBigIndex* ClpDynamicMatrix::startColumn ( ) const [inline]

Starts of each column.

Definition at line 193 of file ClpDynamicMatrix.hpp.

int* ClpDynamicMatrix::row ( ) const [inline]

rows

Definition at line 197 of file ClpDynamicMatrix.hpp.

double* ClpDynamicMatrix::element ( ) const [inline]

elements

Definition at line 201 of file ClpDynamicMatrix.hpp.

double* ClpDynamicMatrix::cost ( ) const [inline]

costs

Definition at line 205 of file ClpDynamicMatrix.hpp.

int* ClpDynamicMatrix::id ( ) const [inline]

ids of active columns (just index here)

Definition at line 209 of file ClpDynamicMatrix.hpp.

double* ClpDynamicMatrix::columnLower ( ) const [inline]

Optional lower bounds on columns.

Definition at line 213 of file ClpDynamicMatrix.hpp.

double* ClpDynamicMatrix::columnUpper ( ) const [inline]

Optional upper bounds on columns.

Definition at line 217 of file ClpDynamicMatrix.hpp.

double* ClpDynamicMatrix::lowerSet ( ) const [inline]

Lower bounds on sets.

Definition at line 221 of file ClpDynamicMatrix.hpp.

double* ClpDynamicMatrix::upperSet ( ) const [inline]

Upper bounds on sets.

Definition at line 225 of file ClpDynamicMatrix.hpp.

int ClpDynamicMatrix::numberGubColumns ( ) const [inline]

size

Definition at line 229 of file ClpDynamicMatrix.hpp.

int ClpDynamicMatrix::firstAvailable ( ) const [inline]

first free

Definition at line 233 of file ClpDynamicMatrix.hpp.

int ClpDynamicMatrix::firstDynamic ( ) const [inline]

first dynamic

Definition at line 237 of file ClpDynamicMatrix.hpp.

int ClpDynamicMatrix::lastDynamic ( ) const [inline]

number of columns in dynamic model

Definition at line 241 of file ClpDynamicMatrix.hpp.

int ClpDynamicMatrix::numberStaticRows ( ) const [inline]

number of rows in original model

Definition at line 245 of file ClpDynamicMatrix.hpp.

int ClpDynamicMatrix::numberElements ( ) const [inline]

size of working matrix (max)

Definition at line 249 of file ClpDynamicMatrix.hpp.

int* ClpDynamicMatrix::keyVariable ( ) const [inline]

Status of row slacks.

Definition at line 252 of file ClpDynamicMatrix.hpp.

Switches off dj checking each factorization (for BIG models)

unsigned char* ClpDynamicMatrix::gubRowStatus ( ) const [inline]

Status region for gub slacks.

Definition at line 258 of file ClpDynamicMatrix.hpp.

unsigned char* ClpDynamicMatrix::dynamicStatus ( ) const [inline]

Status region for gub variables.

Definition at line 262 of file ClpDynamicMatrix.hpp.

int ClpDynamicMatrix::whichSet ( int  sequence) const

Returns which set a variable is in.


Member Data Documentation

Sum of dual infeasibilities.

Definition at line 275 of file ClpDynamicMatrix.hpp.

Sum of primal infeasibilities.

Definition at line 277 of file ClpDynamicMatrix.hpp.

Sum of Dual infeasibilities using tolerance based on error in duals.

Definition at line 279 of file ClpDynamicMatrix.hpp.

Sum of Primal infeasibilities using tolerance based on error in primals.

Definition at line 281 of file ClpDynamicMatrix.hpp.

Saved best dual on gub row in pricing.

Definition at line 283 of file ClpDynamicMatrix.hpp.

Saved best set in pricing.

Definition at line 285 of file ClpDynamicMatrix.hpp.

Backward pointer to pivot row !!!

Definition at line 287 of file ClpDynamicMatrix.hpp.

int* ClpDynamicMatrix::keyVariable_ [mutable, protected]

Key variable of set (only accurate if none in small problem)

Definition at line 289 of file ClpDynamicMatrix.hpp.

int* ClpDynamicMatrix::toIndex_ [protected]

Backward pointer to extra row.

Definition at line 291 of file ClpDynamicMatrix.hpp.

int* ClpDynamicMatrix::fromIndex_ [protected]

Sum of dual infeasibilities.

Definition at line 293 of file ClpDynamicMatrix.hpp.

Number of sets (dynamic rows)

Definition at line 295 of file ClpDynamicMatrix.hpp.

Number of active sets.

Definition at line 297 of file ClpDynamicMatrix.hpp.

Saved value of objective offset.

Definition at line 299 of file ClpDynamicMatrix.hpp.

double* ClpDynamicMatrix::lowerSet_ [protected]

Lower bounds on sets.

Definition at line 301 of file ClpDynamicMatrix.hpp.

double* ClpDynamicMatrix::upperSet_ [protected]

Upper bounds on sets.

Definition at line 303 of file ClpDynamicMatrix.hpp.

unsigned char* ClpDynamicMatrix::status_ [protected]

Status of slack on set.

Definition at line 305 of file ClpDynamicMatrix.hpp.

Pointer back to model.

Definition at line 307 of file ClpDynamicMatrix.hpp.

first free

Definition at line 309 of file ClpDynamicMatrix.hpp.

first free when iteration started

Definition at line 311 of file ClpDynamicMatrix.hpp.

first dynamic

Definition at line 313 of file ClpDynamicMatrix.hpp.

number of columns in dynamic model

Definition at line 315 of file ClpDynamicMatrix.hpp.

number of rows in original model

Definition at line 317 of file ClpDynamicMatrix.hpp.

size of working matrix (max)

Definition at line 319 of file ClpDynamicMatrix.hpp.

Number of dual infeasibilities.

Definition at line 321 of file ClpDynamicMatrix.hpp.

Number of primal infeasibilities.

Definition at line 323 of file ClpDynamicMatrix.hpp.

int ClpDynamicMatrix::noCheck_ [protected]

If pricing will declare victory (i.e.

no check every factorization). -1 - always check 0 - don't check 1 - in don't check mode but looks optimal

Definition at line 329 of file ClpDynamicMatrix.hpp.

Infeasibility weight when last full pass done.

Definition at line 331 of file ClpDynamicMatrix.hpp.

size

Definition at line 333 of file ClpDynamicMatrix.hpp.

current maximum number of columns (then compress)

Definition at line 335 of file ClpDynamicMatrix.hpp.

current maximum number of elemnts (then compress)

Definition at line 337 of file ClpDynamicMatrix.hpp.

int* ClpDynamicMatrix::startSet_ [protected]

Start of each set.

Definition at line 339 of file ClpDynamicMatrix.hpp.

int* ClpDynamicMatrix::next_ [protected]

next in chain

Definition at line 341 of file ClpDynamicMatrix.hpp.

CoinBigIndex* ClpDynamicMatrix::startColumn_ [protected]

Starts of each column.

Definition at line 343 of file ClpDynamicMatrix.hpp.

int* ClpDynamicMatrix::row_ [protected]

rows

Definition at line 345 of file ClpDynamicMatrix.hpp.

double* ClpDynamicMatrix::element_ [protected]

elements

Definition at line 347 of file ClpDynamicMatrix.hpp.

double* ClpDynamicMatrix::cost_ [protected]

costs

Definition at line 349 of file ClpDynamicMatrix.hpp.

int* ClpDynamicMatrix::id_ [protected]

ids of active columns (just index here)

Definition at line 351 of file ClpDynamicMatrix.hpp.

unsigned char* ClpDynamicMatrix::dynamicStatus_ [protected]

for status and which bound

Definition at line 353 of file ClpDynamicMatrix.hpp.

double* ClpDynamicMatrix::columnLower_ [protected]

Optional lower bounds on columns.

Definition at line 355 of file ClpDynamicMatrix.hpp.

double* ClpDynamicMatrix::columnUpper_ [protected]

Optional upper bounds on columns.

Definition at line 357 of file ClpDynamicMatrix.hpp.


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