2016-04-11 93 views
0

對於可變陣列等巧克力分配的int IntVar

IntVar[][] array = VF.boolMatrix("example", 5, 10, solver); 

是什麼

solver.post(ICF.arithm(array[i][j], "=", 0)); 

array[i][j] = VariableFactory.fixed(0, solver); 

之間的差是一個優於另一個在例如方面。需要更少的空間,更快的解決方案,更少的回溯?

回答

0

array [i] [j] = VariableFactory.fixed(0,solver);效率更高,因爲固定視圖消耗更少的內存(對於BoolVar來說不是一個巨大的差異,但對於依賴於BitSet列表域實現的IntVar來說是真實的),並且避免了創建無用的約束。這些元素非常小,但乘以10000時,它可以在運行時產生影響。而且,它們被緩存:如果兩個視圖具有相同的值,則實際上只會創建一個新對象。但是,回溯數將保持不變(除非搜索啓發式基於隨機性或約束數等)。

最佳,

讓 - 紀堯姆Fages https://www.cosling.com/