1.1 --- a/lemon/lp_glpk.h Mon Jan 12 12:25:55 2009 +0000
1.2 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000
1.3 @@ -1,259 +0,0 @@
1.4 -/* -*- mode: C++; indent-tabs-mode: nil; -*-
1.5 - *
1.6 - * This file is a part of LEMON, a generic C++ optimization library.
1.7 - *
1.8 - * Copyright (C) 2003-2008
1.9 - * Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport
1.10 - * (Egervary Research Group on Combinatorial Optimization, EGRES).
1.11 - *
1.12 - * Permission to use, modify and distribute this software is granted
1.13 - * provided that this copyright notice appears in all copies. For
1.14 - * precise terms see the accompanying LICENSE file.
1.15 - *
1.16 - * This software is provided "AS IS" with no warranty of any kind,
1.17 - * express or implied, and with no claim as to its suitability for any
1.18 - * purpose.
1.19 - *
1.20 - */
1.21 -
1.22 -#ifndef LEMON_LP_GLPK_H
1.23 -#define LEMON_LP_GLPK_H
1.24 -
1.25 -///\file
1.26 -///\brief Header of the LEMON-GLPK lp solver interface.
1.27 -///\ingroup lp_group
1.28 -
1.29 -#include <lemon/lp_base.h>
1.30 -
1.31 -// forward declaration
1.32 -#ifndef _GLP_PROB
1.33 -#define _GLP_PROB
1.34 -typedef struct { double _prob; } glp_prob;
1.35 -/* LP/MIP problem object */
1.36 -#endif
1.37 -
1.38 -namespace lemon {
1.39 -
1.40 -
1.41 - /// \brief Base interface for the GLPK LP and MIP solver
1.42 - ///
1.43 - /// This class implements the common interface of the GLPK LP and MIP solver.
1.44 - /// \ingroup lp_group
1.45 - class GlpkBase : virtual public LpBase {
1.46 - protected:
1.47 -
1.48 - typedef glp_prob LPX;
1.49 - glp_prob* lp;
1.50 -
1.51 - GlpkBase();
1.52 - GlpkBase(const GlpkBase&);
1.53 - virtual ~GlpkBase();
1.54 -
1.55 - protected:
1.56 -
1.57 - virtual int _addCol();
1.58 - virtual int _addRow();
1.59 -
1.60 - virtual void _eraseCol(int i);
1.61 - virtual void _eraseRow(int i);
1.62 -
1.63 - virtual void _eraseColId(int i);
1.64 - virtual void _eraseRowId(int i);
1.65 -
1.66 - virtual void _getColName(int col, std::string& name) const;
1.67 - virtual void _setColName(int col, const std::string& name);
1.68 - virtual int _colByName(const std::string& name) const;
1.69 -
1.70 - virtual void _getRowName(int row, std::string& name) const;
1.71 - virtual void _setRowName(int row, const std::string& name);
1.72 - virtual int _rowByName(const std::string& name) const;
1.73 -
1.74 - virtual void _setRowCoeffs(int i, ExprIterator b, ExprIterator e);
1.75 - virtual void _getRowCoeffs(int i, InsertIterator b) const;
1.76 -
1.77 - virtual void _setColCoeffs(int i, ExprIterator b, ExprIterator e);
1.78 - virtual void _getColCoeffs(int i, InsertIterator b) const;
1.79 -
1.80 - virtual void _setCoeff(int row, int col, Value value);
1.81 - virtual Value _getCoeff(int row, int col) const;
1.82 -
1.83 - virtual void _setColLowerBound(int i, Value value);
1.84 - virtual Value _getColLowerBound(int i) const;
1.85 -
1.86 - virtual void _setColUpperBound(int i, Value value);
1.87 - virtual Value _getColUpperBound(int i) const;
1.88 -
1.89 - virtual void _setRowLowerBound(int i, Value value);
1.90 - virtual Value _getRowLowerBound(int i) const;
1.91 -
1.92 - virtual void _setRowUpperBound(int i, Value value);
1.93 - virtual Value _getRowUpperBound(int i) const;
1.94 -
1.95 - virtual void _setObjCoeffs(ExprIterator b, ExprIterator e);
1.96 - virtual void _getObjCoeffs(InsertIterator b) const;
1.97 -
1.98 - virtual void _setObjCoeff(int i, Value obj_coef);
1.99 - virtual Value _getObjCoeff(int i) const;
1.100 -
1.101 - virtual void _setSense(Sense);
1.102 - virtual Sense _getSense() const;
1.103 -
1.104 - virtual void _clear();
1.105 -
1.106 - public:
1.107 -
1.108 - ///Pointer to the underlying GLPK data structure.
1.109 - LPX *lpx() {return lp;}
1.110 - ///Const pointer to the underlying GLPK data structure.
1.111 - const LPX *lpx() const {return lp;}
1.112 -
1.113 - ///Returns the constraint identifier understood by GLPK.
1.114 - int lpxRow(Row r) const { return rows(id(r)); }
1.115 -
1.116 - ///Returns the variable identifier understood by GLPK.
1.117 - int lpxCol(Col c) const { return cols(id(c)); }
1.118 -
1.119 - };
1.120 -
1.121 - /// \brief Interface for the GLPK LP solver
1.122 - ///
1.123 - /// This class implements an interface for the GLPK LP solver.
1.124 - ///\ingroup lp_group
1.125 - class LpGlpk : public GlpkBase, public LpSolver {
1.126 - public:
1.127 -
1.128 - ///\e
1.129 - LpGlpk();
1.130 - ///\e
1.131 - LpGlpk(const LpGlpk&);
1.132 -
1.133 - private:
1.134 -
1.135 - mutable std::vector<double> _primal_ray;
1.136 - mutable std::vector<double> _dual_ray;
1.137 -
1.138 - void _clear_temporals();
1.139 -
1.140 - protected:
1.141 -
1.142 - virtual LpGlpk* _cloneSolver() const;
1.143 - virtual LpGlpk* _newSolver() const;
1.144 -
1.145 - virtual const char* _solverName() const;
1.146 -
1.147 - virtual SolveExitStatus _solve();
1.148 - virtual Value _getPrimal(int i) const;
1.149 - virtual Value _getDual(int i) const;
1.150 -
1.151 - virtual Value _getPrimalValue() const;
1.152 -
1.153 - virtual VarStatus _getColStatus(int i) const;
1.154 - virtual VarStatus _getRowStatus(int i) const;
1.155 -
1.156 - virtual Value _getPrimalRay(int i) const;
1.157 - virtual Value _getDualRay(int i) const;
1.158 -
1.159 - ///\todo It should be clarified
1.160 - ///
1.161 - virtual ProblemType _getPrimalType() const;
1.162 - virtual ProblemType _getDualType() const;
1.163 -
1.164 - public:
1.165 -
1.166 - ///Solve with primal simplex
1.167 - SolveExitStatus solvePrimal();
1.168 -
1.169 - ///Solve with dual simplex
1.170 - SolveExitStatus solveDual();
1.171 -
1.172 - ///Turns on or off the presolver
1.173 -
1.174 - ///Turns on (\c b is \c true) or off (\c b is \c false) the presolver
1.175 - ///
1.176 - ///The presolver is off by default.
1.177 - void presolver(bool b);
1.178 -
1.179 - ///Enum for \c messageLevel() parameter
1.180 - enum MessageLevel {
1.181 - /// no output (default value)
1.182 - MESSAGE_NO_OUTPUT = 0,
1.183 - /// error messages only
1.184 - MESSAGE_ERROR_MESSAGE = 1,
1.185 - /// normal output
1.186 - MESSAGE_NORMAL_OUTPUT = 2,
1.187 - /// full output (includes informational messages)
1.188 - MESSAGE_FULL_OUTPUT = 3
1.189 - };
1.190 -
1.191 - private:
1.192 -
1.193 - MessageLevel _message_level;
1.194 -
1.195 - public:
1.196 -
1.197 - ///Set the verbosity of the messages
1.198 -
1.199 - ///Set the verbosity of the messages
1.200 - ///
1.201 - ///\param m is the level of the messages output by the solver routines.
1.202 - void messageLevel(MessageLevel m);
1.203 - };
1.204 -
1.205 - /// \brief Interface for the GLPK MIP solver
1.206 - ///
1.207 - /// This class implements an interface for the GLPK MIP solver.
1.208 - ///\ingroup lp_group
1.209 - class MipGlpk : public GlpkBase, public MipSolver {
1.210 - public:
1.211 -
1.212 - ///\e
1.213 - MipGlpk();
1.214 - ///\e
1.215 - MipGlpk(const MipGlpk&);
1.216 -
1.217 - protected:
1.218 -
1.219 - virtual MipGlpk* _cloneSolver() const;
1.220 - virtual MipGlpk* _newSolver() const;
1.221 -
1.222 - virtual const char* _solverName() const;
1.223 -
1.224 - virtual ColTypes _getColType(int col) const;
1.225 - virtual void _setColType(int col, ColTypes col_type);
1.226 -
1.227 - virtual SolveExitStatus _solve();
1.228 - virtual ProblemType _getType() const;
1.229 - virtual Value _getSol(int i) const;
1.230 - virtual Value _getSolValue() const;
1.231 -
1.232 - ///Enum for \c messageLevel() parameter
1.233 - enum MessageLevel {
1.234 - /// no output (default value)
1.235 - MESSAGE_NO_OUTPUT = 0,
1.236 - /// error messages only
1.237 - MESSAGE_ERROR_MESSAGE = 1,
1.238 - /// normal output
1.239 - MESSAGE_NORMAL_OUTPUT = 2,
1.240 - /// full output (includes informational messages)
1.241 - MESSAGE_FULL_OUTPUT = 3
1.242 - };
1.243 -
1.244 - private:
1.245 -
1.246 - MessageLevel _message_level;
1.247 -
1.248 - public:
1.249 -
1.250 - ///Set the verbosity of the messages
1.251 -
1.252 - ///Set the verbosity of the messages
1.253 - ///
1.254 - ///\param m is the level of the messages output by the solver routines.
1.255 - void messageLevel(MessageLevel m);
1.256 - };
1.257 -
1.258 -
1.259 -} //END OF NAMESPACE LEMON
1.260 -
1.261 -#endif //LEMON_LP_GLPK_H
1.262 -