[英]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.