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.
alpar@1381
     1
/* -*- C++ -*-
alpar@1381
     2
 *
alpar@1956
     3
 * This file is a part of LEMON, a generic C++ optimization library
alpar@1956
     4
 *
alpar@1956
     5
 * Copyright (C) 2003-2006
alpar@1956
     6
 * Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport
alpar@1381
     7
 * (Egervary Research Group on Combinatorial Optimization, EGRES).
alpar@1381
     8
 *
alpar@1381
     9
 * Permission to use, modify and distribute this software is granted
alpar@1381
    10
 * provided that this copyright notice appears in all copies. For
alpar@1381
    11
 * precise terms see the accompanying LICENSE file.
alpar@1381
    12
 *
alpar@1381
    13
 * This software is provided "AS IS" with no warranty of any kind,
alpar@1381
    14
 * express or implied, and with no claim as to its suitability for any
alpar@1381
    15
 * purpose.
alpar@1381
    16
 *
alpar@1381
    17
 */
alpar@1381
    18
alpar@1381
    19
#ifndef LEMON_LP_CPLEX_H
alpar@1381
    20
#define LEMON_LP_CPLEX_H
alpar@1381
    21
alpar@1381
    22
///\file
alpar@1381
    23
///\brief Header of the LEMON-CPLEX lp solver interface.
alpar@1381
    24
alpar@1381
    25
#include <lemon/lp_base.h>
alpar@1398
    26
alpar@1381
    27
extern "C" {
alpar@1381
    28
#include <ilcplex/cplex.h>
alpar@1381
    29
}
alpar@1381
    30
alpar@1381
    31
namespace lemon {
alpar@1381
    32
alpar@1381
    33
alpar@1398
    34
  /// \brief Interface for the CPLEX solver
alpar@1381
    35
  /// 
alpar@1398
    36
  /// This class implements an interface for the CPLEX LP solver.
alpar@1381
    37
  class LpCplex : public LpSolverBase {
alpar@1381
    38
alpar@1381
    39
  public:
alpar@1381
    40
alpar@1381
    41
    typedef LpSolverBase Parent;
alpar@1381
    42
    
alpar@1381
    43
    /// \e
alpar@1381
    44
    int status;
alpar@1381
    45
    CPXENVptr env;
alpar@1381
    46
    CPXLPptr lp;
alpar@1381
    47
alpar@1381
    48
alpar@1381
    49
    /// \e
alpar@1381
    50
    LpCplex();
alpar@1381
    51
    /// \e
alpar@1381
    52
    ~LpCplex();
alpar@1381
    53
alpar@1381
    54
  protected:
alpar@1381
    55
    virtual LpSolverBase &_newLp();
alpar@1381
    56
    virtual LpSolverBase &_copyLp();
alpar@1381
    57
alpar@1381
    58
    virtual int _addCol();
alpar@1381
    59
    virtual int _addRow();
athos@1432
    60
    virtual void _eraseCol(int i);
athos@1432
    61
    virtual void _eraseRow(int i);
alpar@1895
    62
    virtual void _getColName(int col,       std::string & name);
alpar@1895
    63
    virtual void _setColName(int col, const std::string & name);
alpar@1381
    64
    virtual void _setRowCoeffs(int i, 
alpar@1381
    65
			       int length,
alpar@1381
    66
                               const int   * indices, 
alpar@1381
    67
                               const Value   * values );
alpar@1381
    68
    virtual void _setColCoeffs(int i, 
alpar@1381
    69
			       int length,
alpar@1381
    70
                               const int   * indices, 
alpar@1381
    71
                               const Value   * values);
athos@1431
    72
    virtual void _setCoeff(int row, int col, Value value);
alpar@1381
    73
    virtual void _setColLowerBound(int i, Value value);
alpar@1381
    74
    virtual void _setColUpperBound(int i, Value value);
athos@1405
    75
//     virtual void _setRowLowerBound(int i, Value value);
athos@1405
    76
//     virtual void _setRowUpperBound(int i, Value value);
alpar@1381
    77
    virtual void _setRowBounds(int i, Value lower, Value upper);
alpar@1381
    78
    virtual void _setObjCoeff(int i, Value obj_coef);
alpar@1381
    79
    virtual void _clearObj();
alpar@1381
    80
    ///\e
alpar@1381
    81
    
alpar@1381
    82
    virtual SolveExitStatus _solve();
alpar@1381
    83
    virtual Value _getPrimal(int i);
marci@1787
    84
    virtual Value _getDual(int i);
alpar@1381
    85
    virtual Value _getPrimalValue();
marci@1840
    86
    virtual bool _isBasicCol(int i);
alpar@1381
    87
    
alpar@1381
    88
    virtual SolutionStatus _getPrimalStatus();
athos@1460
    89
    virtual SolutionStatus _getDualStatus();
athos@1460
    90
    virtual ProblemTypes _getProblemType();
alpar@1381
    91
alpar@1381
    92
    
alpar@1381
    93
    virtual void _setMax();
alpar@1381
    94
    virtual void _setMin();
alpar@1381
    95
alpar@1381
    96
  };
alpar@1381
    97
} //END OF NAMESPACE LEMON
alpar@1381
    98
alpar@1381
    99
#endif //LEMON_LP_CPLEX_H
alpar@1381
   100