COIN-OR::LEMON - Graph Library

Changeset 1319:6e277ba3fc76 in lemon-0.x


Ignore:
Timestamp:
04/07/05 17:22:03 (15 years ago)
Author:
athos
Branch:
default
Phase:
public
Convert:
svn:c9d7d8f5-90d6-0310-b91f-818b3a526b0e/lemon/trunk@1758
Message:

Cplex interface has improved a lot.

Location:
src/work/athos/lp
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • src/work/athos/lp/Makefile

    r1316 r1319  
    11CXXFLAGS = -Wall -ggdb --no-inline -I../../.. -I..
    22
    3 all: lp_sample
     3all: lp_sample_cplex
    44
    55clean:
     
    1010
    1111
    12 lp_solver_skeleton.o: lp_solver_skeleton.cc lp_solver_skeleton.h lp_base.h \
    13                 lin_expr.h
     12lp_solver_skeleton.o: lp_solver_skeleton.cc lp_solver_skeleton.h lp_base.h
    1413        $(CXX) $(CXXFLAGS) -o $@ -c $<
    1514
    16 lp_glpk.o: ../../../lemon/lp_glpk.cc ../../../lemon/lp_glpk.h ../../../lemon/lp_base.h lin_expr.h
     15lp_glpk.o: ../../../lemon/lp_glpk.cc ../../../lemon/lp_glpk.h ../../../lemon/lp_base.h
    1716        $(CXX) $(CXXFLAGS) -o $@ -c $<
    1817
     18lp_cplex.o: lp_cplex.cc lp_cplex.h ../../../lemon/lp_base.h
     19        $(CXX) $(CXXFLAGS) -I/usr/local/cplex/cplex75/include -o $@ -c $<
    1920
    20 lp_sample.o: lp_sample.cc 
     21lp_sample.o: lp_sample.cc
    2122
    2223lp_sample: lp_sample.o lp_base.o lp_glpk.o
    2324        $(CXX) -o $@ $^ -lglpk
    2425
     26lp_sample_cplex: lp_sample_cplex.o lp_base.o lp_glpk.o
     27        $(CXX) $(CXXFLAGS) -I/usr/local/cplex/cplex75/include -o $@ $^ -L/usr/local/cplex/cplex75/lib/i86_linux2_glibc2.2_gcc3.0/static_pic_mt -lcplex -lm -lpthread
  • src/work/athos/lp/lp_cplex.cc

    r1303 r1319  
    2525  {
    2626    int i = CPXgetnumcols (env, lp);
    27     int lb[1],ub[1];
     27    Value lb[1],ub[1];
    2828    lb[0]=-INF;//-CPX_INFBOUND;
    2929    ub[0]=INF;//CPX_INFBOUND;
     
    3434  int LpCplex::_addRow()
    3535  {
     36    //We want a ranged row
     37    char sense[1];
     38    sense[0]='R';
     39
    3640    int i = CPXgetnumrows (env, lp);
    37     status = CPXnewrows (env, lp, 1, NULL, NULL, NULL, NULL, NULL);
     41    status = CPXnewrows (env, lp, 1, NULL, sense, NULL, NULL);
    3842    return i;
    3943  }
     
    4650  {
    4751    int rowlist[length+1];
     52    int* p=rowlist;
    4853    for (int k=1;k<=length;++k){
    4954      rowlist[k]=i;
     
    5156    status = CPXchgcoeflist(env, lp,
    5257                            length,
    53                             rowlist++,
    54                             inices++,
    55                             values++);
     58                            p++,
     59                            const_cast<int * >(indices++),
     60                            const_cast<Value * >(values++));
    5661  }
    5762 
     
    6267  {
    6368    int collist[length+1];
     69    int* p=collist;
    6470    for (int k=1;k<=length;++k){
    6571      collist[k]=i;
     
    6773    status = CPXchgcoeflist(env, lp,
    6874                            length,
    69                             inices++,
    70                             collist++,
    71                             values++);
     75                            const_cast<int * >(indices++),
     76                            p++,
     77                            const_cast<Value * >(values++));
    7278  }
    7379 
    7480  void LpCplex::_setColLowerBound(int i, Value value)
    7581  {
     82    int indices[1];
     83    indices[0]=i;
     84    char lu[1];
     85    lu[0]='L';
     86    Value bd[1];
     87    bd[0]=value;
     88    status = CPXchgbds (env, lp, 1, indices, lu, bd);
     89 
    7690  }
    7791 
    7892  void LpCplex::_setColUpperBound(int i, Value value)
    7993  {
     94    int indices[1];
     95    indices[0]=i;
     96    char lu[1];
     97    lu[0]='U';
     98    Value bd[1];
     99    bd[0]=value;
     100    status = CPXchgbds (env, lp, 1, indices, lu, bd);
    80101  }
    81102 
    82103  void LpCplex::_setRowLowerBound(int i, Value value)
    83104  {
     105    status = CPXchgcoef (env, lp, i, -1, value);
     106
    84107  }
    85108 
    86109  void LpCplex::_setRowUpperBound(int i, Value value)
    87110  {
     111    //TODO Ezt kell meg megirni
     112    //    Value lo=CPX
    88113  }
    89114 
    90115  void LpCplex::_setObjCoeff(int i, Value obj_coef)
    91116  {
     117    status = CPXchgcoef (env, lp, -1, i, obj_coef);
     118   }
     119
     120  LpCplex::SolveExitStatus LpCplex::_solve()
     121  {
     122    return SOLVED;
     123//     int i=  lpx_simplex(lp);
     124//     switch (i) {
     125//     case LPX_E_OK:
     126//       return SOLVED;
     127//       break;
     128//     default:
     129//       return UNSOLVED;
     130//     }
    92131  }
    93132
    94   LpCplex::SolutionStatus LpCplex::_solve()
    95   {
    96     return OPTIMAL;
    97   }
    98 
    99   LpCplex::Value LpCplex::_getSolution(int i)
     133  LpCplex::Value LpCplex::_getPrimal(int i)
    100134  {
    101135    return 0;
    102136  }
    103137 
     138  LpCplex::Value LpCplex::_getPrimalValue()
     139  {
     140    return 0;
     141  }
     142 
     143 
     144  LpCplex::SolutionStatus LpCplex::_getPrimalStatus()
     145  {
     146    return OPTIMAL;
     147//     int stat=  lpx_get_status(lp);
     148//     switch (stat) {
     149//     case LPX_UNDEF://Undefined (no solve has been run yet)
     150//       return UNDEFINED;
     151//       break;
     152//     case LPX_NOFEAS://There is no feasible solution (primal, I guess)
     153//     case LPX_INFEAS://Infeasible
     154//       return INFEASIBLE;
     155//       break;
     156//     case LPX_UNBND://Unbounded
     157//       return INFINITE;
     158//       break;
     159//     case LPX_FEAS://Feasible
     160//       return FEASIBLE;
     161//       break;
     162//     case LPX_OPT://Feasible
     163//       return OPTIMAL;
     164//       break;
     165//     default:
     166//       return UNDEFINED; //to avoid gcc warning
     167//       //FIXME error
     168//     }
     169  }
     170
     171
     172  void LpCplex::_setMax()
     173  {
     174    CPXchgobjsen (env, lp, CPX_MAX);
     175   }
     176  void LpCplex::_setMin()
     177  {
     178    CPXchgobjsen (env, lp, CPX_MIN);
     179   }
     180 
    104181} //namespace lemon
    105182
  • src/work/athos/lp/lp_cplex.h

    r1303 r1319  
    2121///\brief Header of the LEMON-CPLEX lp solver interface.
    2222
    23 #include "lp_base.h"
     23#include <lemon/lp_base.h>
    2424extern "C" {
    2525#include "ilcplex/cplex.h"
     
    109109    ///\bug Unimplemented
    110110    ///
    111     virtual SolutionStatus _solve();
     111    virtual SolveExitStatus _solve();
     112    ///\e
     113
     114    ///\bug Unimplemented
     115    ///
     116    virtual Value _getPrimal(int i);
    112117    ///\e
    113118   
    114119    ///\bug Unimplemented
    115120    ///
    116     virtual Value _getSolution(int i);
     121    virtual Value _getPrimalValue();
     122    ///\e
     123   
     124    ///\bug Unimplemented
     125    ///
     126    virtual SolutionStatus _getPrimalStatus();
     127
     128    ///\e
     129   
     130    ///\bug Unimplemented
     131    ///
     132    virtual void _setMax();
     133    ///\e
     134   
     135    ///\bug Unimplemented
     136    ///
     137    virtual void _setMin();
    117138
    118139  };
Note: See TracChangeset for help on using the changeset viewer.