2016-05-01 94 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/