6 #ifndef CoinPresolveMatrix_H 
    7 #define CoinPresolveMatrix_H 
   21 #if PRESOLVE_DEBUG > 0 
   36 #define deleteAction(array, type) delete[]((type)array) 
   38 #define deleteAction(array, type) delete[] array 
   45 #if PRESOLVE_DEBUG > 0 || PRESOLVE_CONSISTENCY > 0 
   47 #define PRESOLVE_STMT(s) s 
   49 #define PRESOLVEASSERT(x) \ 
   50   ((x) ? 1 : ((std::cerr << "FAILED ASSERTION at line " << __LINE__ << ": " #x "\n"), abort(), 0)) 
   52 inline void DIE(
const char *s)
 
   68 #define PRESENT_IN_REDUCED '\377' 
   72 #define PRESOLVEASSERT(x) \ 
   75 #define PRESOLVE_STMT(s) \ 
   79 inline void DIE(
const char *) {}
 
   86 #ifndef PRESOLVE_DETAIL 
   87 #define PRESOLVE_DETAIL_PRINT(s) \ 
   91 #define PRESOLVE_DETAIL_PRINT(s) s 
  106 #define PRESOLVE_INF COIN_DBL_MAX 
  107 #define PRESOLVE_SMALL_INF 1.0e20 
  109 #define PRESOLVEFINITE(n) (-PRESOLVE_INF < (n) && (n) < PRESOLVE_INF) 
  173     throw CoinError(error, ps_routine, 
"CoinPresolve");
 
  201   virtual const char *
name() 
const = 0;
 
  349     unsigned char &st_byte = 
rowstat_[sequence];
 
  350     st_byte = 
static_cast< unsigned char >(st_byte & (~7));
 
  351     st_byte = 
static_cast< unsigned char >(st_byte | status);
 
  361     return (static_cast< Status >(
rowstat_[sequence] & 7) == 
basic);
 
  366     unsigned char &st_byte = 
colstat_[sequence];
 
  367     st_byte = 
static_cast< unsigned char >(st_byte & (~7));
 
  368     st_byte = 
static_cast< unsigned char >(st_byte | status);
 
  370 #ifdef PRESOLVE_DEBUG 
  374         std::cout << 
"Bad status: Var " << sequence
 
  375                   << 
" isFree, lb = " << 
clo_[sequence]
 
  376                   << 
", ub = " << 
cup_[sequence] << std::endl;
 
  385         std::cout << 
"Bad status: Var " << sequence
 
  386                   << 
" atUpperBound, lb = " << 
clo_[sequence]
 
  387                   << 
", ub = " << 
cup_[sequence] << std::endl;
 
  393         std::cout << 
"Bad status: Var " << sequence
 
  394                   << 
" atLowerBound, lb = " << 
clo_[sequence]
 
  395                   << 
", ub = " << 
cup_[sequence] << std::endl;
 
  401         std::cout << 
"Bad status: Var " << sequence
 
  402                   << 
" superBasic, lb = " << 
clo_[sequence]
 
  403                   << 
", ub = " << 
cup_[sequence] << std::endl;
 
  422     return (static_cast< Status >(
colstat_[sequence] & 7) == 
basic);
 
  471   void setColLower(
const double *colLower, 
int lenParam);
 
  473   void setColUpper(
const double *colUpper, 
int lenParam);
 
  477   void setCost(
const double *cost, 
int lenParam);
 
  481   void setRowLower(
const double *rowLower, 
int lenParam);
 
  483   void setRowUpper(
const double *rowUpper, 
int lenParam);
 
  485   void setRowPrice(
const double *rowSol, 
int lenParam);
 
  576     for (
int i = 0; i < 
ncols_; i++)
 
  814 #define NO_LINK -66666666 
  823   int ipre = link[i].
pre;
 
  824   int isuc = link[i].
suc;
 
  826     link[ipre].
suc = isuc;
 
  829     link[isuc].
pre = ipre;
 
  841   int isuc = link[j].
suc;
 
  863   int ipre = link[i].
pre;
 
  864   int isuc = link[i].
suc;
 
  930     double nonLinearVariable,
 
  950     double nonLinearVariable,
 
  951     const char *prohibited,
 
  984     for (
int i = 0; i < 
nrows_; i++)
 
  999     integerType_[i] = 
static_cast< unsigned char >(variableType);
 
 1007   void setVariableType(
const unsigned char *variableType, 
int lenParam);
 
 1099 #if PRESOLVE_DEBUG > 2 
 1100     assert(fabs(change_amount) < 1.0e50);
 
 1579     unsigned char *colstat,
 
 1580     unsigned char *rowstat);
 
 1598     unsigned char *colstat,
 
 1599     unsigned char *rowstat);
 
 1677   int *minndxs, 
int *majlens,
 
 1686   int *hrow, 
int *hincol,
 
 1690     hrow, hincol, clink, ncols, colx);
 
 1699   int *hcol, 
