COIN-OR::LEMON - Graph Library

source: lemon-0.x/lemon/mip_cplex.cc~ @ 2219:c263168e0964

Last change on this file since 2219:c263168e0964 was 2219:c263168e0964, checked in by athos, 18 years ago

Missing cplex files: sorry.

File size: 3.6 KB
Line 
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_MIP_CPLEX_CC
20#define LEMON_MIP_CPLEX_CC
21
22///\file
23///\brief Implementation of the LEMON-CPLEX mip solver interface.
24
25#include <lemon/mip_cplex.h>
26
27namespace lemon {
28 
29  MipCplex::MipCplex() {
30    //This is unnecessary: setting integrality constraints on
31    //variables will set this, too
32
33    ///\todo The constant CPXPROB_MIP is
34    ///called CPXPROB_MILP in later versions
35    CPXchgprobtype( env,  lp, CPXPROB_MIP);
36  }
37
38  void MipCplex::_colType(int i, MipCplex::ColTypes col_type){
39
40    // Note If a variable is to be changed to binary, a call to CPXchgbds
41    // should also be made to change the bounds to 0 and 1.
42
43    int indices[1];
44    indices[0]=i;
45    char ctype[1];
46    switch (col_type){
47      case INTEGER:
48        ctype[0]=CPX_INTEGER;//'I'
49        break;
50      case REAL:
51        ctype[0]=CPX_CONTINUOUS ;//'C'
52        break;
53    default:;
54        //FIXME problem
55    }
56    CPXchgctype (env, lp, 1, indices, ctype);
57  }
58 
59  MipCplex::ColTypes MipCplex::_colType(int i){
60   
61    char ctype[1];
62    status = CPXgetctype (env, lp, ctype, i, i);
63    std::cout<<"Kukucska: "<<INTEGER<<std::endl;
64    return REAL;
65//     switch (ctype[0]){
66
67//     case CPX_INTEGER:
68//       return INTEGER;
69//     case CPX_CONTINUOUS:
70//       return REAL;
71//     default:
72//       return REAL;//Error!
73//     }
74
75  }
76 
77  LpCplex::SolveExitStatus MipCplex::_solve(){
78
79    status = CPXmipopt (env, lp);
80    if (status==0)
81      return SOLVED;
82    else
83      return UNSOLVED;
84
85  }
86
87
88  LpCplex::SolutionStatus MipCplex::_getMipStatus(){
89
90    int stat = CPXgetstat(env, lp);
91
92    //Fortunately, MIP statuses did not change for cplex 8.0
93    switch (stat)
94    {
95      case CPXMIP_OPTIMAL:
96        return OPTIMAL;
97        //This also exists in later issues
98        //    case CPXMIP_UNBOUNDED:
99        //return INFINITE;
100      case CPXMIP_INFEASIBLE:
101        return INFEASIBLE;
102      default:
103        return UNDEFINED;
104    }
105    //Unboundedness not treated well: the following is from cplex 9.0 doc
106    // About Unboundedness
107
108    // The treatment of models that are unbounded involves a few
109    // subtleties. Specifically, a declaration of unboundedness means that
110    // ILOG CPLEX has determined that the model has an unbounded
111    // ray. Given any feasible solution x with objective z, a multiple of
112    // the unbounded ray can be added to x to give a feasible solution
113    // with objective z-1 (or z+1 for maximization models). Thus, if a
114    // feasible solution exists, then the optimal objective is
115    // unbounded. Note that ILOG CPLEX has not necessarily concluded that
116    // a feasible solution exists. Users can call the routine CPXsolninfo
117    // to determine whether ILOG CPLEX has also concluded that the model
118    // has a feasible solution.
119     
120  } 
121
122  MipCplex::Value MipCplex::_getPrimal(int i){
123    Value x;
124    CPXgetmipx(env, lp, &x, i, i);
125    return x;
126  }
127 
128  MipCplex::Value MipCplex::_getPrimalValue(){
129    Value objval;
130    status = CPXgetmipobjval(env, lp, &objval);
131    return objval;
132  }
133} //END OF NAMESPACE LEMON
134
135#endif //END OF MIP_CPLEX_CC
Note: See TracBrowser for help on using the repository browser.