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;
61 mutable double* _primal_ray;
62 mutable double* _dual_ray;
64 void _init_temporals();
65 void _clear_temporals();
69 virtual ClpLp* _newSolver() const;
70 virtual ClpLp* _cloneSolver() const;
72 virtual const char* _solverName() const;
74 virtual int _addCol();
75 virtual int _addRow();
77 virtual void _eraseCol(int i);
78 virtual void _eraseRow(int i);
80 virtual void _eraseColId(int i);
81 virtual void _eraseRowId(int i);
83 virtual void _getColName(int col, std::string& name) const;
84 virtual void _setColName(int col, const std::string& name);
85 virtual int _colByName(const std::string& name) const;
87 virtual void _getRowName(int row, std::string& name) const;
88 virtual void _setRowName(int row, const std::string& name);
89 virtual int _rowByName(const std::string& name) const;
91 virtual void _setRowCoeffs(int i, ExprIterator b, ExprIterator e);
92 virtual void _getRowCoeffs(int i, InsertIterator b) const;
94 virtual void _setColCoeffs(int i, ExprIterator b, ExprIterator e);
95 virtual void _getColCoeffs(int i, InsertIterator b) const;
97 virtual void _setCoeff(int row, int col, Value value);
98 virtual Value _getCoeff(int row, int col) const;
100 virtual void _setColLowerBound(int i, Value value);
101 virtual Value _getColLowerBound(int i) const;
102 virtual void _setColUpperBound(int i, Value value);
103 virtual Value _getColUpperBound(int i) const;
105 virtual void _setRowLowerBound(int i, Value value);
106 virtual Value _getRowLowerBound(int i) const;
107 virtual void _setRowUpperBound(int i, Value value);
108 virtual Value _getRowUpperBound(int i) const;
110 virtual void _setObjCoeffs(ExprIterator, ExprIterator);
111 virtual void _getObjCoeffs(InsertIterator) const;
113 virtual void _setObjCoeff(int i, Value obj_coef);
114 virtual Value _getObjCoeff(int i) const;
116 virtual void _setSense(Sense sense);
117 virtual Sense _getSense() const;
119 virtual SolveExitStatus _solve();
121 virtual Value _getPrimal(int i) const;
122 virtual Value _getDual(int i) const;
124 virtual Value _getPrimalValue() const;
126 virtual Value _getPrimalRay(int i) const;
127 virtual Value _getDualRay(int i) const;
129 virtual VarStatus _getColStatus(int i) const;
130 virtual VarStatus _getRowStatus(int i) const;
132 virtual ProblemType _getPrimalType() const;
133 virtual ProblemType _getDualType() const;
135 virtual void _clear();
139 ///Solves LP with primal simplex method.
140 SolveExitStatus solvePrimal();
142 ///Solves LP with dual simplex method.
143 SolveExitStatus solveDual();
145 ///Solves LP with barrier method.
146 SolveExitStatus solveBarrier();
148 ///Returns the constraint identifier understood by CLP.
149 int clpRow(Row r) const { return rows(id(r)); }
151 ///Returns the variable identifier understood by CLP.
152 int clpCol(Col c) const { return cols(id(c)); }
154 ///Enum for \c messageLevel() parameter
156 /// no output (default value)
157 MESSAGE_NO_OUTPUT = 0,
158 /// print final solution
159 MESSAGE_FINAL_SOLUTION = 1,
160 /// print factorization
161 MESSAGE_FACTORIZATION = 2,
163 MESSAGE_NORMAL_OUTPUT = 3,
165 MESSAGE_VERBOSE_OUTPUT = 4
167 ///Set the verbosity of the messages
169 ///Set the verbosity of the messages
171 ///\param m is the level of the messages output by the solver routines.
172 void messageLevel(MessageLevel m);
176 } //END OF NAMESPACE LEMON