2017-09-21 73 views
0

如果複雜變量滿足約束,如何檢入Choco?例如,如果我有配置的以下列表:choco中的復變量

int[][] configurations = new int[][] { 
     {20, 24, 10, 3, 4}, 
     {20, 13, 1, 3, 4}}; 

其中CONFIG1 = {20,24,10,3,4}和CONFIG2 = {20,13,1,3,4}

int[] constraints = new int[]{21, 15, 2, 10, 10}; 

是一個約束列表,對於給定的配置,配置中的每個元素需要比相應的約束更高(或更低)。例如: CONFIG1 = {20,24,10,3,4} 約束= {21,15,2,10,10}

check if config1[0] < constraints[0] AND config1[1] < constraints[1] AND ... 

如果所有的約束得到滿足則只是將其標記爲一個解。這是我所擁有的

// c = number of configurations 
// q = number of elements in each configuration 
// p = configurations matrix 

for (int i = 0; i < c; i++) { 
     for (int j = 0; j < q; j++) { 
      model.arithm(model.intVar(p[i][j]), "<", model.intVar(k[j])).post(); 
     } 
} 

回答

1

CP依賴變量和約束。您應該先創建變量,然後發佈約束。請不要將「約束」稱爲只是輸入問題的輸入數組。

你可以在這裏找到一個簡單的巧克力的例子: - https://www.cosling.com/choco-solver/hello-world 我覺得這個你好詞是足夠的,你需要什麼。如果你想深入,請閱讀:http://choco-tuto.readthedocs.io/en/latest/

+0

我的問題是,我如何定義約束條件和變量,使其佔用整個配置。例如,如果我的配置有3個元素(a,b,c)和一個約束數組(x,y,z),並且除了滿足約束條件,我想使其中的一些最小化(並使其最大化),我如何寫一個 Andrei