簡體   English   中英

IntVar的巧克力Abs無法正常工作

[英]Choco abs of an IntVar not working

[我正在使用Choco 3.3.3]

我有一個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]的來源...

我不確定我了解您想要做什么以及您真正嘗試過什么,但是我的猜測是您沒有“解決”模型(或者至少您沒有傳播約束)。 如javadoc所示,在未實例化變量的情況下,variable.getValue()返回LOWER BOUND(將-ea傳遞給JVM參數時會引發異常)。 因此,添加-ea,確保在詢問變量值之前先調用Solver.findSolution(),然后查看其是否有效。 如果沒有,請發送可執行代碼,以便我們重現該問題。 它解決了您的問題嗎?

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM