巧克力解算器约束/变量定义

时间:2016-05-01 21:58:34

标签: constraint-programming choco

我试图在choco中移植minizinc模型。我知道如何定义变量和其他基本内容但是尽管已经阅读了教程和一些代码示例,但我在定义一些非平凡的约束时遇到了一些麻烦。 有人可以给我一些建议如何在巧克力解算器风格中翻译下面的代码(只是z)吗?

array[1..n,1..n] of int: c;
array[1..n] of var 0..10: next;

var 0..sum(c): z = sum(i in 1..n)(c[i,next[i]]);

谢谢!

1 个答案:

答案 0 :(得分:0)

我相信你知道如何发布和约束,所以非平凡的部分位于c [i,next [i]]中,它检索第i行和第i [i]列的矩阵c中的整数。问题是next [i]是一个变量,所以你不能直接使用它来访问(Java)数组。

您需要使用元素约束(也在minizinc中):

/**
 * Creates an element constraint: value = table[index]
 *
 * @param value an integer variable taking its value in table
 * @param table an array of integer values
 * @param index an integer variable representing the value of value in table
 */
default Constraint element(IntVar value, int[] table, IntVar index)

在处理矩阵时,您需要为每一行执行此操作,然后在其上发布一个总和。

另请注意,在Java中,数组单元格从0到n-1(最小值为1到n),因此您可能需要相应地更新模型或使用偏移量。

希望这有帮助

https://www.cosling.com/