int *hinrow,
 
 1703     hcol, hinrow, rlink, nrows, rowx);
 
 1719   for (k = ks; k < ke; k++)
 
 1722     if (minndxs[k] == tgt)
 
 1731     if (minndxs[k] == tgt)
 
 1771   const int *minndxs);
 
 1860   int *majlens, 
int *minndxs, 
double *els)
 
 1867   minndxs[kmi] = minndxs[ke - 1];
 
 1868   els[kmi] = els[ke - 1];
 
 1882   int *majlens, 
int *minndxs, 
double *els)
 
 1888     int iMinor = minndxs[k];
 
 1889     if (!marked[iMinor]) {
 
 1890       minndxs[put] = iMinor;
 
 1891       els[put++] = els[k];
 
 1896   majlens[majndx] = 
static_cast< int >(put - ks);
 
 1912   int *hincol, 
int *hrow, 
double *colels)
 
 1929   int *hinrow, 
int *hcol, 
double *rowels)
 
 1960   int *hincol, 
int *hrow,
 
const char * rowStatusString(int i) const 
Return a print string for status of a row (artificial variable) 
 
unsigned char * rowChanged_
Row change status information. 
 
void setColChanged(int i)
Mark column as changed. 
 
void statistics()
Say we want statistics - also set time. 
 
int * originalRow_
Original row numbers. 
 
bool rowIsBasic(int sequence) const 
Check if artificial for this row is basic. 
 
Error Class thrown by an exception. 
 
void setPass(int pass=0)
Set pass number. 
 
int * colsToDo_
Input list of columns to process. 
 
int getNumRows() const 
Get current number of rows. 
 
void setMessageHandler(CoinMessageHandler *handler)
Set message handler. 
 
CoinBigIndex getNumElems() const 
Get current number of non-zero coefficients. 
 
virtual void postsolve(CoinPostsolveMatrix *prob) const =0
Apply the postsolve transformation for this particular presolve action. 
 
bool presolve_expand_major(CoinBigIndex *majstrts, double *majels, int *minndxs, int *majlens, presolvehlink *majlinks, int nmaj, int k)
Make sure a major-dimension vector k has room for one more coefficient. 
 
int * usefulRowInt_
Preallocated scratch work array, 3*nrows_. 
 
void setReducedCost(const double *redCost, int lenParam)
Set reduced costs. 
 
double ztolzb_
Primal feasibility tolerance. 
 
void PRESOLVE_REMOVE_LINK(presolvehlink *link, int i)
unlink vector i 
 
void setFeasibilityTolerance(double val)
Set feasibility tolerance. 
 
~CoinPresolveMatrix()
Destructor. 
 
Collects all the information about the problem that is needed in both presolve and postsolve...
 
int * originalColumn_
Original column numbers. 
 
bool anyInteger_
Flag to say if any variables are integer. 
 
Status getRowStatus(int sequence) const 
Get row status. 
 
double * sumDown_
Work array for sum of finite contributions to row lhs lower bound. 
 
int nrows0_
Allocated number of rows. 
 
void setColSolution(const double *colSol, int lenParam)
Set column solution. 
 
double * colels_
Coefficients (positional correspondence with hrow_) 
 
CoinMessage messages_
Standard COIN messages. 
 
