Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/348.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
违反列生成算法CPLEX java api中的约束_Java_Constraints_Mathematical Optimization_Cplex - Fatal编程技术网

违反列生成算法CPLEX java api中的约束

违反列生成算法CPLEX java api中的约束,java,constraints,mathematical-optimization,cplex,Java,Constraints,Mathematical Optimization,Cplex,我正在为一个大问题编写一个列生成算法,经过5次迭代后,该算法开始违反约束,确保所有j的mi,j*xi=1。我以前从未使用过cplexjavaapi,所以我想知道这是否是一个常见的问题,即约束不成立?以下是限制条件: for( j=1; j <=K; j++) { IloLinearNumExpr lhs = cplex.linearNumExpr(); for(i=1; i <= C; i++) { lhs.addTerm(m[i][j], x[i]); }

我正在为一个大问题编写一个列生成算法,经过5次迭代后,该算法开始违反约束,确保所有j的mi,j*xi=1。我以前从未使用过cplexjavaapi,所以我想知道这是否是一个常见的问题,即约束不成立?以下是限制条件:

for( j=1; j <=K; j++) {
  IloLinearNumExpr lhs = cplex.linearNumExpr();
  for(i=1; i <= C; i++) {
      lhs.addTerm(m[i][j], x[i]); 
  }   
  con[j] = cplex.addEq(lhs, 1);
  con[j].setName("yourConstraintName(" + j + ")");      
}

这很可能是代码逻辑中的一个缺陷。你给我们的代码片段在我看来还行——如果没有更多的上下文,不知道m矩阵中的值是什么,我看不出问题出在哪里

首先,在每次迭代求解模型之前,尝试使用cplex.exportModelname.LP将模型输出到LP文件。您可能需要为每个迭代创建一个新名称,例如,在名称中包含迭代编号,这样他们就不会每次都覆盖同一个文件。然后,您可以检查所需的约束是否在文件中,并且是否包含正确的术语

其次,尝试在代码中添加一些老式的日志记录,这样您就可以更详细地了解代码正在做什么

此外,您可能希望检查添加到表达式中的每个项中的系数值是否为非零。在表达式中使用这些零项并没有任何害处,但通常只有一小部分可能的项具有非零值,并且所有这些项都存在会使表达式更大,更难在LP文件中检查

CPLEX在每一个新版本发布之前都经过了非常详细的测试,它被世界各地数千家公司和学者广泛使用和依赖,如果CPLEX提供的答案不尊重约束条件,这是一个常见问题,那么就不可能发生