0

对于像这样的变量数组

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

有什么区别

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

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

就例如而言,一个优于另一个。需要更少的空间、更快的求解、更少的回溯?

4

1 回答 1

0

数组[i][j] = VariableFactory.fixed(0, 求解器); 更有效,因为固定视图消耗更少的内存(对于 BoolVar 来说差别不大,但对于依赖于 BitSet 列表域实现的 IntVar 来说确实如此),并且它避免了创建无用的约束。这些元素非常小,但是当乘以 10000 时,它可以在运行时产生差异。此外,它们是缓存的:如果两个视图具有相同的值,则实际上只会创建一个新对象。但是,回溯数将保持不变(除非启发式搜索基于随机性或约束数等)。

最好的,

让-纪尧姆·法赫斯 https://www.cosling.com/

于 2016-04-21T07:49:06.823 回答