我正在研究用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();
}
}
}
答案 0 :(得分:1)
您可能应该发布日志以获得更好的答案,但我可以提出几点。