[Lemon-commits] [lemon_svn] athos: r1758 - hugo/trunk/src/work/athos/lp
Lemon SVN
svn at lemon.cs.elte.hu
Mon Nov 6 20:47:23 CET 2006
Author: athos
Date: Thu Apr 7 17:22:03 2005
New Revision: 1758
Modified:
hugo/trunk/src/work/athos/lp/Makefile
hugo/trunk/src/work/athos/lp/lp_cplex.cc
hugo/trunk/src/work/athos/lp/lp_cplex.h
Log:
Cplex interface has improved a lot.
Modified: hugo/trunk/src/work/athos/lp/Makefile
==============================================================================
--- hugo/trunk/src/work/athos/lp/Makefile (original)
+++ hugo/trunk/src/work/athos/lp/Makefile Thu Apr 7 17:22:03 2005
@@ -1,6 +1,6 @@
CXXFLAGS = -Wall -ggdb --no-inline -I../../.. -I..
-all: lp_sample
+all: lp_sample_cplex
clean:
rm lp_test *.o
@@ -9,16 +9,19 @@
$(CXX) $(CXXFLAGS) -o $@ -c $<
-lp_solver_skeleton.o: lp_solver_skeleton.cc lp_solver_skeleton.h lp_base.h \
- lin_expr.h
+lp_solver_skeleton.o: lp_solver_skeleton.cc lp_solver_skeleton.h lp_base.h
$(CXX) $(CXXFLAGS) -o $@ -c $<
-lp_glpk.o: ../../../lemon/lp_glpk.cc ../../../lemon/lp_glpk.h ../../../lemon/lp_base.h lin_expr.h
+lp_glpk.o: ../../../lemon/lp_glpk.cc ../../../lemon/lp_glpk.h ../../../lemon/lp_base.h
$(CXX) $(CXXFLAGS) -o $@ -c $<
+lp_cplex.o: lp_cplex.cc lp_cplex.h ../../../lemon/lp_base.h
+ $(CXX) $(CXXFLAGS) -I/usr/local/cplex/cplex75/include -o $@ -c $<
-lp_sample.o: lp_sample.cc
+lp_sample.o: lp_sample.cc
lp_sample: lp_sample.o lp_base.o lp_glpk.o
$(CXX) -o $@ $^ -lglpk
+lp_sample_cplex: lp_sample_cplex.o lp_base.o lp_glpk.o
+ $(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
Modified: hugo/trunk/src/work/athos/lp/lp_cplex.cc
==============================================================================
--- hugo/trunk/src/work/athos/lp/lp_cplex.cc (original)
+++ hugo/trunk/src/work/athos/lp/lp_cplex.cc Thu Apr 7 17:22:03 2005
@@ -24,7 +24,7 @@
int LpCplex::_addCol()
{
int i = CPXgetnumcols (env, lp);
- int lb[1],ub[1];
+ Value lb[1],ub[1];
lb[0]=-INF;//-CPX_INFBOUND;
ub[0]=INF;//CPX_INFBOUND;
status = CPXnewcols (env, lp, 1, NULL, lb, ub, NULL, NULL);
@@ -33,8 +33,12 @@
int LpCplex::_addRow()
{
+ //We want a ranged row
+ char sense[1];
+ sense[0]='R';
+
int i = CPXgetnumrows (env, lp);
- status = CPXnewrows (env, lp, 1, NULL, NULL, NULL, NULL, NULL);
+ status = CPXnewrows (env, lp, 1, NULL, sense, NULL, NULL);
return i;
}
@@ -45,14 +49,15 @@
Value const * values )
{
int rowlist[length+1];
+ int* p=rowlist;
for (int k=1;k<=length;++k){
rowlist[k]=i;
}
status = CPXchgcoeflist(env, lp,
length,
- rowlist++,
- inices++,
- values++);
+ p++,
+ const_cast<int * >(indices++),
+ const_cast<Value * >(values++));
}
void LpCplex::_setColCoeffs(int i,
@@ -61,45 +66,117 @@
Value const * values)
{
int collist[length+1];
+ int* p=collist;
for (int k=1;k<=length;++k){
collist[k]=i;
}
status = CPXchgcoeflist(env, lp,
length,
- inices++,
- collist++,
- values++);
+ const_cast<int * >(indices++),
+ p++,
+ const_cast<Value * >(values++));
}
void LpCplex::_setColLowerBound(int i, Value value)
{
+ int indices[1];
+ indices[0]=i;
+ char lu[1];
+ lu[0]='L';
+ Value bd[1];
+ bd[0]=value;
+ status = CPXchgbds (env, lp, 1, indices, lu, bd);
+
}
void LpCplex::_setColUpperBound(int i, Value value)
{
+ int indices[1];
+ indices[0]=i;
+ char lu[1];
+ lu[0]='U';
+ Value bd[1];
+ bd[0]=value;
+ status = CPXchgbds (env, lp, 1, indices, lu, bd);
}
void LpCplex::_setRowLowerBound(int i, Value value)
{
+ status = CPXchgcoef (env, lp, i, -1, value);
+
}
void LpCplex::_setRowUpperBound(int i, Value value)
{
+ //TODO Ezt kell meg megirni
+ // Value lo=CPX
}
void LpCplex::_setObjCoeff(int i, Value obj_coef)
{
- }
+ status = CPXchgcoef (env, lp, -1, i, obj_coef);
+ }
- LpCplex::SolutionStatus LpCplex::_solve()
+ LpCplex::SolveExitStatus LpCplex::_solve()
{
- return OPTIMAL;
+ return SOLVED;
+// int i= lpx_simplex(lp);
+// switch (i) {
+// case LPX_E_OK:
+// return SOLVED;
+// break;
+// default:
+// return UNSOLVED;
+// }
}
- LpCplex::Value LpCplex::_getSolution(int i)
+ LpCplex::Value LpCplex::_getPrimal(int i)
+ {
+ return 0;
+ }
+
+ LpCplex::Value LpCplex::_getPrimalValue()
{
return 0;
}
+
+ LpCplex::SolutionStatus LpCplex::_getPrimalStatus()
+ {
+ return OPTIMAL;
+// int stat= lpx_get_status(lp);
+// switch (stat) {
+// case LPX_UNDEF://Undefined (no solve has been run yet)
+// return UNDEFINED;
+// break;
+// case LPX_NOFEAS://There is no feasible solution (primal, I guess)
+// case LPX_INFEAS://Infeasible
+// return INFEASIBLE;
+// break;
+// case LPX_UNBND://Unbounded
+// return INFINITE;
+// break;
+// case LPX_FEAS://Feasible
+// return FEASIBLE;
+// break;
+// case LPX_OPT://Feasible
+// return OPTIMAL;
+// break;
+// default:
+// return UNDEFINED; //to avoid gcc warning
+// //FIXME error
+// }
+ }
+
+
+ void LpCplex::_setMax()
+ {
+ CPXchgobjsen (env, lp, CPX_MAX);
+ }
+ void LpCplex::_setMin()
+ {
+ CPXchgobjsen (env, lp, CPX_MIN);
+ }
+
} //namespace lemon
Modified: hugo/trunk/src/work/athos/lp/lp_cplex.h
==============================================================================
--- hugo/trunk/src/work/athos/lp/lp_cplex.h (original)
+++ hugo/trunk/src/work/athos/lp/lp_cplex.h Thu Apr 7 17:22:03 2005
@@ -20,7 +20,7 @@
///\file
///\brief Header of the LEMON-CPLEX lp solver interface.
-#include "lp_base.h"
+#include <lemon/lp_base.h>
extern "C" {
#include "ilcplex/cplex.h"
}
@@ -108,12 +108,33 @@
///\bug Unimplemented
///
- virtual SolutionStatus _solve();
+ virtual SolveExitStatus _solve();
+ ///\e
+
+ ///\bug Unimplemented
+ ///
+ virtual Value _getPrimal(int i);
+ ///\e
+
+ ///\bug Unimplemented
+ ///
+ virtual Value _getPrimalValue();
+ ///\e
+
+ ///\bug Unimplemented
+ ///
+ virtual SolutionStatus _getPrimalStatus();
+
+ ///\e
+
+ ///\bug Unimplemented
+ ///
+ virtual void _setMax();
///\e
///\bug Unimplemented
///
- virtual Value _getSolution(int i);
+ virtual void _setMin();
};
} //END OF NAMESPACE LEMON
More information about the Lemon-commits
mailing list