CoinPresolveMatrix(int ncols_alloc, int nrows_alloc, CoinBigIndex nelems_alloc)
`Native' constructor 
 
Status getColumnStatus(int sequence) const 
Get column (structural variable) status. 
 
void setCost(const double *cost, int lenParam)
Set objective coefficients. 
 
const CoinBigIndex * getColStarts() const 
Get column start vector for column-major packed matrix. 
 
CoinBigIndex presolve_find_row3(int row, CoinBigIndex kcs, int collen, const int *hrow, const CoinBigIndex *clinks)
Find position of a row in a column in a column-major threaded matrix. 
 
CoinWarmStartBasis * getStatus()
Get status in the form of a CoinWarmStartBasis. 
 
CoinBigIndex nelems0_
Allocated number of coefficients. 
 
int * infiniteUp_
Work array for count of infinite contributions to row lhs upper bound. 
 
double * usefulColumnDouble_
Preallocated scratch work array, ncols_. 
 
unsigned char * rowstat_
Status of constraints. 
 
bool columnIsBasic(int sequence) const 
Check if column (structural variable) is basic. 
 
void initRowsToDo()
Initialise the row ToDo lists. 
 
double * rup_
Row (constraint) upper bounds. 
 
void unsetRowChanged(int i)
Mark row as not changed. 
 
double * randomNumber_
Array of random numbers (max row,column) 
 
int stepRowsToDo()
Step row ToDo lists. 
 
int * hcol_
Column indices (positional correspondence with rowels_) 
 
const int * getColLengths() const 
Get column length vector for column-major packed matrix. 
 
CoinBigIndex presolve_find_minor3(int tgt, CoinBigIndex ks, int majlen, const int *minndxs, const CoinBigIndex *majlinks)
Find position of a minor index in a major vector in a threaded matrix. 
 
const double ZTOLDP2
Alternate zero tolerance. 
 
int presolveOptions_
Fine control over presolve actions. 
 
double * rcosts_
Vector of reduced costs. 
 
CoinBigIndex nelems_
current number of coefficients 
 
Links to aid in packed matrix modification. 
 
void initializeStuff()
Allocate scratch arrays. 
 
int * nextColsToDo_
Output list of columns to process next. 
 
int ncols0_
Allocated number of columns. 
 
int * rowsToDo_
Input list of rows to process. 
 
int recomputeSums(int whichRow)
Recompute row lhs bounds. 
 
Abstract base class of all presolve routines. 
 
double maxmin_
Maximization/minimization. 
 
double bulkRatio_
Ratio of bulk0_ to nelems0_; default is 2. 
 
static void throwCoinError(const char *error, const char *ps_routine)
Stub routine to throw exceptions. 
 
void presolve_delete_from_col(int row, int col, const CoinBigIndex *mcstrt, int *hincol, int *hrow, double *colels)
Delete the entry for row row from column col in a column-major matrix. 
 
CoinBigIndex presolve_find_minor2(int tgt, CoinBigIndex ks, int majlen, const int *minndxs, const CoinBigIndex *majlinks)
Find position of a minor index in a major vector in a threaded matrix. 
 
int countEmptyCols()
Count empty columns. 
 
int numberNextColsToDo_
Length of nextColsToDo_. 
 
bool anyInteger() const 
Check if there are any integer variables. 
 
int status()
Returns problem status (0 = feasible, 1 = infeasible, 2 = unbounded) 
 
void unsetColUsed(int i)
Mark column as unused. 
 
void setStatus(int status)
Set problem status. 
 
const char * columnStatusString(int j) const 
Return a print string for status of a column (structural variable) 
 
void setDualTolerance(double dualTol)
Set the dual feasibility tolerance. 
 
void setObjSense(double objSense)
Set the objective sense (max/min) 
 
The default COIN simplex (basis-oriented) warm start class. 
 
int numberColsToDo_
Length of colsToDo_. 
 
const char * statusName(CoinPrePostsolveMatrix::Status status)
Generate a print string for a status code. 
 
CoinBigIndex presolve_find_minor(int tgt, CoinBigIndex ks, CoinBigIndex ke, const int *minndxs)
Find position of a minor index in a major vector. 
 
int numberColsToDo()
Return the number of columns on the colsToDo_ list. 
 
void setPresolveOptions(int value)
Sets any special options (see presolveOptions_) 
 
Status
Enum for status of various sorts. 
 
Base class for message handling. 
 
double * cost_
Objective coefficients. 
 
void presolve_delete_from_major(int majndx, int minndx, const CoinBigIndex *majstrts, int *majlens, int *minndxs, double *els)
Delete the entry for a minor index from a major vector. 
 
bool rowProhibited2(int i) const 
Test if row is eligible for preprocessing. 
 
~CoinPrePostsolveMatrix()
Destructor. 
 
bool anyProhibited_
Flag to say if any rows or columns are marked as prohibited. 
 
Abstract Base Class for describing an interface to a solver. 
 
double startTime_
Start time of presolve. 
 
double * presolve_dupmajor(const double *elems, const int *indices, int length, CoinBigIndex offset, int tgt=-1)
Duplicate a major-dimension vector; optionally omit the entry with minor index tgt. 
 
void setVariableType(int i, int variableType)
Set variable type information for a single variable. 
 
void PRESOLVE_MOVE_LINK(presolvehlink *link, int i, int j)
relink vector j in place of vector i 
 
The standard set of Coin messages. 
 
CoinBigIndex presolve_find_minor1(int tgt, CoinBigIndex ks, CoinBigIndex ke, const int *minndxs)
Find position of a minor index in a major vector. 
 
void setNext(const CoinPresolveAction *nextAction)
modify next (when building rather than passing) 
 
void assignPresolveToPostsolve(CoinPresolveMatrix *&preObj)
Load an empty CoinPostsolveMatrix from a CoinPresolveMatrix. 
 
void addCol(int i)
Mark column as changed and add to list of columns to process next. 
 
void setRowStatus(int sequence, Status status)
Set row status (i.e., status of artificial for this row) 
 
unsigned char * integerType_
Tracks integrality of columns (1 for integer, 0 for continuous) 
 
void coin_init_random_vec(double *work, int n)
Initialize a vector with random numbers. 
 
void setStructuralStatus(const char *strucStatus, int lenParam)
Set column (structural variable) status vector. 
 
void setColumnStatusUsingValue(int iColumn)
Set status of column (structural variable) to the correct nonbasic status given bounds and current va...
 
int nrows_
current number of rows 
 
const double * getCost() const 
Get objective coefficients. 
 
const double * getElementsByCol() const 
Get vector of elements for column-major packed matrix. 
 
virtual ~CoinPresolveAction()
Virtual destructor. 
 
void setAnyInteger(bool anyInteger=true)
Set a flag for presence (true) or absence (false) of integer variables. 
 
bool rowChanged(int i) const 
Has row been changed? 
 
bool isInteger(int i) const 
Check for integrality of the specified variable. 
 
CoinPostsolveMatrix(int ncols_alloc, int nrows_alloc, CoinBigIndex nelems_alloc)
`Native' constructor 
 
