提供双精度值的cplex boolVar数组 [英] cplex boolVarArray giving double values

查看:17
本文介绍了提供双精度值的cplex boolVar数组的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我一直在尝试使用CPLEX Java实现ILP,但在很长一段时间内一直在遇到问题。以下是ILP的几个变量:

IloIntVar above = new IloIntVar[numRect][];
IloIntVar below = new IloIntVar[numRect][];
IloIntVar left = new IloIntVar[numRect][];
IloIntVar right = new IloIntVar[numRect][]; 

for (int i = 0; i < numRect; i++) {
        above[i] = cplex.boolVarArray(numRect);
        below[i] = cplex.boolVarArray(numRect);
        left[i] = cplex.boolVarArray(numRect);
        right[i] = cplex.boolVarArray(numRect);
}

NumRect的值为1。在程序结束时,我输出以下值:

for (int i = 0; i < numRect; i++) {
            for (int j = i + 1; j < numRect; j++) {
                System.out.println(cplex.getValue(left[i][j]));
                System.out.println(cplex.getValue(right[i][j]));
                System.out.println(cplex.getValue(above[i][j]));
                System.out.println(cplex.getValue(below[i][j]));
                System.out.println(cplex.getValue(left[i][j]) +
                                   cplex.getValue(right[i][j]) +
                                   cplex.getValue(above[i][j]) +
                                   cplex.getValue(below[i][j]));
            }
        }

以下是我得到的输出:

0.0
0.0
9.313225750491594E-10
0.9999999990686774
1.0

我不明白为什么我得到的是双精度值,而不是布尔值。任何帮助都将不胜感激。谢谢。

推荐答案

IloBoolVar只是一个约束为0或1的IloNumVar。默认情况下,0或1之间的任何值都被视为整数。您可以通过设置参数EpInt来更改此设置。该参数可以设置为零,但您可能会遇到性能问题。取整这些值是最好的做法。事实上,任何时候当您使用浮点数时,都需要注意这样的舍入问题。

这篇关于提供双精度值的cplex boolVar数组的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