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 *in, int numberToPack)
 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.
CoinBigIndexstartColumn () 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
CoinBigIndexstartColumn_
 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 17 of file ClpDynamicMatrix.hpp.


Member Enumeration Documentation

enums for status of various sorts

Enumerator:
soloKey 
inSmall 
atUpperBound 
atLowerBound 

Definition at line 21 of file ClpDynamicMatrix.hpp.


Constructor & Destructor Documentation

ClpDynamicMatrix::ClpDynamicMatrix (  ) 

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.

ClpDynamicMatrix::ClpDynamicMatrix ( const ClpDynamicMatrix  ) 

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.

void ClpDynamicMatrix::gubCrash (  ) 

Does gub crash.

void ClpDynamicMatrix::initialProblem (  ) 

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 *  in,
int  numberToPack 
) [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 104 of file ClpDynamicMatrix.hpp.

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

Gets lower bound (to simplify coding).

Definition at line 106 of file ClpDynamicMatrix.hpp.

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

Gets upper bound (to simplify coding).

Definition at line 109 of file ClpDynamicMatrix.hpp.

ClpDynamicMatrix& ClpDynamicMatrix::operator= ( const ClpDynamicMatrix  ) 

The copy constructor.

Reimplemented from ClpPackedMatrix.

Reimplemented in ClpDynamicExampleMatrix.

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 153 of file ClpDynamicMatrix.hpp.

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

Status of row slacks.

Definition at line 155 of file ClpDynamicMatrix.hpp.

int ClpDynamicMatrix::numberSets (  )  const [inline]

Number of sets (dynamic rows).

Definition at line 162 of file ClpDynamicMatrix.hpp.

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

Whether flagged.

Definition at line 165 of file ClpDynamicMatrix.hpp.

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

Status of row slacks.

Definition at line 168 of file ClpDynamicMatrix.hpp.

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

Status of row slacks.

Reimplemented in ClpDynamicExampleMatrix.

Definition at line 171 of file ClpDynamicMatrix.hpp.

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

Status of row slacks.

Definition at line 174 of file ClpDynamicMatrix.hpp.

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

Status of row slacks.

Definition at line 180 of file ClpDynamicMatrix.hpp.

double ClpDynamicMatrix::objectiveOffset (  )  const [inline]

Saved value of objective offset.

Definition at line 183 of file ClpDynamicMatrix.hpp.

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

Starts of each column.

Definition at line 186 of file ClpDynamicMatrix.hpp.

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

rows

Definition at line 189 of file ClpDynamicMatrix.hpp.

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

elements

Definition at line 192 of file ClpDynamicMatrix.hpp.

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

costs

Definition at line 195 of file ClpDynamicMatrix.hpp.

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

ids of active columns (just index here)

Definition at line 198 of file ClpDynamicMatrix.hpp.

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

Optional lower bounds on columns.

Definition at line 201 of file ClpDynamicMatrix.hpp.

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

Optional upper bounds on columns.

Definition at line 204 of file ClpDynamicMatrix.hpp.

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

Lower bounds on sets.

Definition at line 207 of file ClpDynamicMatrix.hpp.

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

Upper bounds on sets.

Definition at line 210 of file ClpDynamicMatrix.hpp.

int ClpDynamicMatrix::numberGubColumns (  )  const [inline]

size

Definition at line 213 of file ClpDynamicMatrix.hpp.

int ClpDynamicMatrix::firstAvailable (  )  const [inline]

first free

Definition at line 216 of file ClpDynamicMatrix.hpp.

int ClpDynamicMatrix::firstDynamic (  )  const [inline]

first dynamic

Definition at line 219 of file ClpDynamicMatrix.hpp.

int ClpDynamicMatrix::lastDynamic (  )  const [inline]

number of columns in dynamic model

Definition at line 222 of file ClpDynamicMatrix.hpp.

int ClpDynamicMatrix::numberStaticRows (  )  const [inline]

number of rows in original model

Definition at line 225 of file ClpDynamicMatrix.hpp.

int ClpDynamicMatrix::numberElements (  )  const [inline]

size of working matrix (max)

Definition at line 228 of file ClpDynamicMatrix.hpp.

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

Status of row slacks.

Definition at line 230 of file ClpDynamicMatrix.hpp.

void ClpDynamicMatrix::switchOffCheck (  ) 

Switches off dj checking each factorization (for BIG models).

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

Status region for gub slacks.

Definition at line 235 of file ClpDynamicMatrix.hpp.

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

Status region for gub variables.

Definition at line 238 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 250 of file ClpDynamicMatrix.hpp.

Sum of primal infeasibilities.

Definition at line 252 of file ClpDynamicMatrix.hpp.

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

Definition at line 254 of file ClpDynamicMatrix.hpp.

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

Definition at line 256 of file ClpDynamicMatrix.hpp.

Saved best dual on gub row in pricing.

Definition at line 258 of file ClpDynamicMatrix.hpp.

Saved best set in pricing.

Definition at line 260 of file ClpDynamicMatrix.hpp.

Backward pointer to pivot row !!!

Definition at line 262 of file ClpDynamicMatrix.hpp.

int* ClpDynamicMatrix::keyVariable_ [mutable, protected]

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

Definition at line 264 of file ClpDynamicMatrix.hpp.

int* ClpDynamicMatrix::toIndex_ [protected]

Backward pointer to extra row.

Definition at line 266 of file ClpDynamicMatrix.hpp.

int* ClpDynamicMatrix::fromIndex_ [protected]

Sum of dual infeasibilities.

Definition at line 268 of file ClpDynamicMatrix.hpp.

Number of sets (dynamic rows).

Definition at line 270 of file ClpDynamicMatrix.hpp.

Number of active sets.

Definition at line 272 of file ClpDynamicMatrix.hpp.

Saved value of objective offset.

Definition at line 274 of file ClpDynamicMatrix.hpp.

double* ClpDynamicMatrix::lowerSet_ [protected]

Lower bounds on sets.

Definition at line 276 of file ClpDynamicMatrix.hpp.

double* ClpDynamicMatrix::upperSet_ [protected]

Upper bounds on sets.

Definition at line 278 of file ClpDynamicMatrix.hpp.

unsigned char* ClpDynamicMatrix::status_ [protected]

Status of slack on set.

Definition at line 280 of file ClpDynamicMatrix.hpp.

Pointer back to model.

Definition at line 282 of file ClpDynamicMatrix.hpp.

first free

Definition at line 284 of file ClpDynamicMatrix.hpp.

first free when iteration started

Definition at line 286 of file ClpDynamicMatrix.hpp.

first dynamic

Definition at line 288 of file ClpDynamicMatrix.hpp.

number of columns in dynamic model

Definition at line 290 of file ClpDynamicMatrix.hpp.

number of rows in original model

Definition at line 292 of file ClpDynamicMatrix.hpp.

size of working matrix (max)

Definition at line 294 of file ClpDynamicMatrix.hpp.

Number of dual infeasibilities.

Definition at line 296 of file ClpDynamicMatrix.hpp.

Number of primal infeasibilities.

Definition at line 298 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 304 of file ClpDynamicMatrix.hpp.

Infeasibility weight when last full pass done.

Definition at line 306 of file ClpDynamicMatrix.hpp.

size

Definition at line 308 of file ClpDynamicMatrix.hpp.

current maximum number of columns (then compress)

Definition at line 310 of file ClpDynamicMatrix.hpp.

current maximum number of elemnts (then compress)

Definition at line 312 of file ClpDynamicMatrix.hpp.

int* ClpDynamicMatrix::startSet_ [protected]

Start of each set.

Definition at line 314 of file ClpDynamicMatrix.hpp.

int* ClpDynamicMatrix::next_ [protected]

next in chain

Definition at line 316 of file ClpDynamicMatrix.hpp.

Starts of each column.

Definition at line 318 of file ClpDynamicMatrix.hpp.

int* ClpDynamicMatrix::row_ [protected]

rows

Definition at line 320 of file ClpDynamicMatrix.hpp.

double* ClpDynamicMatrix::element_ [protected]

elements

Definition at line 322 of file ClpDynamicMatrix.hpp.

double* ClpDynamicMatrix::cost_ [protected]

costs

Definition at line 324 of file ClpDynamicMatrix.hpp.

int* ClpDynamicMatrix::id_ [protected]

ids of active columns (just index here)

Definition at line 326 of file ClpDynamicMatrix.hpp.

unsigned char* ClpDynamicMatrix::dynamicStatus_ [protected]

for status and which bound

Definition at line 328 of file ClpDynamicMatrix.hpp.

double* ClpDynamicMatrix::columnLower_ [protected]

Optional lower bounds on columns.

Definition at line 330 of file ClpDynamicMatrix.hpp.

double* ClpDynamicMatrix::columnUpper_ [protected]

Optional upper bounds on columns.

Definition at line 332 of file ClpDynamicMatrix.hpp.


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

Generated on 15 Mar 2015 for Coin-All by  doxygen 1.6.1