1 /* -*- mode: C++; indent-tabs-mode: nil; -*-
 
     3  * This file is a part of LEMON, a generic C++ optimization library.
 
     5  * Copyright (C) 2003-2011
 
     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