1 /* -*- mode: C++; indent-tabs-mode: nil; -*-
3 * This file is a part of LEMON, a generic C++ optimization library.
5 * Copyright (C) 2003-2008
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();
79 virtual void _eraseCol(int i);
80 virtual void _eraseRow(int i);
82 virtual void _eraseColId(int i);
83 virtual void _eraseRowId(int i);
85 virtual void _getColName(int col, std::string& name) const;
86 virtual void _setColName(int col, const std::string& name);
87 virtual int _colByName(const std::string& name) const;
89 virtual void _getRowName(int row, std::string& name) const;
90 virtual void _setRowName(int row, const std::string& name);
91 virtual int _rowByName(const std::string& name) const;
93 virtual void _setRowCoeffs(int i, ExprIterator b, ExprIterator e);
94 virtual void _getRowCoeffs(int i, InsertIterator b) const;
96 virtual void _setColCoeffs(int i, ExprIterator b, ExprIterator e);
97 virtual void _getColCoeffs(int i, InsertIterator b) const;
99 virtual void _setCoeff(int row, int col, Value value);
100 virtual Value _getCoeff(int row, int col) const;
102 virtual void _setColLowerBound(int i, Value value);
103 virtual Value _getColLowerBound(int i) const;
104 virtual void _setColUpperBound(int i, Value value);
105 virtual Value _getColUpperBound(int i) const;
107 virtual void _setRowLowerBound(int i, Value value);
108 virtual Value _getRowLowerBound(int i) const;
109 virtual void _setRowUpperBound(int i, Value value);
110 virtual Value _getRowUpperBound(int i) const;
112 virtual void _setObjCoeffs(ExprIterator, ExprIterator);
113 virtual void _getObjCoeffs(InsertIterator) const;
115 virtual void _setObjCoeff(int i, Value obj_coef);
116 virtual Value _getObjCoeff(int i) const;
118 virtual void _setSense(Sense sense);
119 virtual Sense _getSense() const;
121 virtual SolveExitStatus _solve();
123 virtual Value _getPrimal(int i) const;
124 virtual Value _getDual(int i) const;
126 virtual Value _getPrimalValue() const;
128 virtual Value _getPrimalRay(int i) const;
129 virtual Value _getDualRay(int i) const;
131 virtual VarStatus _getColStatus(int i) const;
132 virtual VarStatus _getRowStatus(int i) const;
134 virtual ProblemType _getPrimalType() const;
135 virtual ProblemType _getDualType() const;
137 virtual void _clear();
139 virtual void _messageLevel(MessageLevel);
143 ///Solves LP with primal simplex method.
144 SolveExitStatus solvePrimal();
146 ///Solves LP with dual simplex method.
147 SolveExitStatus solveDual();
149 ///Solves LP with barrier method.
150 SolveExitStatus solveBarrier();
152 ///Returns the constraint identifier understood by CLP.
153 int clpRow(Row r) const { return rows(id(r)); }
155 ///Returns the variable identifier understood by CLP.
156 int clpCol(Col c) const { return cols(id(c)); }
160 } //END OF NAMESPACE LEMON