DyLP  1.10.4
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
OsiDylpSolverInterface.hpp
Go to the documentation of this file.
1 #ifndef OsiDylpSolverInterface_H
2 #define OsiDylpSolverInterface_H
3 
4 /*
5  Copyright (C) 2002, 2003, 2004.
6  Lou Hafer, Stephen Tse, International Business Machines Corporation and
7  others. All Rights Reserved.
8  Copyright (C) 2005 -- 2010 Lou Hafer
9 
10  This file is a portion of the COIN/OSI interface for dylp and is licensed
11  under the terms of the Eclipse Public License (EPL)
12 */
13 
23 /*
24  sccs: @(#)OsiDylpSolverInterface.hpp 1.12 09/16/04
25  cvs: $Id: OsiDylpSolverInterface.hpp 1312 2008-10-10 00:26:32Z lou $
26 */
27 
28 #include "OsiConfig.h"
29 #include <CoinPackedMatrix.hpp>
30 #include <OsiSolverInterface.hpp>
31 #include <CoinWarmStart.hpp>
32 #include <CoinMessageHandler.hpp>
33 #include <CoinMpsIO.hpp>
34 #include <CoinPresolveMatrix.hpp>
35 
36 #define DYLP_INTERNAL
37 extern "C" {
38 #include "dylp.h"
39 }
40 
42 
45 typedef enum { startInvalid = 0,
47 
48 
108 
109 { friend void OsiDylpSolverInterfaceUnitTest(const std::string &mpsDir,
110  const std::string &netLibDir) ;
111 
112 /*
113  Consult the COIN OSI documentation or relevant source code for details
114  not covered here. Supported functions are listed first, followed by
115  unsupported functions.
116 */
117 
118 public:
119 
122 
126 
130 
133  OsiSolverInterface* clone(bool copyData = true) const ;
134 
138 
142 
147  void reset() ;
148 
150 
153 
156  int readMps(const char *filename, const char *extension = "mps") ;
157 
162  int readMps(const char *filename, const char *extension,
163  int &numberSets, CoinSet **&sets) ;
164 
172  void writeMps(const char *basename,
173  const char *extension = "mps",
174  double objsense = 0.0) const ;
175 
179  void loadProblem(const CoinPackedMatrix &matrix,
180  const double *collb, const double *colub, const double *obj,
181  const char *rowsen, const double *rowrhs,
182  const double *rowrng) ;
183 
187  void loadProblem(const CoinPackedMatrix &matrix,
188  const double *collb, const double *colub, const double *obj,
189  const double *rowlb, const double *rowub) ;
190 
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) ;
198 
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) ;
206 
210  void assignProblem(CoinPackedMatrix *&matrix,
211  double *&collb, double *&colub, double *&obj,
212  char *&rowsen, double *&rowrhs, double *&rowrng) ;
213 
217  void assignProblem(CoinPackedMatrix *&matrix,
218  double *&collb, double *&colub, double *&obj,
219  double *&rowlb, double *&rowub) ;
220 
222 
226 
229  int getNumCols() const ;
230 
233  int getNumRows() const ;
234 
237  int getNumElements() const ;
238 
244  int getNumIntegers() const ;
245 
248  const double* getColLower() const ;
249 
252  const double* getColUpper() const ;
253 
256  bool isContinuous(int colIndex) const ;
257 
260  bool isBinary(int colIndex) const ;
261 
264  bool isIntegerNonBinary (int colIndex) const ;
265 
268  bool isInteger (int colIndex) const ;
269 
272  const char* getRowSense() const ;
273 
276  const double* getRightHandSide() const ;
277 
280  const double* getRowRange() const ;
281 
284  const double* getRowLower() const ;
285 
288  const double* getRowUpper() const ;
289 
292  const double* getObjCoefficients() const ;
293 
299  double getObjSense() const ;
300 
303  const CoinPackedMatrix *getMatrixByRow() const ;
304 
307  const CoinPackedMatrix *getMatrixByCol() const ;
309 
316 
319  void setObjName (std::string name) ;
320 
326  void setRowName(int ndx, std::string name) ;
327 
333  void setColName(int ndx, std::string name) ;
334 
336 
339 
342  void setContinuous(int index) ;
344 
347  void setInteger(int index) ;
349 
352  void setColLower(int index, double value) ;
354 
357  void setColUpper(int index, double value) ;
359 
362  void setRowLower(int index, double value) ;
363 
366  void setRowUpper(int index, double value) ;
367 
370  void setRowType(int index, char rowsen, double rowrhs, double rowrng) ;
371 
374  void setObjCoeff (int index, double value) ;
375 
378  void setObjective(const double * array);
379 
386  void setObjSense(double sense) ;
387 
390  void setColSolution(const double *colsol) ;
391 
394  void setRowPrice(const double*) ;
395 
396  /* For overload resolution with OSI::addCol functions. */
397 
399 
402  void addCol(const CoinPackedVectorBase &vec,
403  const double collb, const double colub, const double obj) ;
404 
407  void deleteCols(const int num, const int *colIndices) ;
408 
409  /* For overload resolution with OSI::addRow functions. */
410 
412 
415  void addRow(const CoinPackedVectorBase &row,
416  const double rowlb, const double rowub) ;
417 
420  void addRow(const CoinPackedVectorBase &row,
421  const char rowsen, const double rowrhs, const double rowrng) ;
422 
425  void deleteRows(const int num, const int *rowIndices) ;
426 
429  void applyRowCut(const OsiRowCut &cut) ;
430 
433  void applyColCut(const OsiColCut &cut) ;
435 
438 
441  void initialSolve() ;
442 
445  CoinWarmStart *getEmptyWarmStart () const ;
446 
449  CoinWarmStart *getWarmStart() const ;
450 
458  bool setWarmStart(const CoinWarmStart *warmStart) ;
459 
462  void resolve() ;
463 
466  void markHotStart() ;
467 
470  void solveFromHotStart() ;
471 
474  void unmarkHotStart() ;
475 
477 
480 
483  bool isAbandoned() const ;
484 
487  bool isProvenOptimal() const ;
488 
491  bool isProvenPrimalInfeasible() const ;
492 
496  bool isProvenDualInfeasible() const ;
497 
500  bool isIterationLimitReached() const ;
501 
504  int getIterationCount() const ;
505 
511  bool isPrimalObjectiveLimitReached() const ;
512 
518  bool isDualObjectiveLimitReached() const ;
520 
521 
524 
527  double getInfinity() const ;
528 
531  bool setIntParam(OsiIntParam key, int value) ;
532 
535  bool setDblParam(OsiDblParam key, double value) ;
536 
539  bool setStrParam(OsiStrParam key, const std::string& value) ;
540 
543  bool setHintParam(OsiHintParam key, bool sense = true,
544  OsiHintStrength strength = OsiHintTry, void *info = 0) ;
545 
548  bool getIntParam(OsiIntParam key, int &value) const ;
549 
552  bool getDblParam(OsiDblParam key, double &value) const ;
553 
556  bool getStrParam(OsiStrParam key, std::string &value) const ;
557 
558  /* For overload resolution with OSI::getHintParam functions. */
559 
561 
564  bool getHintParam(OsiHintParam key, bool &sense,
565  OsiHintStrength &strength, void *&info) const ;
566 
569  inline void newLanguage(CoinMessages::Language language)
570  { setOsiDylpMessages(language) ; }
571 
574  inline void setLanguage(CoinMessages::Language language)
575  { setOsiDylpMessages(language) ; }
576 
578 
581 
584  double getObjValue() const ;
585 
588  const double* getColSolution() const ;
589 
592  const double* getRowPrice() const ;
593 
596  const double* getReducedCost() const ;
597 
600  const double* getRowActivity() const ;
601 
610  std::vector<double *> getDualRays(int maxNumRays, bool fullRay) const ;
611 
614  std::vector<double *> getPrimalRays(int maxNumRays) const ;
615 
617 
620 
622  int canDoSimplexInterface() const ;
623 
635  void enableFactorization() const ;
636 
643  void disableFactorization() const ;
644 
646  bool basisIsAvailable () const ;
647 
655  void getBasisStatus (int *archStatus, int *logStatus) const ;
656 
663  int setBasisStatus (const int *archStatus, const int *logStatus) ;
664 
671  virtual void getReducedGradient(double *columnReducedCosts,
672  double *duals, const double *c) const ;
673 
675  virtual void getBasics(int *index) const ;
676 
678  virtual void getBInvCol(int col, double *betak) const ;
679 
681  virtual void getBInvACol(int col, double *abarj) const ;
682 
684  virtual void getBInvRow(int row, double *betai) const ;
685 
687  virtual void getBInvARow(int row, double *abari, double *betai = 0) const ;
688 
690 
691 
694 
701  void activateRowCutDebugger (const char * modelName) ;
702 
713  void activateRowCutDebugger (const double *solution,
714  bool keepContinuous = false) ;
715 
716 # if ODSI_PARANOIA >= 1
717 
726  void indexCheck (int k, bool isCol, std::string rtnnme) ;
727 # endif
728 
730 
733 
736  void dylp_controlfile(const char* name, const bool silent,
737  const bool mustexist = true) ;
738 
741  void dylp_logfile(const char* name, bool echo = false) ;
742 
745  void dylp_outfile(const char* name) ;
746 
749  void dylp_printsoln(bool wantSoln, bool wantStats) ;
750 
753  void setOsiDylpMessages(CoinMessages::Language local_language) ;
754 
756 
759 
760 
763  void branchAndBound() ;
764 
766 
776 
779 
782 
785 
787 
788 private:
789 
790 /*
791  Private implementation state and helper functions. If you're contemplating
792  using any of these, you should have a look at the code.
793  See OsiDylpSolverInterface.cpp for descriptions.
794 */
801 
808 
810 
813 
815  static int reference_count ;
817  static bool basis_ready ;
818 
820 
821 
827 
835 
842 
848 
854 
865 
871  double obj_sense ;
872 
875  double odsiInfinity ;
876 
879  const std::string solvername ;
880 
883  mutable void *info_[OsiLastHintParam] ;
884 
887  bool mps_debug ;
888 
897 
920 
938  struct
942 
948  bool solnIsFresh ;
949 
956  mutable struct
957  { int simplex ;
959 
961 
962 
963 
970 
971  mutable double _objval ;
972  mutable double* _col_obj ;
973  mutable double* _col_x ;
974  mutable double* _col_cbar ;
975 
976  mutable double* _row_rhs ;
977  mutable double* _row_lower ;
978  mutable double* _row_upper ;
979  mutable char* _row_sense ;
980  mutable double* _row_range ;
981  mutable double* _row_lhs ;
982  mutable double* _row_price ;
983 
986 
988 
995 
1002 
1010 
1019 
1022 
1025 
1028 
1030  mutable double* saved_col_obj ;
1031  mutable double* saved_row_rhs ;
1032  mutable double* saved_row_lower ;
1033  mutable double* saved_row_upper ;
1034  mutable char* saved_row_sense ;
1035  mutable double* saved_row_range ;
1038 
1040 
1050  CoinPresolveMatrix *initialisePresolve(bool keepIntegers) ;
1052 
1054  void doPresolve() ;
1055 
1057  bool evalPresolve() ;
1058 
1060  void saveOriginalSys() ;
1061 
1063  void installPresolve() ;
1064 
1067 
1069  void doPostsolve() ;
1070 
1072  void installPostsolve() ;
1073 
1075  void destruct_presolve() ;
1076 
1078 
1082 
1084  bool ensureOwnership () const ;
1085 
1086 //}@
1087 
1091  void construct_lpprob() ;
1092  void construct_options() ;
1093  void construct_consys(int cols, int rows) ;
1094  void dylp_ioinit() ;
1095  void gen_rowparms(int rowcnt,
1096  double *rhs, double *rhslow, contyp_enum *ctyp,
1097  const double *rowlb, const double *rowub) ;
1098  void gen_rowparms(int rowcnt,
1099  double *rhs, double *rhslow, contyp_enum *ctyp,
1100  const char *sense, const double *rhsin, const double *range) ;
1101  void load_problem(const CoinMpsIO &mps) ;
1102  void load_problem(const CoinPackedMatrix &matrix,
1103  const double* col_lower, const double* col_upper, const double* obj,
1104  const contyp_enum *ctyp, const double* rhs, const double* rhslow) ;
1105  void load_problem (const int colcnt, const int rowcnt,
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) ;
1111 
1115  lpret_enum do_lp (ODSI_start_enum start, bool echo) ;
1116 
1118  void setBasisInLpprob (const OsiDylpWarmStartBasis *wsb,
1119  lpprob_struct *lpprob) const ;
1121 
1124  void destruct_primal_cache() ;
1125  void destruct_dual_cache() ;
1126  void destruct_col_cache(bool structure) ;
1127  void destruct_row_cache(bool structure) ;
1128  void destruct_cache(bool rowStructure, bool colStructure) ;
1129  void destruct_problem(bool preserve_interface) ;
1130  void detach_dylp() const ;
1132 
1133 
1135 /*
1136  There are separate groups for member and static methods so that doxygen
1137  won't promote the group to the top level.
1138 */
1140 
1141  void add_col(const CoinPackedVectorBase& coin_coli,
1142  vartyp_enum vtypi, double vlbi,
1143  double vubi, double obji, const std::string *nme) ;
1144  void add_row(const CoinPackedVectorBase& coin_rowi,
1145  char clazzi, contyp_enum ctypi,
1146  double rhsi, double rhslowi, const std::string *nme) ;
1147  void calc_objval() ;
1148  contyp_enum bound_to_type(double lower, double upper) ;
1149  void gen_rowiparms(contyp_enum* ctypi, double* rhsi, double* rhslowi,
1150  char sensei, double rhsini, double rangei) ;
1151  void gen_rowiparms(contyp_enum* ctypi, double* rhsi, double* rhslowi,
1152  double rowlbi, double rowubi) ;
1153  void unimp_hint(bool dylpSense, bool hintSense,
1154  OsiHintStrength hintStrength, const char *msgString) ;
1155  void pessimal_primal() ;
1156  void reduceActiveBasis() ;
1157 
1159 
1162  static contyp_enum sense_to_type(char type) ;
1163  static char type_to_sense(contyp_enum type) ;
1165 
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) ;
1175 /*
1176  Specializations for more complicated structures.
1177 */
1178  static basis_struct* copy_basis(const basis_struct* src, int dstsze) ;
1179  static void copy_basis(const basis_struct* src, basis_struct* dst) ;
1180  static lpprob_struct* copy_lpprob(const lpprob_struct* src) ;
1182 
1183 #ifndef _MSC_VER
1184 
1189  template<class T> static void assert_same(const T& t1, const T& t2,
1190  bool exact) ;
1191  template<class T> static void assert_same(const T* t1, const T* t2,
1192  int n, bool exact) ;
1193 
1194  static void assert_same(double d1, double d2, bool exact) ;
1195 
1196  static void assert_same(const basis_struct& b1,
1197  const basis_struct& b2, bool exact) ;
1198  static void assert_same(const consys_struct& c1, const
1199  consys_struct& c2, bool exact) ;
1200  static void assert_same(const conbnd_struct& c1, const
1201  conbnd_struct& c2, bool exact) ;
1202  static void assert_same(const lpprob_struct& l1,
1203  const lpprob_struct& l2, bool exact) ;
1204  static void assert_same(const OsiDylpSolverInterface& o1,
1205  const OsiDylpSolverInterface& o2, bool exact) ;
1207 #endif /* ! _MSC_VER */
1208 
1215 
1221  template<class T> inline static T* idx_vec (T* vec) { return (vec-1) ; }
1222 
1224  inline static int idx (int i) { return (i+1) ; }
1225 
1231  template<class T> inline static T* inv_vec (T* vec) { return (vec+1) ; }
1232 
1234  inline static int inv (int i) { return (i-1) ; }
1235 
1236  static pkvec_struct* packed_vector(
1237  const CoinShallowPackedVector vector, int dimension) ;
1238  static void packed_vector(
1239  const CoinShallowPackedVector vector, int dimension, pkvec_struct *dst) ;
1241 
1244  static std::string make_filename(const char *filename,
1245  const char *ext1, const char *ext2) ;
1247 
1248 } ;
1249 
1250 
1251 /*
1252  OsiDylpSolverInterfaceTest.cpp
1253 */
1254 
1262 void OsiDylpSolverInterfaceUnitTest(const std::string & mpsDir,
1263  const std::string &netLibDir) ;
1264 
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&#39;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&#39;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.
void detach_dylp() const
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.
Column Cut Class.
Definition: OsiColCut.hpp:23
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 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)
contyp_enum
Definition: dy_consys.h:338
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.
COIN OSI API for dylp.
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 * 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.
int ioid
Definition: dylib_io.h:39
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.
MPS IO Interface.
Definition: CoinMpsIO.hpp:401
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.
Row Cut Class.
Definition: OsiRowCut.hpp:29
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.
vartyp_enum
Definition: dy_consys.h:354
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.
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.
lpret_enum
Definition: dylp.h:170
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.
Definition: CoinMpsIO.hpp:269
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.