2016-05-01 97 views
0

我正尝试在choco中移植minizinc模型。我知道如何定义变量和其他基本的东西,但尽管阅读了教程和一些代码示例,但我在定义一些不重要的约束时遇到了一些麻烦。 有人可以给我一些建议如何翻译下面的代码(只是z)在巧克力求解风格?Choco解算器约束/变量定义

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]]); 

谢谢!

回答

0

我相信你知道如何发布求和约束,所以非平凡部分位于c [i,next [i]]中,它检索矩阵c中行i和列next [i]处的整数。问题是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(在minizinc中它是从1到n)访问,因此您可能需要相应地更新模型或使用偏移量。

希望这有助于

https://www.cosling.com/