javacplex约化最优性与第一可行解
我正在用Java编写一个LP,并使用cplex作为解算器。最佳解决方案需要一些时间才能找到。如果我有一个计算速度更快的可行解,或者只是一个最优性降低的解,这就足够了 在CPLEX用户手册中,我发现了以下两个参数: 为了优化:javacplex约化最优性与第一可行解,java,mathematical-optimization,linear-programming,cplex,Java,Mathematical Optimization,Linear Programming,Cplex,我正在用Java编写一个LP,并使用cplex作为解算器。最佳解决方案需要一些时间才能找到。如果我有一个计算速度更快的可行解,或者只是一个最优性降低的解,这就足够了 在CPLEX用户手册中,我发现了以下两个参数: 为了优化: cplex.setParam(IloCplex.Param.Simplex.tolerations.optimization,1.0e-1) 对于第一个可行的解决方案: cplex.setParam(IloCplex.Param.MIP.Limits.Solutions,
cplex.setParam(IloCplex.Param.Simplex.tolerations.optimization,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();
}
}
}
你可能应该发布日志以获得更好的答案,但我可以提出几点
LPs通常求解速度快。MIPs可能会很慢
如果LP非常大,请尝试内点法。对于大型问题,内点(障碍)法可能比原始或对偶单纯形法快得多。内部点解算器也可以使用多个线程(单纯形仅为串行)
对于非常大的LP,您可能需要观察内存使用情况(尤其是在使用并发LP方法时)。如果超过RAM大小,算法可能会开始“抖动”(速度减慢,因为通过虚拟内存使用磁盘IO)。因此,关闭并发LP,只使用最好的LP算法
一般来说,您不应该修补降低的成本容差,除非您确实有很好的理由这样做,并且您知道自己在做什么。为了找到一个可行的点,取消你的目标。您还可以考虑使模型更稀疏
溶液限值适用于MIP模型,而非LPs
你好,欧文。谢谢你的回答。2) 为什么我要尝试内点法而不是单纯形法?3) 我知道内存使用率很高。4) 为什么不呢?我确实知道,在实践中,避免获得最佳解决方案是很常见的,因为这需要太长时间。因此,使用启发式或近似算法。5) 谢谢你提供这些信息。我完全错过了。“日志”是什么意思?