1/* $Id: CoinPresolvePsdebug.hpp 1372 2011-01-03 23:31:00Z lou $ */
2// Copyright (C) 2002, International Business Machines
3// Corporation and others. All Rights Reserved.
4// This code is licensed under the terms of the Eclipse Public License (EPL).
5
6#ifndef CoinPresolvePsdebug_H
7#define CoinPresolvePsdebug_H
8
9/*! \defgroup PresolveDebugFunctions Presolve Debug Functions
10
11 These functions implement consistency checks on data structures
12 involved in presolve and postsolve and on the components of the lp solution.
13
14 To use these functions, include CoinPresolvePsdebug.hpp in your file and
15 define the compile-time constants PRESOLVE_SUMMARY, PRESOLVE_DEBUG, and
16 PRESOLVE_CONSISTENCY (either in individual files or in Coin/Makefile).
17 A value is needed (<i>i.e.</i>, PRESOLVE_DEBUG=1) but not at present used
18 to control debug level. Be sure that the definition occurs before any
19 CoinPresolve*.hpp file is processed.
20*/
21
22//@{
23
24/*! \relates CoinPresolveMatrix
25 \brief Check column-major and/or row-major matrices for duplicate
26 entries in the major vectors.
27
28 By default, scans both the column- and row-major matrices. Set doCol (doRow)
29 to false to suppress one or the other.
30*/
31void presolve_no_dups(const CoinPresolveMatrix *preObj,
32 bool doCol = true, bool doRow = true) ;
33
34/*! \relates CoinPresolveMatrix
35 \brief Check the links which track storage order for major vectors in
36 the bulk storage area.
37
38 By default, scans only the column-major matrix. Set doCol = false to
39 suppress the scan. Set doRow = false to scan the row-major links. But be
40 warned, the row-major links are not maintained with the same zeal as the
41 column-major links.
42*/
43void presolve_links_ok(const CoinPresolveMatrix *preObj,
44 bool doCol = true, bool doRow = false) ;
45
46/*! \relates CoinPresolveMatrix
47 \brief Check for explicit zeros in the column- and/or row-major matrices.
48
49 By default, scans both the column- and row-major matrices. Set doCol (doRow)
50 to false to suppress one or the other.
51*/
52void presolve_no_zeros(const CoinPresolveMatrix *preObj,
53 bool doCol = true, bool doRow = true) ;
54
55/*! \relates CoinPresolveMatrix
56 \brief Checks for equivalence of the column- and row-major matrices.
57
58 Normally the routine will test for coefficient presence and value. Set
59 \p chkvals to false to suppress the check for equal value.
60*/
61void presolve_consistent(const CoinPresolveMatrix *preObj,
62 bool chkvals = true) ;
63
64/*! \relates CoinPostsolveMatrix
65 \brief Checks that column threads agree with column lengths
66*/
67void presolve_check_threads(const CoinPostsolveMatrix *obj) ;
68
69/*! \relates CoinPostsolveMatrix
70 \brief Checks the free list
71
72 Scans the thread of free locations in the bulk store and checks that all
73 entries are reasonable (0 <= index < bulk0_). If chkElemCnt is true, it
74 Also checks that the total number of entries in the matrix plus the
75 locations on the free list total to the size of the bulk store. Postsolve
76 routines do not maintain an accurate element count, but this is useful
77 for checking a newly constructed postsolve matrix.
78*/
79void presolve_check_free_list(const CoinPostsolveMatrix *obj,
80 bool chkElemCnt = false) ;
81
82/*! \relates CoinPostsolveMatrix
83 \brief Check stored reduced costs for accuracy and consistency with
84 variable status.
85
86 The routine will check the value of the reduced costs for architectural
87 variables (CoinPrePostsolveMatrix::rcosts_). It performs an accuracy check
88 by recalculating the reduced cost from scratch. It will also check the
89 value for consistency with the status information in
90 CoinPrePostsolveMatrix::colstat_.
91*/
92void presolve_check_reduced_costs(const CoinPostsolveMatrix *obj) ;
93
94/*! \relates CoinPostsolveMatrix
95 \brief Check the dual variables for consistency with row activity.
96
97 The routine checks that the value of the dual variable is consistent
98 with the state of the constraint (loose, tight at lower bound, or tight at
99 upper bound).
100*/
101void presolve_check_duals(const CoinPostsolveMatrix *postObj) ;
102
103/*! \relates CoinPresolveMatrix
104 \brief Check primal solution and architectural variable status.
105
106 The architectural variables can be checked for bogus values, feasibility,
107 and valid status. The row activity is checked for bogus values, accuracy,
108 and feasibility. By default, row activity is not checked (presolve is
109 sloppy about maintaining it). See the definitions in
110 CoinPresolvePsdebug.cpp for more information.
111*/
112void presolve_check_sol(const CoinPresolveMatrix *preObj,
113 int chkColSol = 2, int chkRowAct = 1,
114 int chkStatus = 1) ;
115
116/*! \relates CoinPostsolveMatrix
117 \brief Check primal solution and architectural variable status.
118
119 The architectural variables can be checked for bogus values, feasibility,
120 and valid status. The row activity is checked for bogus values, accuracy,
121 and feasibility. See the definitions in CoinPresolvePsdebug.cpp for more
122 information.
123*/
124void presolve_check_sol(const CoinPostsolveMatrix *postObj,
125 int chkColSol = 2, int chkRowAct = 2,
126 int chkStatus = 1) ;
127
128/*! \relates CoinPresolveMatrix
129 \brief Check for the proper number of basic variables.
130*/
131void presolve_check_nbasic(const CoinPresolveMatrix *preObj) ;
132
133/*! \relates CoinPostsolveMatrix
134 \brief Check for the proper number of basic variables.
135*/
136void presolve_check_nbasic(const CoinPostsolveMatrix *postObj) ;
137
138//@}
139
140#endif
141