1 /* -*- mode: C++; indent-tabs-mode: nil; -*-
3 * This file is a part of LEMON, a generic C++ optimization library.
5 * Copyright (C) 2003-2013
6 * Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport
7 * (Egervary Research Group on Combinatorial Optimization, EGRES).
9 * Permission to use, modify and distribute this software is granted
10 * provided that this copyright notice appears in all copies. For
11 * precise terms see the accompanying LICENSE file.
13 * This software is provided "AS IS" with no warranty of any kind,
14 * express or implied, and with no claim as to its suitability for any
23 ///\brief Header of the LEMON-CLP lp solver interface.
28 #include <lemon/lp_base.h>
36 /// \brief Interface for the CLP solver
38 /// This class implements an interface for the Clp LP solver. The
39 /// Clp library is an object oriented lp solver library developed at
40 /// the IBM. The CLP is part of the COIN-OR package and it can be
41 /// used with Common Public License.
42 class ClpLp : public LpSolver {
47 std::map<std::string, int> _col_names_ref;
48 std::map<std::string, int> _row_names_ref;
60 virtual ClpLp* newSolver() const;
62 virtual ClpLp* cloneSolver() const;
66 mutable double* _primal_ray;
67 mutable double* _dual_ray;
69 void _init_temporals();
70 void _clear_temporals();
74 virtual const char* _solverName() const;
76 virtual int _addCol();
77 virtual int _addRow();
78 virtual int _addRow(Value l, ExprIterator b, ExprIterator e, Value u);
80 virtual void _eraseCol(int i);
81 virtual void _eraseRow(int i);
83 virtual void _eraseColId(int i);
84 virtual void _eraseRowId(int i);
86 virtual void _getColName(int col, std::string& name) const;
87 virtual void _setColName(int col, const std::string& name);
88 virtual int _colByName(const std::string& name) const;
90 virtual void _getRowName(int row, std::string& name) const;
91 virtual void _setRowName(int row, const std::string& name);
92 virtual int _rowByName(const std::string& name) const;
94 virtual void _setRowCoeffs(int i, ExprIterator b, ExprIterator e);
95 virtual void _getRowCoeffs(int i, InsertIterator b) const;
97 virtual void _setColCoeffs(int i, ExprIterator b, ExprIterator e);
98 virtual void _getColCoeffs(int i, InsertIterator b) const;
100 virtual void _setCoeff(int row, int col, Value value);
101 virtual Value _getCoeff(int row, int col) const;
103 virtual void _setColLowerBound(int i, Value value);
104 virtual Value _getColLowerBound(int i) const;
105 virtual void _setColUpperBound(int i, Value value);
106 virtual Value _getColUpperBound(int i) const;
108 virtual void _setRowLowerBound(int i, Value value);
109 virtual Value _getRowLowerBound(int i) const;
110 virtual void _setRowUpperBound(int i, Value value);
111 virtual Value _getRowUpperBound(int i) const;
113 virtual void _setObjCoeffs(ExprIterator, ExprIterator);
114 virtual void _getObjCoeffs(InsertIterator) const;
116 virtual void _setObjCoeff(int i, Value obj_coef);
117 virtual Value _getObjCoeff(int i) const;
119 virtual void _setSense(Sense sense);
120 virtual Sense _getSense() const;
122 virtual SolveExitStatus _solve();
124 virtual Value _getPrimal(int i) const;
125 virtual Value _getDual(int i) const;
127 virtual Value _getPrimalValue() const;
129 virtual Value _getPrimalRay(int i) const;
130 virtual Value _getDualRay(int i) const;
132 virtual VarStatus _getColStatus(int i) const;
133 virtual VarStatus _getRowStatus(int i) const;
135 virtual ProblemType _getPrimalType() const;
136 virtual ProblemType _getDualType() const;
138 virtual void _clear();
140 virtual void _messageLevel(MessageLevel);
144 ///Solves LP with primal simplex method.
145 SolveExitStatus solvePrimal();
147 ///Solves LP with dual simplex method.
148 SolveExitStatus solveDual();
150 ///Solves LP with barrier method.
151 SolveExitStatus solveBarrier();
153 ///Returns the constraint identifier understood by CLP.
154 int clpRow(Row r) const { return _rows(id(r)); }
156 ///Returns the variable identifier understood by CLP.
157 int clpCol(Col c) const { return _cols(id(c)); }
161 } //END OF NAMESPACE LEMON