1 #ifndef OsiDylpSolverInterface_H 
    2 #define OsiDylpSolverInterface_H 
  110                                              const std::string &netLibDir) ;
 
  156   int readMps(
const char *filename, 
const char *extension = 
"mps") ;
 
  162   int readMps(
const char *filename, 
const char *extension,
 
  163               int &numberSets, 
CoinSet **&sets) ;
 
  173                 const char *extension = 
"mps",
 
  174                 double objsense = 0.0) 
const ;
 
  180                    const double *collb, 
const double *colub, 
const double *obj,
 
  181                    const char *rowsen, 
const double *rowrhs,
 
  182                    const double *rowrng) ;
 
  188                    const double *collb, 
const double *colub, 
const double *obj,
 
  189                    const double *rowlb, 
const double *rowub) ;
 
  194   void loadProblem(
const int colcnt, 
const int rowcnt,
 
  195                const int *start, 
const int *index, 
const double *value,
 
  196                const double *collb, 
const double *colub, 
const double *obj,
 
  197                const char *sense, 
const double *rhsin, 
const double *range) ;
 
  202   void loadProblem(
const int colcnt, 
const int rowcnt,
 
  203                    const int *start, 
const int *index, 
const double *value,
 
  204                    const double *collb, 
const double *colub, 
const double *obj,
 
  205                    const double *row_lower, 
const double *row_upper) ;
 
  211                      double *&collb, 
double *&colub, 
double *&obj, 
 
  212                      char *&rowsen, 
double *&rowrhs, 
double *&rowrng) ;
 
  218                      double *&collb, 
double *&colub, 
double *&obj,
 
  219                      double *&rowlb, 
double *&rowub) ;
 
  370   void setRowType(
int index, 
char rowsen, 
double rowrhs, 
double rowrng) ;
 
  403               const double collb, 
const double colub, 
const double obj) ;
 
  407   void deleteCols(
const int num, 
const int *colIndices) ;
 
  416               const double rowlb, 
const double rowub) ;
 
  421               const char rowsen, 
const double rowrhs, 
const double rowrng) ;
 
  425   void deleteRows(
const int num, 
const int *rowIndices) ;
 
  610   std::vector<double *> 
getDualRays(
int maxNumRays, 
bool fullRay) 
const ;
 
  663   int setBasisStatus (
const int *archStatus, 
const int *logStatus) ;
 
  672                                   double *duals, 
const double *c) 
const ;
 
  675   virtual void getBasics(
int *index) 
const ;
 
  678   virtual void getBInvCol(
int col, 
double *betak) 
const ;
 
  681   virtual void getBInvACol(
int col, 
double *abarj) 
const ;
 
  684   virtual void getBInvRow(
int row, 
double *betai) 
const ;
 
  687   virtual void getBInvARow(
int row, 
double *abari, 
double *betai = 0) 
const ;
 
  714                                bool keepContinuous = 
false) ;
 
  716 # if ODSI_PARANOIA >= 1 
  726   void indexCheck (
int k, 
bool isCol, std::string rtnnme) ;
 
  737                         const bool mustexist = 
true) ;
 
  741   void dylp_logfile(
const char* name, 
bool echo = 
false) ;
 
 1097                     const double *rowlb, 
const double *rowub) ;
 
 1100                const char *sense, 
const double *rhsin, 
const double *range) ;
 
 1103          const double* col_lower, 
const double* col_upper, 
const double* obj,
 
 1104          const contyp_enum *ctyp, 
const double* rhs, 
const double* rhslow) ;
 
 1106          const int *start, 
const int *lens,
 
 1107          const int *index, 
const double *value,
 
 1108          const double* col_lower, 
const double* col_upper, 
const double* obj,
 
 1109          const contyp_enum *ctyp, 
const double* rhs, 
const double* rhslow) ;
 
 1143                double vubi, 
double obji, 
const std::string *nme) ;
 
 1146                double rhsi, 
double rhslowi, 
const std::string *nme) ;
 
 1150                             char sensei, 
double rhsini, 
double rangei) ;
 
 1152                             double rowlbi, 