double * usefulRowDouble_
Preallocated scratch work array, 2*nrows_. 
 
int stepColsToDo()
Step column ToDo lists. 
 
double * cup_
Column (primal variable) upper bounds. 
 
CoinBigIndex * mrstrt_
Vector of row start positions in #hcol, rowels_. 
 
void setColumnStatus(int sequence, Status status)
Set column status (i.e., status of primal variable) 
 
int status_
Output status: 0 = feasible, 1 = infeasible, 2 = unbounded. 
 
void setAnyProhibited(bool val=true)
Set a flag for presence of prohibited rows or columns. 
 
int * hincol_
Vector of column lengths. 
 
bool rowUsed(int i) const 
Test if row is marked as used. 
 
CoinBigIndex maxlink_
Allocated size of link_. 
 
double * acts_
Vector of constraint left-hand-side values (row activity) 
 
int * hrow_
Row indices (positional correspondence with colels_) 
 
CoinPresolveAction(const CoinPresolveAction *next)
Construct a postsolve object and add it to the transformation list. 
 
void update_model(ClpSimplex *si, int nrows0, int ncols0, CoinBigIndex nelems0)
Update the model held by a Clp OSI. 
 
void presolve_delete_from_major2(int majndx, int minndx, CoinBigIndex *majstrts, int *majlens, int *minndxs, CoinBigIndex *majlinks, CoinBigIndex *free_listp)
Delete the entry for a minor index from a major vector in a threaded matrix. 
 
void presolve_delete_many_from_major(int majndx, char *marked, const CoinBigIndex *majstrts, int *majlens, int *minndxs, double *els)
Delete marked entries. 
 
bool anyProhibited() const 
Check if there are any prohibited rows or columns. 
 
int numberNextRowsToDo_
Length of nextRowsToDo_. 
 
void setColProhibited(int i)
Mark column as ineligible for preprocessing. 
 
void setArtificialStatus(const char *artifStatus, int lenParam)
Set row (artificial variable) status vector. 
 
double ztoldj_
Dual feasibility tolerance. 
 
