IntVar的Choco abs无效

时间:2016-02-23 16:11:08

标签: java constraints modeling choco

[我正在使用Choco 3.3.3]

我有一个IntVar a和一个int b。我想将差异保存到IntVar []数组d中。我已经在代码中的另一个点以完全相同的方式完成了这项工作,并且它没有任何问题,但在这里我只是没有让它工作。

d = VF.boundedArray("d", num_ts, -20, 20, solver);
for(int t=0; t < num_ts; t++){
    IntVar a = VF.bounded("a", 0, 10, solver);
    solver.post(ICF.sum(aa[t], a)); //values are [2,2,2,1,2,2]
    int b = bb[t][j]; //values are [2,3,2,2,2,2]
    IntVar c = VF.offset(a, -b);
    ...//see below
}

当我只使用c(d [t] = c;)时,打印出d值时的结果是[0,-1,0,-1,0,0],但我需要绝对值那,[0,1,0,1,0,0]

这些是我尝试的不同之处和d:

的结果
d[t] = VF.abs(c); //result [0,0,0,0,0,0]
solver.post(ICF.times(c, -1, d[t])); //result [-7,-6,-7,-7,-7,-7]
solver.post(ICF.sum(new IntVar[]{VF.minus(a), VF.fixed(b, solver)}, d[t])); //result [-7,-6,-7,-7,-7,-7]
solver.post(ICF.arithm(a, "+", d[t], "=", b)); //result [-7,-6,-7,-7,-7,-7]
solver.post(ICF.distance(VF.fixed(b, solver), a, "=", d[t])); //result [-20, -20, -20, -20, -20, -20]

谁能告诉我自己做错了什么?我特别感到困惑的是[-7,-6,-7,-7,-7,-7]来自哪里......

1 个答案:

答案 0 :(得分:0)

我不确定我是否理解你想要做什么以及你真正尝试过什么,但我的猜测是你没有“解决”模型(或者至少你没有传播约束)。如javadoc所示,如果未实例化变量,variable.getValue()将返回LOWER BOUND(将-ea传递给JVM参数时会抛出异常)。所以添加-ea,确保在询问变量值之前调用solver.findSolution()并查看它是否正常工作。如果没有,请发送可执行代码,以便我们可以重现问题。它解决了你的问题吗?

Jean-Guillaume,https://www.cosling.com/