double rowubi) ;
 
 1153   void unimp_hint(
bool dylpSense, 
bool hintSense,
 
 1172   template<
class T> 
static void copy(
const T* src, T* dst, 
int n) ;
 
 1173   template<
class T> 
static T* 
copy(
const T* src, 
int n) ;
 
 1174   template<
class T> 
static T* 
copy(
const T* src) ;
 
 1189   template<
class T> 
static void assert_same(
const T& t1, 
const T& t2,
 
 1191   template<
class T> 
static void assert_same(
const T* t1, 
const T* t2,
 
 1192                                             int n, 
bool exact) ;
 
 1194   static void assert_same(
double d1, 
double d2, 
bool exact) ;
 
 1221   template<
class T> 
inline static T* 
idx_vec (T* vec) { 
return (vec-1) ; }
 
 1224   inline static int idx (
int i) { 
return (i+1) ; }
 
 1231   template<
class T> 
inline static T* 
inv_vec (T* vec) { 
return (vec+1) ; }
 
 1234   inline static int inv (
int i) { 
return (i-1) ; }
 
 1245                                    const char *ext1, 
const char *ext2) ;
 
 1262 void OsiDylpSolverInterfaceUnitTest(
const std::string & mpsDir,
 
 1263                                     const std::string &netLibDir) ;
 
 1265 #endif // OsiDylpSolverInterface_H 
void doPostsolve()
Apply the postsolve transforms from postActions_. 
 
void setRowPrice(const double *)
Set the value of the dual variables in the problem solution. 
 
const double * getRowPrice() const 
Return the vector of dual variables for the solution. 
 
lpprob_struct * lpprob
The lp problem. 
 
void setObjSense(double sense)
Set the sense (min/max) of the objective. 
 
Just a marker, so that OsiSolverInterface can allocate a static sized array to store parameters...
 
double getInfinity() const 
Get dylp's value for infinity. 
 
lpopts_struct * resolveOptions
Solver options for a resolve. 
 
const double * getRowActivity() const 
Return the vector of row activity for the solution. 
 
CoinPresolveMatrix * preObj_
The presolve object. 
 
void construct_consys(int cols, int rows)
 
bool keepIntegers_
true if presolve should consider integrality 
 
static void copy(const T *src, T *dst, int n)
 
const double * getRowLower() const 
Get the row (constraint) lower bound vector. 
 
static int inv(int i)
Convert 1-based index to 0-based index. 
 
void setColSolution(const double *colsol)
Set the value of the primal variables in the problem solution. 
 
bool isAbandoned() const 
True if dylp abandoned the problem. 
 
CoinWarmStart * hotstart_fallback
Warm start object used as a fallback for hot start. 
 
void setLanguage(CoinMessages::Language language)
An alias for OsiDylpSolverInterface::newLanguage. 
 
virtual void getBInvRow(int row, double *betai) const 
Get a row of the basis inverse. 
 
lpstats_struct * statistics
The statistics structure. 
 
void doPresolve()
Perform presolve transformations. 
 
void destruct_presolve()
Delete presolve information. 
 
virtual void setColLower(int elementIndex, double elementValue)=0
Set a single column lower bound. 
 
const double * getRowRange() const 
Get the row (constraint) range vector. 
 
ODSI_start_enum
Enum to specify cold/warm/hot start. 
 
void branchAndBound()
Invoke the solver's built-in branch-and-bound algorithm. 
 
static lpprob_struct * copy_lpprob(const lpprob_struct *src)
 
int readMps(const char *filename, const char *extension="mps")
Read a problem description in MPS format from a file. 
 
virtual void getReducedGradient(double *columnReducedCosts, double *duals, const double *c) const 
Calculate duals and reduced costs for the given objective coefficients. 
 
bool isBinary(int colIndex) const 
Return true if the variable is binary. 
 
void add_row(const CoinPackedVectorBase &coin_rowi, char clazzi, contyp_enum ctypi, double rhsi, double rhslowi, const std::string *nme)
 
void markHotStart()
Create a hot start snapshot. 
 
void add_col(const CoinPackedVectorBase &coin_coli, vartyp_enum vtypi, double vlbi, double vubi, double obji, const std::string *nme)
 
static int idx(int i)
Convert 0-based index to 1-based index. 
 
const double * getColUpper() const 
Get the column (variable) upper bound vector. 
 
void resolve()
Call dylp to reoptimize (warm start). 
 
void getBasisStatus(int *archStatus, int *logStatus) const 
Retrieve status information for architectural and logical variables. 
 
lptols_struct * tolerances
Solver numeric tolerances. 
 
const CoinPresolveAction * postActions_
List of postsolve actions. 
 
int getNumRows() const 
Get the number of rows (constraints) 
 
void activateRowCutDebugger(const char *modelName)
Activate the row cut debugger. 
 
void dylp_outfile(const char *name)
Establish an output (solution and/or statistics) file. 
 
CoinWarmStart * getWarmStart() const 
Build a warm start object for the current lp solution. 
 
int getIterationCount() const 
Get the number of iterations for the last lp. 
 
static T * idx_vec(T *vec)
Convert 0-based vector pointer to 1-based vector pointer. 
 
Abstract base class of all presolve routines. 
 
void assignProblem(CoinPackedMatrix *&matrix, double *&collb, double *&colub, double *&obj, char *&rowsen, double *&rowrhs, double *&rowrng)
Load a problem description (OSI packed matrix, row sense, parameters destroyed). 
 
friend void OsiDylpSolverInterfaceUnitTest(const std::string &mpsDir, const std::string &netLibDir)
Unit test for OsiDylpSolverInterface. 
 
lpret_enum do_lp(ODSI_start_enum start, bool echo)
Common core method to invoke dylp. 
 
void deleteRows(const int num, const int *rowIndices)
Delete row(s) (constraint(s)) from the problem. 
 
void destruct_problem(bool preserve_interface)
 
static pkvec_struct * packed_vector(const CoinShallowPackedVector vector, int dimension)
 
void gen_rowiparms(contyp_enum *ctypi, double *rhsi, double *rhslowi, char sensei, double rhsini, double rangei)
 
virtual void setColUpper(int elementIndex, double elementValue)=0
Set a single column upper bound. 
 
void setObjCoeff(int index, double value)
Set an objective function coefficient. 
 
void destruct_dual_cache()
 
void dylp_logfile(const char *name, bool echo=false)
Establish a log file. 
 
basisCondition
Codes for basis condition. 
 
bool isProvenDualInfeasible() const 
True if dylp reported the problem to be dual infeasible (primal unbounded) 
 
bool isPrimalObjectiveLimitReached() const 
Is the primal objective limit reached? 
 
void setInteger(int index)
Set a single variable to be integer. 
 
consys_struct * savedConsys_
Saved copy of original problem. 
 
~OsiDylpSolverInterface()
Destructor. 
 
int passLimit_
Limit for iterations of the major presolve loop. 
 
bool setDblParam(OsiDblParam key, double value)
Set an OSI double parameter. 
 
double getObjSense() const 
Get the objective function sense (min/max) 
 
static char type_to_sense(contyp_enum type)
 
virtual void addCol(const CoinPackedVectorBase &vec, const double collb, const double colub, const double obj)=0
Add a column (primal variable) to the problem. 
 
void disableFactorization() const 
Undo the effects of enableFactorization. 
 
struct OsiDylpSolverInterface::@25 simplex_state
State related to the OsiSimplex interface. 
 
void setColName(int ndx, std::string name)
Set a column name. 
 
lpopts_struct * initialSolveOptions
Solver options for an initial solve. 
 
void * info_[OsiLastHintParam]
Array for info blocks associated with hints. 
 
void loadProblem(const CoinPackedMatrix &matrix, const double *collb, const double *colub, const double *obj, const char *rowsen, const double *rowrhs, const double *rowrng)
Load a problem description (OSI packed matrix, row sense, parameters unaffected). ...
 
Abstract Base Class for describing an interface to a solver. 
 
virtual bool getHintParam(OsiHintParam key, bool &yesNo, OsiHintStrength &strength, void *&otherInformation) const 
Get a hint parameter (all information) 
 
void dylp_printsoln(bool wantSoln, bool wantStats)
Print the solution and/or statistics to the output file. 
 
bool setIntParam(OsiIntParam key, int value)
Set an OSI integer parameter. 
 
void load_problem(const CoinMpsIO &mps)
 
void setOsiDylpMessages(CoinMessages::Language local_language)
Set the language for messages. 
 
double getObjValue() const 
Get the objective function value for the solution. 
 
OsiDylpSolverInterface & operator=(const OsiDylpSolverInterface &rhs)
Assignment. 
 
Abstract base class for various sparse vectors. 
 
OsiDylpSolverInterface()
Default constructor. 
 
ioid local_logchn
Log stream for this ODSI instance. 
 
Declarations for CoinPresolveMatrix and CoinPostsolveMatrix and their common base class CoinPrePostso...
 
static basis_struct * copy_basis(const basis_struct *src, int dstsze)
 
bool isDualObjectiveLimitReached() const 
Is the dual objective limit reached? 
 
CoinPackedMatrix * saved_matrix_by_col
 
void setRowName(int ndx, std::string name)
Set a row name. 
 
void setContinuous(int index)
Set a single variable to be continuous. 
 
const CoinPackedMatrix * getMatrixByCol() const 
Get a pointer to a column-major copy of the constraint matrix. 
 
void destruct_cache(bool rowStructure, bool colStructure)
 
CoinPackedMatrix * _matrix_by_row
 
CoinPackedMatrix * saved_matrix_by_row
 
virtual void getBInvCol(int col, double *betak) const 
Get a column of the basis inverse. 
 
bool isIterationLimitReached() const 
True if dylp reached the iteration limit. 
 
bool initial_gtxecho
Controls output of log information to stdout during initialSolve() 
 
This is a first attempt at a message handler. 
 
bool mps_debug
Allow messages from CoinMpsIO package. 
 
virtual void getBasics(int *index) const 
Get indices of basic variables. 
 
int getNumElements() const 
Get the number of non-zero coefficients. 
 
void writeMps(const char *basename, const char *extension="mps", double objsense=0.0) const 
Write the problem into the specified file in MPS format. 
 
bool setStrParam(OsiStrParam key, const std::string &value)
Set an OSI string parameter. 
 
const double * getRightHandSide() const 
Get the row (constraint) right-hand-side vector. 
 
const double * getColSolution() const 
Return the vector of primal variables for the solution. 
 
int getNumIntegers() const 
Get the number of integer variables. 
 
lpret_enum lp_retval
Result of last call to solver for this ODSI instance. 
 
virtual void getBInvARow(int row, double *abari, double *betai=0) const 
Get a row of the tableau. 
 
struct OsiDylpSolverInterface::@24 activeBasis
Active basis. 
 
const double * getObjCoefficients() const 
Get the objective function coefficient vector. 
 
CoinPresolveMatrix * initialisePresolve(bool keepIntegers)
Create and load a presolve object. 
 
double * saved_col_obj
Saved pointers to cached structural vectors. 
 
const double * getColLower() const 
Get the column (variable) lower bound vector. 
 
void setRowLower(int index, double value)
Set the lower bound on a row (constraint) 
 
void setColLower(int index, double value)
Set the lower bound on a column (variable) 
 
void enableFactorization() const 
Prepare the solver for the use of tableau access methods. 
 
double odsiInfinity
The value of infinity. 
 
void deleteCols(const int num, const int *colIndices)
Remove column(s) (variable(s)) from the problem. 
 
double obj_sense
Objective function sense for this ODSI instance. 
 
Augments CoinPrePostsolveMatrix with information about the problem that is only needed during postsol...
 
std::vector< double * > getPrimalRays(int maxNumRays) const 
Get as many primal rays as the solver can provide. 
 
void setRowUpper(int index, double value)
Set the upper bound on a row (constraint) 
 
void addRow(const CoinPackedVectorBase &row, const double rowlb, const double rowub)
Add a row (constraint) to the problem. 
 
static int reference_count
Number of outstanding ODSI objects. 
 
bool getDblParam(OsiDblParam key, double &value) const 
Get an OSI double parameter. 
 
static contyp_enum sense_to_type(char type)
 
void installPostsolve()
Reload the original constraint system with the postsolved basis. 
 
void applyColCut(const OsiColCut &cut)
Apply a column (variable) cut (adjust one or more bounds) 
 
void solveFromHotStart()
Call dylp to reoptimize (hot start). 
 
Copyright (C) 2000 – 2003, International Business Machines Corporation and others. 
 
const std::string solvername
Solver name (dylp). 
 
void unmarkHotStart()
Delete the hot start snapshot. 
 
Sparse Matrix Base Class. 
 
virtual void getBInvACol(int col, double *abarj) const 
Get a column of the tableau. 
 
The dylp warm start class. 
 
static T * inv_vec(T *vec)
Convert 1-based vector pointer to 0-based vector pointer. 
 
Augments CoinPrePostsolveMatrix with information about the problem that is only needed during presolv...
 
void installPresolve()
Load the presolved problem into the ODSI object. 
 
void destruct_col_cache(bool structure)
 
This means it is only a hint. 
 
bool isContinuous(int colIndex) const 
Return true if the variable is continuous. 
 
void initialSolve()
Solve an lp from scratch. 
 
Language
Supported languages. 
 
bool solnIsFresh
The most recent solution from dylp is valid. 
 
int canDoSimplexInterface() const 
Return the simplex implementation level. 
 
void destruct_row_cache(bool structure)
 
std::vector< double * > getDualRays(int maxNumRays, bool fullRay) const 
Get as many dual rays as the solver can provide. 
 
bool isInteger(int colIndex) const 
Return true if the variable is integer (general or binary) 
 
bool resolve_gtxecho
Controls output of log information to stdout during resolve() and solveFromHotStart() ...
 
void addCol(const CoinPackedVectorBase &vec, const double collb, const double colub, const double obj)
Add a column (variable) to the problem. 
 
ioid local_outchn
Output stream for this ODSI instance. 
 
bool setWarmStart(const CoinWarmStart *warmStart)
Apply a warm start object. 
 
CoinPostsolveMatrix * initialisePostsolve(CoinPresolveMatrix *&preObj)
Create and load a postsolve object. 
 
virtual void setInteger(int index)=0
Set the index-th variable to be an integer variable. 
 
void setBasisInLpprob(const OsiDylpWarmStartBasis *wsb, lpprob_struct *lpprob) const 
Install a basis in the lp problem structure. 
 
CoinPackedMatrix * _matrix_by_col
 
virtual void setContinuous(int index)=0
Set the index-th variable to be a continuous variable. 
 
const double * getReducedCost() const 
Return the vector of reduced costs for the solution. 
 
bool evalPresolve()
Decide whether presolve was effective enough to use. 
 
bool isProvenPrimalInfeasible() const 
True if dylp reported the problem to be primal infeasible. 
 
bool getHintParam(OsiHintParam key, bool &sense, OsiHintStrength &strength, void *&info) const 
Get an OSI hint. 
 
void newLanguage(CoinMessages::Language language)
Change the language for OsiDylp messages. 
 
void setObjName(std::string name)
Set the objective function name. 
 
static std::string make_filename(const char *filename, const char *ext1, const char *ext2)
 
bool getIntParam(OsiIntParam key, int &value) const 
Get an OSI integer parameter. 
 
OsiSolverInterface * clone(bool copyData=true) const 
Clone the solver object. 
 
bool ensureOwnership() const 
Ensure that the solver is ready for simplex operations. 
 
consys_struct * consys
The constraint system. 
 
bool basisIsAvailable() const 
Check if an optimal basis is available. 
 
virtual void addRow(const CoinPackedVectorBase &vec, const double rowlb, const double rowub)=0
Add a row (constraint) to the problem. 
 
void gen_rowparms(int rowcnt, double *rhs, double *rhslow, contyp_enum *ctyp, const double *rowlb, const double *rowub)
 
int getNumCols() const 
Get the number of columns (variables) 
 
CoinWarmStart * getEmptyWarmStart() const 
Get an empty OsiDylpWarmStartBasis object. 
 
bool isProvenOptimal() const 
True if dylp reported an optimal solution. 
 
bool isIntegerNonBinary(int colIndex) const 
Return true if the variable is general integer. 
 
const CoinPackedMatrix * getMatrixByRow() const 
Get a pointer to a row-major copy of the constraint matrix. 
 
bool setHintParam(OsiHintParam key, bool sense=true, OsiHintStrength strength=OsiHintTry, void *info=0)
Set an OSI hint. 
 
int setBasisStatus(const int *archStatus, const int *logStatus)
Set a basis and update the factorization and solution. 
 
CoinPostsolveMatrix * postObj_
The postsolve object. 
 
const double * getRowUpper() const 
Get the row (constraint) upper bound vector. 
 
bool getStrParam(OsiStrParam key, std::string &value) const 
Get an OSI string parameter. 
 
void unimp_hint(bool dylpSense, bool hintSense, OsiHintStrength hintStrength, const char *msgString)
 
Abstract base class for warm start information. 
 
void applyRowCut(const OsiRowCut &cut)
Apply a row (constraint) cut (add one constraint) 
 
void setObjective(const double *array)
Set the objective coefficients for all columns. 
 
static bool basis_ready
Basis maintenance package is initialised. 
 
contyp_enum bound_to_type(double lower, double upper)
 
const char * getRowSense() const 
Get the row sense (constraint type) vector. 
 
void setColUpper(int index, double value)
Set the upper bound on a column (variable) 
 
void setRowType(int index, char rowsen, double rowrhs, double rowrng)
Set the type of a row (constraint) 
 
void saveOriginalSys()
Save the original problem. 
 
Very simple class for containing data on set. 
 
static void assert_same(const T &t1, const T &t2, bool exact)
 
void reset()
Reset the solver object to the state produced by the default constructor. 
 
void dylp_controlfile(const char *name, const bool silent, const bool mustexist=true)
Process an options (.spc) file. 
 
void destruct_primal_cache()