lemon/lp_cplex.h
author deba
Wed, 01 Mar 2006 10:25:30 +0000
changeset 1991 d7442141d9ef
parent 1895 5b01801efbc0
child 2218 50f1a780a5ff
permissions -rw-r--r--
The graph adadptors can be alteration observed.
In most cases it uses the adapted graph alteration notifiers.
Only special case is now the UndirGraphAdaptor, where
we have to proxy the signals from the graph.

The SubBidirGraphAdaptor is removed, because it doest not
gives more feature than the EdgeSubGraphAdaptor<UndirGraphAdaptor<Graph>>.

The ResGraphAdaptor is based on this composition.
     1 /* -*- C++ -*-
     2  *
     3  * This file is a part of LEMON, a generic C++ optimization library
     4  *
     5  * Copyright (C) 2003-2006
     6  * Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport
     7  * (Egervary Research Group on Combinatorial Optimization, EGRES).
     8  *
     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.
    12  *
    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
    15  * purpose.
    16  *
    17  */
    18 
    19 #ifndef LEMON_LP_CPLEX_H
    20 #define LEMON_LP_CPLEX_H
    21 
    22 ///\file
    23 ///\brief Header of the LEMON-CPLEX lp solver interface.
    24 
    25 #include <lemon/lp_base.h>
    26 
    27 extern "C" {
    28 #include <ilcplex/cplex.h>
    29 }
    30 
    31 namespace lemon {
    32 
    33 
    34   /// \brief Interface for the CPLEX solver
    35   /// 
    36   /// This class implements an interface for the CPLEX LP solver.
    37   class LpCplex : public LpSolverBase {
    38 
    39   public:
    40 
    41     typedef LpSolverBase Parent;
    42     
    43     /// \e
    44     int status;
    45     CPXENVptr env;
    46     CPXLPptr lp;
    47 
    48 
    49     /// \e
    50     LpCplex();
    51     /// \e
    52     ~LpCplex();
    53 
    54   protected:
    55     virtual LpSolverBase &_newLp();
    56     virtual LpSolverBase &_copyLp();
    57 
    58     virtual int _addCol();
    59     virtual int _addRow();
    60     virtual void _eraseCol(int i);
    61     virtual void _eraseRow(int i);
    62     virtual void _getColName(int col,       std::string & name);
    63     virtual void _setColName(int col, const std::string & name);
    64     virtual void _setRowCoeffs(int i, 
    65 			       int length,
    66                                const int   * indices, 
    67                                const Value   * values );
    68     virtual void _setColCoeffs(int i, 
    69 			       int length,
    70                                const int   * indices, 
    71                                const Value   * values);
    72     virtual void _setCoeff(int row, int col, Value value);
    73     virtual void _setColLowerBound(int i, Value value);
    74     virtual void _setColUpperBound(int i, Value value);
    75 //     virtual void _setRowLowerBound(int i, Value value);
    76 //     virtual void _setRowUpperBound(int i, Value value);
    77     virtual void _setRowBounds(int i, Value lower, Value upper);
    78     virtual void _setObjCoeff(int i, Value obj_coef);
    79     virtual void _clearObj();
    80     ///\e
    81     
    82     virtual SolveExitStatus _solve();
    83     virtual Value _getPrimal(int i);
    84     virtual Value _getDual(int i);
    85     virtual Value _getPrimalValue();
    86     virtual bool _isBasicCol(int i);
    87     
    88     virtual SolutionStatus _getPrimalStatus();
    89     virtual SolutionStatus _getDualStatus();
    90     virtual ProblemTypes _getProblemType();
    91 
    92     
    93     virtual void _setMax();
    94     virtual void _setMin();
    95 
    96   };
    97 } //END OF NAMESPACE LEMON
    98 
    99 #endif //LEMON_LP_CPLEX_H
   100