Osi  0.107.9
OsiGrbSolverInterface.hpp
Go to the documentation of this file.
1 //-----------------------------------------------------------------------------
2 // name: OSI Interface for Gurobi
3 // template: OSI Cplex Interface written by T. Achterberg
4 // author: Stefan Vigerske
5 // Humboldt University Berlin
6 // date: 09/02/2009
7 // license: this file may be freely distributed under the terms of EPL
8 // comments: please scan this file for '???' and read the comments
9 //-----------------------------------------------------------------------------
10 // Copyright (C) 2009 Humboldt University Berlin and others.
11 // All Rights Reserved.
12 
13 // $Id: OsiGrbSolverInterface.hpp 1830 2011-11-26 16:46:55Z stefan $
14 
15 #ifndef OsiGrbSolverInterface_H
16 #define OsiGrbSolverInterface_H
17 
18 #include <string>
19 #include "OsiSolverInterface.hpp"
20 
21 typedef struct _GRBmodel GRBmodel;
22 typedef struct _GRBenv GRBenv;
23 
29 class OsiGrbSolverInterface : virtual public OsiSolverInterface {
30  friend void OsiGrbSolverInterfaceUnitTest(const std::string & mpsDir, const std::string & netlibDir);
31 
32 public:
33 
34  //---------------------------------------------------------------------------
37  virtual void initialSolve();
39 
41  virtual void resolve();
42 
44  virtual void branchAndBound();
46 
47  //---------------------------------------------------------------------------
63  // Set an integer parameter
64  bool setIntParam(OsiIntParam key, int value);
65  // Set an double parameter
66  bool setDblParam(OsiDblParam key, double value);
67  // Set a string parameter
68  bool setStrParam(OsiStrParam key, const std::string & value);
69  // Set a hint parameter
70  bool setHintParam(OsiHintParam key, bool yesNo = true, OsiHintStrength strength = OsiHintTry, void* = NULL);
71  // Get an integer parameter
72  bool getIntParam(OsiIntParam key, int& value) const;
73  // Get an double parameter
74  bool getDblParam(OsiDblParam key, double& value) const;
75  // Get a string parameter
76  bool getStrParam(OsiStrParam key, std::string& value) const;
77  // Get a hint parameter
78  bool getHintParam(OsiHintParam key, bool& yesNo, OsiHintStrength& strength, void*& otherInformation) const;
79  // Get a hint parameter
80  bool getHintParam(OsiHintParam key, bool& yesNo, OsiHintStrength& strength) const;
81  // Get a hint parameter
82  bool getHintParam(OsiHintParam key, bool& yesNo) const;
83  // Set mipstart option (pass column solution to CPLEX before MIP start)
84  void setMipStart(bool value) { domipstart = value; }
85  // Get mipstart option value
86  bool getMipStart() const { return domipstart; }
88 
89  //---------------------------------------------------------------------------
91 
92  virtual bool isAbandoned() const;
95  virtual bool isProvenOptimal() const;
97  virtual bool isProvenPrimalInfeasible() const;
99  virtual bool isProvenDualInfeasible() const;
101  virtual bool isPrimalObjectiveLimitReached() const;
103  virtual bool isDualObjectiveLimitReached() const;
105  virtual bool isIterationLimitReached() const;
107 
108  //---------------------------------------------------------------------------
111 
118  CoinWarmStart* getEmptyWarmStart() const;
119 
121  virtual CoinWarmStart* getWarmStart() const;
124  virtual bool setWarmStart(const CoinWarmStart* warmstart);
126 
127  //---------------------------------------------------------------------------
134  virtual void markHotStart();
137  virtual void solveFromHotStart();
139  virtual void unmarkHotStart();
141 
142  //---------------------------------------------------------------------------
157  virtual int getNumCols() const;
159 
161  virtual int getNumRows() const;
162 
164  virtual int getNumElements() const;
165 
167  virtual const double * getColLower() const;
168 
170  virtual const double * getColUpper() const;
171 
181  virtual const char * getRowSense() const;
182 
191  virtual const double * getRightHandSide() const;
192 
201  virtual const double * getRowRange() const;
202 
204  virtual const double * getRowLower() const;
205 
207  virtual const double * getRowUpper() const;
208 
210  virtual const double * getObjCoefficients() const;
211 
213  virtual double getObjSense() const;
214 
216  virtual bool isContinuous(int colNumber) const;
217 
219  virtual const CoinPackedMatrix * getMatrixByRow() const;
220 
222  virtual const CoinPackedMatrix * getMatrixByCol() const;
223 
225  virtual double getInfinity() const;
227 
230  virtual const double * getColSolution() const;
232 
234  virtual const double * getRowPrice() const;
235 
237  virtual const double * getReducedCost() const;
238 
241  virtual const double * getRowActivity() const;
242 
244  virtual double getObjValue() const;
245 
248  virtual int getIterationCount() const;
249 
267  virtual std::vector<double*> getDualRays(int maxNumRays,
268  bool fullRay=false) const;
280  virtual std::vector<double*> getPrimalRays(int maxNumRays) const;
282 
283 
284  //---------------------------------------------------------------------------
285 
288  //-------------------------------------------------------------------------
292  virtual void setObjCoeff(int elementIndex, double elementValue);
293 
295  virtual void setObjCoeffSet(const int* indexFirst, const int* indexLast,
296  const double* coeffList);
297 
301  virtual void setColLower(int elementIndex, double elementValue);
302 
306  virtual void setColUpper(int elementIndex, double elementValue);
307 
311  virtual void setColBounds(int elementIndex, double lower, double upper);
312 
320  virtual void setColSetBounds(const int* indexFirst, const int* indexLast,
321  const double* boundList);
322 
325  virtual void setRowLower(int elementIndex, double elementValue);
326 
329  virtual void setRowUpper(int elementIndex, double elementValue);
330 
334  virtual void setRowBounds(int elementIndex, double lower, double upper);
335 
337  virtual void setRowType(int index, char sense, double rightHandSide,
338  double range);
339 
347  virtual void setRowSetBounds(const int* indexFirst, const int* indexLast,
348  const double* boundList);
349 
359  virtual void setRowSetTypes(const int* indexFirst, const int* indexLast,
360  const char* senseList, const double* rhsList, const double* rangeList);
362 
363  //-------------------------------------------------------------------------
367  virtual void setContinuous(int index);
369  virtual void setInteger(int index);
372  virtual void setContinuous(const int* indices, int len);
375  virtual void setInteger(const int* indices, int len);
377 
378  //-------------------------------------------------------------------------
382  virtual void setRowName(int ndx, std::string name) ;
383 
385  virtual void setColName(int ndx, std::string name) ;
387 
388  //-------------------------------------------------------------------------
390  virtual void setObjSense(double s);
391 
402  virtual void setColSolution(const double * colsol);
403 
414  virtual void setRowPrice(const double * rowprice);
415 
416  //-------------------------------------------------------------------------
423  virtual void addCol(const CoinPackedVectorBase& vec, const double collb,
424  const double colub, const double obj);
425 
428  virtual void addCols(const int numcols,
429  const CoinPackedVectorBase * const * cols, const double* collb,
430  const double* colub, const double* obj);
432  virtual void deleteCols(const int num, const int * colIndices);
433 
436  virtual void addRow(const CoinPackedVectorBase& vec, const double rowlb,
437  const double rowub);
439  virtual void addRow(const CoinPackedVectorBase& vec, const char rowsen,
440  const double rowrhs, const double rowrng);
441 
444  virtual void addRows(const int numrows,
445  const CoinPackedVectorBase * const * rows, const double* rowlb,
446  const double* rowub);
448  virtual void addRows(const int numrows,
449  const CoinPackedVectorBase * const * rows, const char* rowsen,
450  const double* rowrhs, const double* rowrng);
452  virtual void deleteRows(const int num, const int * rowIndices);
454 
455 
456  //---------------------------------------------------------------------------
457 
471  virtual void loadProblem(const CoinPackedMatrix& matrix, const double* collb,
472  const double* colub, const double* obj, const double* rowlb,
473  const double* rowub);
474 
482  virtual void assignProblem(CoinPackedMatrix*& matrix, double*& collb,
483  double*& colub, double*& obj, double*& rowlb, double*& rowub);
484 
497  virtual void loadProblem(const CoinPackedMatrix& matrix, const double* collb,
498  const double* colub, const double* obj, const char* rowsen,
499  const double* rowrhs, const double* rowrng);
500 
508  virtual void assignProblem(CoinPackedMatrix*& matrix, double*& collb,
509  double*& colub, double*& obj, char*& rowsen, double*& rowrhs,
510  double*& rowrng);
511 
514  virtual void loadProblem(const int numcols, const int numrows,
515  const int* start, const int* index, const double* value,
516  const double* collb, const double* colub, const double* obj,
517  const double* rowlb, const double* rowub);
518 
521  virtual void loadProblem(const int numcols, const int numrows,
522  const int* start, const int* index, const double* value,
523  const double* collb, const double* colub, const double* obj,
524  const char* rowsen, const double* rowrhs, const double* rowrng);
525 
528  virtual int readMps(const char *filename, const char *extension = "mps");
529 
534  virtual void writeMps(const char *filename, const char *extension = "mps",
535  double objSense=0.0) const;
536 
538 
539  //---------------------------------------------------------------------------
540 
547  {
570  };
571 
572  GRBmodel* getLpPtr(int keepCached = KEEPCACHED_NONE);
573 
575  GRBenv* getEnvironmentPtr() const;
577 
579  bool isDemoLicense() const;
581 
583  const char* getCtype() const;
584 
594  static void incrementInstanceCounter();
595 
604  static void decrementInstanceCounter();
605 
607  static void setEnvironment(GRBenv* globalenv);
608 
610  static unsigned int getNumInstances();
612 
613 
616  OsiGrbSolverInterface(bool use_local_env = false);
618 
620  OsiGrbSolverInterface(GRBenv* localgrbenv);
621 
623  virtual OsiSolverInterface * clone(bool copyData = true) const;
624 
627 
630 
632  virtual ~OsiGrbSolverInterface();
633 
635  virtual void reset();
637 
638  /***************************************************************************/
655 
659  virtual int canDoSimplexInterface() const;
660 
665  virtual void enableSimplexInterface(int doingPrimal) {
666  }
667  ;
668 
672  virtual void disableSimplexInterface() {
673  }
674  ;
675 
679  virtual void enableFactorization() const {
680  }
681  ;
682 
686  virtual void disableFactorization() const {
687  }
688  ;
689 
691  virtual bool basisIsAvailable() const;
692 
696  virtual void getBasisStatus(int* cstat, int* rstat) const;
697 
698  // ///Get a row of the tableau (slack part in slack if not NULL)
699  // virtual void getBInvARow(int row, double* z, double * slack=NULL) const;
700  //
701  // ///Get a row of the basis inverse
702  // virtual void getBInvRow(int row, double* z) const;
703  //
704  // ///Get a column of the tableau
705  // virtual void getBInvACol(int col, double* vec) const;
706  //
707  // ///Get a column of the basis inverse
708  // virtual void getBInvCol(int col, double* vec) const;
709  //
710  // /** Get indices of the pivot variable in each row
711  // (order of indices corresponds to the
712  // order of elements in a vector retured by getBInvACol() and
713  // getBInvCol()).
714  // */
715  // virtual void getBasics(int* index) const;
717  void switchToLP();
718 
720  void switchToMIP();
721 
723  /***************************************************************************/
724 
725  /***************************************************************************/
726 
750  double effectivenessLb = 0.0);
751 
752 protected:
753 
756  virtual void applyRowCut(const OsiRowCut & rc);
758 
762  virtual void applyColCut(const OsiColCut & cc);
764 
765 private:
768  void resizeColSpace(int minsize);
770 
772  void freeColSpace();
773 
775  void resizeAuxColSpace(int minsize);
776 
778  void resizeAuxColIndSpace();
780 
783  static GRBenv* globalenv_;
786  static bool globalenv_is_ours;
788  static unsigned int numInstances_;
790 
793 
795  GRBmodel* getMutableLpPtr() const;
796 
798  void gutsOfCopy(const OsiGrbSolverInterface & source);
799 
801  void gutsOfConstructor();
802 
804  void gutsOfDestructor();
805 
807  void freeCachedColRim();
808 
810  void freeCachedRowRim();
811 
813  void freeCachedResults();
814 
816  void freeCachedMatrix();
817 
819  void freeCachedData(int keepCached = KEEPCACHED_NONE);
820 
822  void freeAllMemory();
823 
825  void convertToRangedRow(int rowidx, double rhs, double range);
826 
828  void convertToNormalRow(int rowidx, char sense, double rhs);
830 
831 
834  mutable GRBenv* localenv_;
836 
838wordtype">char sense, double rhs);
int OsiCut
Definition: OsiCut
Definition: OsiCut 794  794  operator=( const