MinLCA algorithms
grb.h
Go to the documentation of this file.
1 /* -*- mode: C++; indent-tabs-mode: nil; -*-
2  *
3  * Copyright (C) 2014
4  * Isaac Sánchez Barrera
5  * Maria Serna
6  * Algorithms, Bioinformatics, Complexity and Formal Methods group (ALBCOM)
7  * Computer Science Department (CS)
8  * Universitat Politècnica de Catalunya · BarcelonaTech (UPC)
9  *
10  * Copyright (C) 2003-2013
11  * Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport
12  * (Egervary Research Group on Combinatorial Optimization, EGRES).
13  *
14  * Permission to use, modify and distribute this software is granted
15  * provided that this copyright notice appears in all copies. For
16  * precise terms see the accompanying LICENSE file.
17  *
18  * This software is provided "AS IS" with no warranty of any kind,
19  * express or implied, and with no claim as to its suitability for any
20  * purpose.
21  *
22  */
23 
24 #ifndef __MINLCA_LEMON_GRB_H
25 #define __MINLCA_LEMON_GRB_H
26 
27 #include <map>
28 #include <vector>
29 #include <string>
30 #include <lemon/lp_base.h>
31 #include "gurobi_c++.h"
32 
35 
37 namespace lemon
38 {
39 
48 class GrbBase : public virtual LpBase
49 {
50 public:
54  static GRBEnv getDefaultEnv();
55 
56 protected:
57 
59  static GRBEnv _defEnv;
60 
61 public:
62 
64  GRBEnv getEnv() const;
65 
67  GRBEnv getEnv();
68 
70  GRBModel &getModel();
71 
75  void writeCompressed(std::string filename, std::string format = "");
76 
84  void forceModelUpdate();
85 
86 protected:
87  GRBModel _model;
88  bool _dirtyVars;
90  GRBEnv _env;
91  std::map<std::string, int> _varNameToId;
92  std::vector<GRBVar> _idToVar;
93  std::vector<std::string> _idToVarName;
94  std::vector<bool> _deletedVars;
95  std::vector<GRBLinExpr> _idToExpr;
96  std::vector<bool> _exprCopiedToConstr;
97  std::map<std::string, int> _constrNameToId;
98  std::vector<GRBConstr> _idToConstr;
99  std::vector<std::string> _idToConstrName;
100  std::vector<GRBVar>
102  std::vector<bool> _deletedConstrs;
103 
110  GrbBase(const GRBEnv &env = _defEnv);
111 
112  inline void _updateModel(bool what);
113 
114  inline void _copyExprToConstr(int row);
115 
116  inline void _copyExprToConstr();
117 
119  virtual int _addCol();
120 
122  virtual int _addRow();
123 
125  virtual int _addRow(Value l, ExprIterator b, ExprIterator e, Value u);
126 
128  virtual void _eraseCol(int i);
129 
131  virtual void _eraseRow(int i);
132 
134  virtual void _getColName(int col, std::string &name) const;
135 
137  virtual void _setColName(int col, const std::string &name);
138 
140  virtual int _colByName(const std::string &name) const;
141 
143  virtual void _getRowName(int row, std::string &name) const;
144 
146  virtual void _setRowName(int row, const std::string &name);
147 
149  virtual int _rowByName(const std::string &name) const;
150 
152  virtual void _setRowCoeffs(int row, ExprIterator b, ExprIterator e);
153 
155  virtual void _getRowCoeffs(int row, InsertIterator b) const;
156 
158  virtual void _setColCoeffs(int col, ExprIterator b, ExprIterator e);
159 
161  virtual void _getColCoeffs(int col, InsertIterator b) const;
162 
164  virtual void _setCoeff(int row, int col, Value value);
165 
167  virtual Value _getCoeff(int row, int col) const;
168 
172  virtual void _setColLowerBound(int i, Value value);
174 
178  virtual Value _getColLowerBound(int i) const;
179 
183  virtual void _setColUpperBound(int i, Value value);
185 
189  virtual Value _getColUpperBound(int i) const;
190 
194  virtual void _setRowLowerBound(int i, Value value);
196 
200  virtual Value _getRowLowerBound(int i) const;
201 
205  virtual void _setRowUpperBound(int i, Value value);
207 
211  virtual Value _getRowUpperBound(int i) const;
212 
214  virtual void _setObjCoeffs(ExprIterator b, ExprIterator e);
215 
217  virtual void _getObjCoeffs(InsertIterator b) const;
218 
220  virtual void _setObjCoeff(int i, Value obj_coef);
221 
223  virtual Value _getObjCoeff(int i) const;
224 
226  virtual void _setSense(Sense);
227 
229  virtual Sense _getSense() const;
230 
232  virtual void _clear();
233 
235  virtual void _messageLevel(MessageLevel);
236 
238  virtual void _write(std::string file, std::string format) const;
239 };
240 
249 class GrbLp : public LpSolver, public GrbBase
250 {
251 public:
253  GrbLp(const GRBEnv &env = _defEnv);
254 
256  virtual GrbLp *newSolver() const;
257 
259  virtual GrbLp *cloneSolver() const;
260 
261 protected:
262 
264  virtual SolveExitStatus _solve();
265 
267  virtual Value _getPrimal(int i) const;
268 
270  virtual Value _getDual(int i) const;
271 
273  virtual Value _getPrimalValue() const;
274 
276  virtual Value _getPrimalRay(int i) const;
277 
279  virtual Value _getDualRay(int i) const;
280 
282  virtual ProblemType _getPrimalType() const;
283 
285  virtual ProblemType _getDualType() const;
286 
288  virtual VarStatus _getColStatus(int i) const;
289 
291  virtual VarStatus _getRowStatus(int i) const;
292 
294  virtual const char *_solverName() const;
295 
296 
297 };
298 
305 // please update it using GrbBase#forceModelUpdate().
307 class GrbMip : public MipSolver, public GrbBase
308 {
309 public:
311  GrbMip(const GRBEnv &env = _defEnv);
312 
314  virtual GrbMip *newSolver() const;
315 
317  virtual GrbMip *cloneSolver() const;
318 
323  void initialMipValue(LpBase::Col col, Value val);
324 
325 protected:
327  virtual SolveExitStatus _solve();
328 
330  virtual Value _getSol(int i) const;
331 
333  virtual Value _getSolValue() const;
334 
336  virtual ProblemType _getType() const;
337 
338  virtual ColTypes _getColType(int col) const;
339 
340  virtual void _setColType(int col, ColTypes col_type);
341 
343  virtual const char *_solverName() const;
344 
345 };
346 
347 } //namespace lemon
348 
349 #endif
std::map< std::string, int > _constrNameToId
Map constraint names to id.
Definition: grb.h:97
std::vector< GRBVar > _constrAux
Needed because LEMON allows constraints with both upper and lower bounds.
Definition: grb.h:101
Base interface for the Gurobi LP and MIP solver.
Definition: grb.h:48
bool _dirtyVars
Dirty bit for variables.
Definition: grb.h:88
virtual void _setRowLowerBound(int i, Value value)
Definition: grb.cc:275
static GRBEnv _defEnv
Default Gurobi environment.
Definition: grb.h:59
virtual Value _getRowUpperBound(int i) const
Definition: grb.cc:290
virtual GrbLp * cloneSolver() const
Definition: grb.cc:505
virtual const char * _solverName() const
Definition: grb.cc:510
virtual void _setColLowerBound(int i, Value value)
Definition: grb.cc:255
static GRBEnv getDefaultEnv()
Get default Gurobi environment.
Definition: grb.cc:40
virtual SolveExitStatus _solve()
Definition: grb.cc:515
virtual SolveExitStatus _solve()
Definition: grb.cc:379
virtual ProblemType _getType() const
Definition: grb.cc:543
virtual Value _getPrimalRay(int i) const
Definition: grb.cc:412
Interface for the Gurobi LP solver.
Definition: grb.h:249
std::vector< bool > _deletedConstrs
List of deleted variables.
Definition: grb.h:102
GRBModel _model
Underlying Gurobi model.
Definition: grb.h:87
virtual Value _getSolValue() const
Definition: grb.cc:538
void writeCompressed(std::string filename, std::string format="")
Output model in compressed format.
Definition: grb.cc:368
std::vector< std::string > _idToVarName
Map variable id to names.
Definition: grb.h:93
std::vector< GRBConstr > _idToConstr
Map id to constraints.
Definition: grb.h:98
virtual int _rowByName(const std::string &name) const
Definition: grb.cc:201
virtual Value _getDual(int i) const
Definition: grb.cc:402
std::map< std::string, int > _varNameToId
Map variable names to id.
Definition: grb.h:91
virtual int _addRow()
Definition: grb.cc:109
virtual void _getRowName(int row, std::string &name) const
Definition: grb.cc:188
virtual void _eraseCol(int i)
Definition: grb.cc:144
virtual void _setColCoeffs(int col, ExprIterator b, ExprIterator e)
Definition: grb.cc:229
virtual void _setObjCoeffs(ExprIterator b, ExprIterator e)
Definition: grb.cc:295
virtual void _write(std::string file, std::string format) const
Write model to file (disabled)
Definition: grb.cc:363
bool _dirtyConstrs
Dirty bit for constraints.
Definition: grb.h:89
virtual int _colByName(const std::string &name) const
Definition: grb.cc:176
virtual ProblemType _getPrimalType() const
Definition: grb.cc:436
virtual void _getObjCoeffs(InsertIterator b) const
Definition: grb.cc:302
LEMON namespace.
Definition: grb.cc:29
virtual Value _getSol(int i) const
Definition: grb.cc:533
virtual void _setColName(int col, const std::string &name)
Definition: grb.cc:168
virtual void _setRowCoeffs(int row, ExprIterator b, ExprIterator e)
Definition: grb.cc:213
void forceModelUpdate()
Force model update.
Definition: grb.cc:71
virtual Value _getCoeff(int row, int col) const
Get one element of the coefficient matrix.
Definition: grb.cc:250
virtual void _setRowUpperBound(int i, Value value)
Definition: grb.cc:285
virtual Value _getColLowerBound(int i) const
Definition: grb.cc:260
virtual Sense _getSense() const
Definition: grb.cc:330
GRBEnv getEnv() const
Get the environment of the underlying Gurobi model.
Definition: grb.cc:45
virtual int _addCol()
Definition: grb.cc:99
virtual GrbLp * newSolver() const
Definition: grb.cc:500
virtual void _setObjCoeff(int i, Value obj_coef)
Definition: grb.cc:310
virtual void _setCoeff(int row, int col, Value value)
Set one element of the coefficient matrix.
Definition: grb.cc:245
std::vector< bool > _deletedVars
List of deleted variables.
Definition: grb.h:94
virtual GrbMip * newSolver() const
Definition: grb.cc:564
std::vector< GRBVar > _idToVar
Map id to variables.
Definition: grb.h:92
virtual void _clear()
Definition: grb.cc:340
GrbLp(const GRBEnv &env=_defEnv)
Definition: grb.cc:494
virtual void _setSense(Sense)
Definition: grb.cc:320
virtual Value _getObjCoeff(int i) const
Definition: grb.cc:315
std::vector< GRBLinExpr > _idToExpr
Linear expression of each constraint.
Definition: grb.h:95
virtual void _getColName(int col, std::string &name) const
Definition: grb.cc:163
virtual void _eraseRow(int i)
Definition: grb.cc:153
virtual Value _getPrimal(int i) const
Definition: grb.cc:397
Interface for the Gurobi MIP solver.
Definition: grb.h:307
virtual VarStatus _getRowStatus(int i) const
Definition: grb.cc:479
virtual void _messageLevel(MessageLevel)
Definition: grb.cc:351
virtual VarStatus _getColStatus(int i) const
Definition: grb.cc:458
virtual const char * _solverName() const
Definition: grb.cc:574
GRBEnv _env
Gurobi environment for the model.
Definition: grb.h:90
virtual void _getColCoeffs(int col, InsertIterator b) const
Definition: grb.cc:236
virtual Value _getPrimalValue() const
Definition: grb.cc:407
GrbBase(const GRBEnv &env=_defEnv)
Default constructor.
Definition: grb.cc:34
virtual void _setColUpperBound(int i, Value value)
Definition: grb.cc:265
GRBModel & getModel()
Get the underlying Gurobi model.
Definition: grb.cc:55
std::vector< std::string > _idToConstrName
Map constraint id to names.
Definition: grb.h:99
void initialMipValue(LpBase::Col col, Value val)
Set initial value.
Definition: grb.cc:608
virtual Value _getRowLowerBound(int i) const
Definition: grb.cc:280
GrbMip(const GRBEnv &env=_defEnv)
Definition: grb.cc:560
virtual Value _getColUpperBound(int i) const
Definition: grb.cc:270
virtual GrbMip * cloneSolver() const
Clone solver. Disabled do not use.
Definition: grb.cc:569
virtual void _setRowName(int row, const std::string &name)
Definition: grb.cc:193
virtual Value _getDualRay(int i) const
Definition: grb.cc:424
virtual void _getRowCoeffs(int row, InsertIterator b) const
Definition: grb.cc:220
virtual ProblemType _getDualType() const
Definition: grb.cc:453