【发布时间】:2018-05-28 12:50:37
【问题描述】:
我正在研究用 Java 编写的 LP,并使用 cplex 作为求解器。找到最佳解决方案需要一些时间。如果我有一个计算速度更快的可行解决方案,或者只是一个最优性降低的解决方案,那就足够了。
在 CPLEX 用户手册中我找到了以下两个参数:
cplex.setParam(IloCplex.Param.Simplex.Tolerances.Optimality, 1.0e-1);
对于第一个可行的解决方案:
cplex.setParam(IloCplex.Param.MIP.Limits.Solutions, 1);
我在模型中使用了这两个参数,但目标函数的解和计算时间保持不变。
另外,我在下面的小LP中使用过它们,但没有成功。
package cplexTest;
import ilog.concert.*;
import ilog.cplex.*;
public class TestC {
public static void main (String[] args) {
model1();
}
public static void model1() {
try {
IloCplex cplex = new IloCplex();
cplex.setParam(IloCplex.Param.Simplex.Tolerances.Optimality, 1.0e-1);
cplex.setParam(IloCplex.Param.MIP.Limits.Solutions, 100);
//variables
IloNumVar x = cplex.numVar(0, Double.MAX_VALUE, "x");
IloNumVar y = cplex.numVar(0, Double.MAX_VALUE, "y");
//expressions
IloLinearNumExpr objective = cplex.linearNumExpr();
objective.addTerm(0.12, x);
objective.addTerm(0.15, y);
// define objective
cplex.addMinimize(objective);
//define constraints
cplex.addGe(cplex.sum(cplex.prod(60, x), cplex.prod(60, y)),300);
cplex.addGe(cplex.sum(cplex.prod(12, x), cplex.prod(6, y)),36);
cplex.addGe(cplex.sum(cplex.prod(10, x), cplex.prod(30, y)),90);
//solve
if (cplex.solve()) {
System.out.println("obj = "+cplex.getObjValue());
System.out.println("x = "+cplex.getValue(x));
System.out.println("y = "+cplex.getValue(y));
}
else {
System.out.println("Model not solved");
}
}
catch (IloException exc) {
exc.printStackTrace();
}
}
}
【问题讨论】:
标签: java mathematical-optimization linear-programming cplex