2016-02-23 68 views
0

[我正在使用Choco 3.3.3]一個IntVar巧克力abs不工作

我有一個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]從哪裏來...

+0

你解決了嗎? – dabadaba

回答

0

我不知道我明白你想要做什麼,真的嘗試過,但我的猜測是,你沒有「解決」模型(或者至少你沒有傳播約束)。如javadoc所示,變量未實例化時,variable.getValue()返回LOWER BOUND(在將-ea傳遞給JVM參數時它會引發異常)。因此,添加-ea,確保在請求變量值之前調用solver.findSolution()並查看它是否工作。如果沒有,請發送可執行代碼,以便我們可以重現問題。它解決了你的問題嗎?

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

+0

當添加-ea時,我得到了一個AssertionError,其中有很多「FAILURE >> ....」但我不知道問題出在哪裏。 我在請求變量值之前定義調用solver.findOptimalSolution。我的懷疑是,因爲在我的例子中是一個IntVar [],只有少數條目有限制。我認爲,如果數組中的條目沒有約束,則只使用下限。我不明白我可以如何改變這一點。 不幸的是,我無法公開顯示我的完整代碼,但我還沒有弄清楚會產生相同問題的示例。 – Dora

+0

在我的代碼中的另一個點我有同樣的問題。我有一個IntVar [],只有前幾個條目有一個約束,這取決於其他變量的賦值。當我使用這個數組的總和時,我也得到了完全隨機的解決方案,並且-ea我得到一個AssertionError – Dora

+0

你可以使用findSolution替換findOptimalSolution來查看它是否工作? –