void initColsToDo()
Initialise the column ToDo lists. 
 
const double ZTOLDP
Zero tolerance. 
 
CoinBigIndex presolve_find_row(int row, CoinBigIndex kcs, CoinBigIndex kce, const int *hrow)
Find position of a row in a column in a column-major matrix. 
 
const CoinPresolveAction * next
The next presolve transformation. 
 
bool rowProhibited(int i) const 
Test if row is eligible for preprocessing. 
 
const double * getColSolution() const 
Get column solution (primal variable values) 
 
void presolve_delete_from_row(int row, int col, const CoinBigIndex *mrstrt, int *hinrow, int *hcol, double *rowels)
Delete the entry for column col from row row in a row-major matrix. 
 
const double * getRowPrice() const 
Get row solution (dual variables) 
 
Augments CoinPrePostsolveMatrix with information about the problem that is only needed during postsol...
 
friend void assignPresolveToPostsolve(CoinPresolveMatrix *&preObj)
Initialize a CoinPostsolveMatrix object, destroying the CoinPresolveMatrix object. 
 
void setRowProhibited(int i)
Mark row as ineligible for preprocessing. 
 
CoinBigIndex bulk0_
Allocated size of bulk storage for row indices and coefficients. 
 
void setMaximumSubstitutionLevel(int level)
Set Maximum substitution level (normally 3) 
 
~CoinPostsolveMatrix()
Destructor. 
 
void unsetColInfinite(int i)
Mark column as not infinite ub (originally) 
 
const double * getRowUpper() const 
Get row upper bounds. 
 
unsigned char * colChanged_
Column change status information. 
 
bool colUsed(int i) const 
Test if column is marked as used. 
 
void setRowUpper(const double *rowUpper, int lenParam)
Set row upper bounds. 
 
const double * getRowActivity() const 
Get row activity (constraint lhs values) 
 
void setRowLower(const double *rowLower, int lenParam)
Set row lower bounds. 
 
bool defaultHandler_
Indicates if the current handler_ is default (true) or not (false). 
 
Sparse Matrix Base Class. 
 
void setRowChanged(int i)
Mark row as changed. 
 
void change_bias(double change_amount)
Adjust objective function constant offset. 
 
double originalOffset_
Original objective offset. 
 
int countEmptyRows()
Count number of empty rows. 
 
void setMatrix(const CoinPackedMatrix *mtx)
Load the cofficient matrix. 
 
Augments CoinPrePostsolveMatrix with information about the problem that is only needed during presolv...
 
const CoinBigIndex * getRowStarts() const 
Get row start vector for row-major packed matrix. 
 
int * hinrow_
Vector of row lengths. 
 
presolvehlink * clink_
Linked list for the column-major representation. 
 
void setColInfinite(int i)
Mark column as infinite ub (originally) 
 
int * nextRowsToDo_
Output list of rows to process next. 
 
int numberRowsToDo_
Length of rowsToDo_. 
 
const double * getColLower() const 
Get column lower bounds. 
 
double * sumUp_
Work array for sum of finite contributions to row lhs upper bound. 
 
int ncols_
current number of columns 
 
void addRow(int i)
Mark row as changed and add to list of rows to process next. 
 
void setStatus(const CoinWarmStartBasis *basis)
Set the status of all variables from a basis. 
 
double dobias_
Objective function offset introduced during presolve. 
 
void presolve_delete_from_col2(int row, int col, CoinBigIndex *mcstrt, int *hincol, int *hrow, CoinBigIndex *clinks, CoinBigIndex *free_listp)
Delete the entry for row row from column col in a column-major threaded matrix. 
 
void PRESOLVE_INSERT_LINK(presolvehlink *link, int i, int j)
insert vector i after vector j 
 
CoinMessages messages() const 
Return messages. 
 
double * rowels_
Coefficients (positional correspondence with hcol_) 
 
bool tuning_
Print statistics for tuning. 
 
#define PRESOLVE_INF
The usual finite infinity. 
 
int * infiniteDown_
Work array for count of infinite contributions to row lhs lower bound. 
 
int numberRowsToDo()
Return the number of rows on the rowsToDo_ list. 
 
bool colInfinite(int i) const 
Has column infinite ub (originally) 
 
void setPrimalTolerance(double primTol)
Set the primal feasibility tolerance. 
 
int * usefulColumnInt_
Preallocated scratch work array, 2*ncols_. 
 
