Cbc  2.9.9
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
Functions
Presolve Debug Functions

These functions implement consistency checks on data structures involved in presolve and postsolve and on the components of the lp solution. More...

Functions

void postsolve_get_rowcopy (const CoinPostsolveMatrix *postObj, int *&rowStarts, int *&columns, double *&elements)
 get a row copy in postsolve More...
 
void presolve_no_dups (const CoinPresolveMatrix *preObj, bool doCol=true, bool doRow=true)
 Check column-major and/or row-major matrices for duplicate entries in the major vectors. More...
 
void presolve_links_ok (const CoinPresolveMatrix *preObj, bool doCol=true, bool doRow=true)
 Check the links which track storage order for major vectors in the bulk storage area. More...
 
void presolve_no_zeros (const CoinPresolveMatrix *preObj, bool doCol=true, bool doRow=true)
 Check for explicit zeros in the column- and/or row-major matrices. More...
 
void presolve_consistent (const CoinPresolveMatrix *preObj, bool chkvals=true)
 Checks for equivalence of the column- and row-major matrices. More...
 
void presolve_check_threads (const CoinPostsolveMatrix *obj)
 Checks that column threads agree with column lengths. More...
 
void presolve_check_free_list (const CoinPostsolveMatrix *obj, bool chkElemCnt=false)
 Checks the free list. More...
 
void presolve_check_reduced_costs (const CoinPostsolveMatrix *obj)
 Check stored reduced costs for accuracy and consistency with variable status. More...
 
void presolve_check_duals (const CoinPostsolveMatrix *postObj)
 Check the dual variables for consistency with row activity. More...
 
void presolve_check_sol (const CoinPresolveMatrix *preObj, int chkColSol=2, int chkRowAct=1, int chkStatus=1)
 Check primal solution and architectural variable status. More...
 
void presolve_check_sol (const CoinPostsolveMatrix *postObj, int chkColSol=2, int chkRowAct=2, int chkStatus=1)
 Check primal solution and architectural variable status. More...
 
void presolve_check_nbasic (const CoinPresolveMatrix *preObj)
 Check for the proper number of basic variables. More...
 
void presolve_check_nbasic (const CoinPostsolveMatrix *postObj)
 Check for the proper number of basic variables. More...
 

Detailed Description

These functions implement consistency checks on data structures involved in presolve and postsolve and on the components of the lp solution.

To use these functions, include CoinPresolvePsdebug.hpp in your file and define the compile-time constants PRESOLVE_SUMMARY, PRESOLVE_DEBUG, and PRESOLVE_CONSISTENCY. A value is needed (i.e., PRESOLVE_DEBUG=1). In a few places, higher values will get you a bit more output.

Define the symbols PRESOLVE_DEBUG and PRESOLVE_CONSISTENCY on the configure command line (use ADD_CXXFLAGS), in a Makefile, or similar and do a full rebuild (including any presolve driver code). If the symbols are not consistently nonzero across all presolve code, you'll get something between garbage and a core dump! Debugging adds messages to CoinMessage and allocates and maintains arrays that hold debug information.

That said, given that you've configured and built with PRESOLVE_DEBUG and PRESOLVE_CONSISTENCY nonzero everywhere, it's safe to adjust PRESOLVE_DEBUG to values in the range 1..n in individual files to increase or decrease the amount of output.

The suggested approach for PRESOLVE_DEBUG is to define it to 1 in the build and then increase it in individual presolve code files to get more detail.

Function Documentation

void postsolve_get_rowcopy ( const CoinPostsolveMatrix postObj,
int *&  rowStarts,
int *&  columns,
double *&  elements 
)

get a row copy in postsolve

void presolve_no_dups ( const CoinPresolveMatrix preObj,
bool  doCol = true,
bool  doRow = true 
)
related

Check column-major and/or row-major matrices for duplicate entries in the major vectors.

By default, scans both the column- and row-major matrices. Set doCol (doRow) to false to suppress the column (row) scan.

void presolve_links_ok ( const CoinPresolveMatrix preObj,
bool  doCol = true,
bool  doRow = true 
)
related

Check the links which track storage order for major vectors in the bulk storage area.

By default, scans both the column- and row-major matrix. Set doCol = false to suppress the column-major scan. Set doRow = false to suppres the row-major scan.

void presolve_no_zeros ( const CoinPresolveMatrix preObj,
bool  doCol = true,
bool  doRow = true 
)
related

Check for explicit zeros in the column- and/or row-major matrices.

By default, scans both the column- and row-major matrices. Set doCol (doRow) to false to suppress the column (row) scan.

void presolve_consistent ( const CoinPresolveMatrix preObj,
bool  chkvals = true 
)
related

Checks for equivalence of the column- and row-major matrices.

Normally the routine will test for coefficient presence and value. Set chkvals to false to suppress the check for equal value.

void presolve_check_threads ( const CoinPostsolveMatrix obj)
related

Checks that column threads agree with column lengths.

void presolve_check_free_list ( const CoinPostsolveMatrix obj,
bool  chkElemCnt = false 
)
related

Checks the free list.

Scans the thread of free locations in the bulk store and checks that all entries are reasonable (0 <= index < bulk0_). If chkElemCnt is true, it also checks that the total number of entries in the matrix plus the locations on the free list total to the size of the bulk store. Postsolve routines do not maintain an accurate element count, but this is useful for checking a newly constructed postsolve matrix.

void presolve_check_reduced_costs ( const CoinPostsolveMatrix obj)
related

Check stored reduced costs for accuracy and consistency with variable status.

The routine will check the value of the reduced costs for architectural variables (CoinPrePostsolveMatrix::rcosts_). It performs an accuracy check by recalculating the reduced cost from scratch. It will also check the value for consistency with the status information in CoinPrePostsolveMatrix::colstat_.

void presolve_check_duals ( const CoinPostsolveMatrix postObj)
related

Check the dual variables for consistency with row activity.

The routine checks that the value of the dual variable is consistent with the state of the constraint (loose, tight at lower bound, or tight at upper bound).

void presolve_check_sol ( const CoinPresolveMatrix preObj,
int  chkColSol = 2,
int  chkRowAct = 1,
int  chkStatus = 1 
)
related

Check primal solution and architectural variable status.

The architectural variables can be checked for bogus values, feasibility, and valid status. The row activity is checked for bogus values, accuracy, and feasibility. By default, row activity is not checked (presolve is sloppy about maintaining it). See the definitions in CoinPresolvePsdebug.cpp for more information.

void presolve_check_sol ( const CoinPostsolveMatrix postObj,
int  chkColSol = 2,
int  chkRowAct = 2,
int  chkStatus = 1 
)
related

Check primal solution and architectural variable status.

The architectural variables can be checked for bogus values, feasibility, and valid status. The row activity is checked for bogus values, accuracy, and feasibility. See the definitions in CoinPresolvePsdebug.cpp for more information.

void presolve_check_nbasic ( const CoinPresolveMatrix preObj)
related

Check for the proper number of basic variables.

void presolve_check_nbasic ( const CoinPostsolveMatrix postObj)
related

Check for the proper number of basic variables.