Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
javacplex约化最优性与第一可行解_Java_Mathematical Optimization_Linear Programming_Cplex - Fatal编程技术网

javacplex约化最优性与第一可行解

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,

我正在用Java编写一个LP,并使用cplex作为解算器。最佳解决方案需要一些时间才能找到。如果我有一个计算速度更快的可行解,或者只是一个最优性降低的解,这就足够了

在CPLEX用户手册中,我发现了以下两个参数:

为了优化:

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) 谢谢你提供这些信息。我完全错过了。“日志”是什么意思?