double feasibilityTolerance()
Return feasibility tolerance. 
 
CoinBigIndex free_list_
First entry in free entries thread. 
 
const double * getElementsByRow() const 
Get vector of elements for row-major packed matrix. 
 
bool colChanged(int i) const 
Has column been changed? 
 
const double * getRowLower() const 
Get row lower bounds. 
 
double * clo_
Column (primal variable) lower bounds. 
 
const double * getReducedCost() const 
Get reduced costs. 
 
void deleteStuff()
Free scratch arrays. 
 
double feasibilityTolerance_
Bounds can be moved by this to retain feasibility. 
 
void unsetColChanged(int i)
Mark column as not changed. 
 
This file contains the enum for the standard set of Coin messages and a class definition whose sole p...
 
presolvehlink * rlink_
Linked list for the row-major representation. 
 
void setColUpper(const double *colUpper, int lenParam)
Set column upper bounds. 
 
void presolve_make_memlists(int *lengths, presolvehlink *link, int n)
Initialise linked list for major vector order in bulk storage. 
 
void setRowPrice(const double *rowSol, int lenParam)
Set row solution. 
 
CoinBigIndex presolve_find_row1(int row, CoinBigIndex kcs, CoinBigIndex kce, const int *hrow)
Find position of a row in a column in a column-major matrix. 
 
int getNumCols() const 
Get current number of columns. 
 
void setColLower(const double *colLower, int lenParam)
Set column lower bounds. 
 
bool colProhibited2(int i) const 
Test if column is eligible for preprocessing. 
 
CoinBigIndex presolve_find_col1(int col, CoinBigIndex krs, CoinBigIndex kre, const int *hcol)
Find position of a column in a row in a row-major matrix. 
 
unsigned char * colstat_
Status of primal variables. 
 
const int * getRowIndicesByCol() const 
Get vector of row indices for column-major packed matrix. 
 
double * sol_
Vector of primal variable values. 
 
double * rowduals_
Vector of dual variable values. 
 
CoinBigIndex * link_
Thread array. 
 
void setColUsed(int i)
Mark column as used. 
 
virtual const char * name() const =0
A name for debug printing. 
 
CoinBigIndex presolve_find_row2(int row, CoinBigIndex kcs, int collen, const int *hrow, const CoinBigIndex *clinks)
Find position of a row in a column in a column-major threaded matrix. 
 
CoinMessageHandler * handler_
Message handler. 
 
void setObjOffset(double offset)
Set the objective function offset for the original system. 
 
CoinBigIndex presolve_find_col(int col, CoinBigIndex krs, CoinBigIndex kre, const int *hcol)
Find position of a column in a row in a row-major matrix. 
 
void setRowActivity(const double *rowAct, int lenParam)
Set row activity. 
 
void setRowStatusUsingValue(int iRow)
Set status of row (artificial variable) to the correct nonbasic status given bounds and current value...
 
void setRowUsed(int i)
Mark row as used. 
 
CoinPrePostsolveMatrix(int ncols_alloc, int nrows_alloc, CoinBigIndex nelems_alloc)
`Native' constructor 
 
bool presolve_expand_row(CoinBigIndex *mrstrt, double *rowels, int *hcol, int *hinrow, presolvehlink *rlink, int nrows, int rowx)
Make sure a row (rowx) in a row-major matrix has room for one more coefficient. 
 
int pass_
Presolve pass number. 
 
const int * getColIndicesByRow() const 
Get vector of column indices for row-major packed matrix. 
 
Class to hold and manipulate an array of massaged messages. 
 
int maxSubstLevel_
Maximum substitution level. 
 
CoinMessageHandler * messageHandler() const 
Return message handler. 
 
CoinBigIndex * mcstrt_
Vector of column start positions in hrow_, colels_. 
 
void unsetRowUsed(int i)
Mark row as unused. 
 
const double * getColUpper() const 
Get column upper bounds. 
 
double * rlo_
Row (constraint) lower bounds. 
 
bool colProhibited(int i) const 
Test if column is eligible for preprocessing. 
 
bool presolve_expand_col(CoinBigIndex *mcstrt, double *colels, int *hrow, int *hincol, presolvehlink *clink, int ncols, int colx)
Make sure a column (colx) in a column-major matrix has room for one more coefficient. 
 
int presolveOptions() const 
Picks up any special options.