对于像
这样的变量数组IntVar[][] array = VF.boolMatrix("example", 5, 10, solver);
之间有什么区别
solver.post(ICF.arithm(array[i][j], "=", 0));
和
array[i][j] = VariableFactory.fixed(0, solver);
就例如,一个优于另一个。需要更少的空间,更快的解决,更少的回溯?
答案 0 :(得分:0)
array [i] [j] = VariableFactory.fixed(0,solver);更有效,因为固定视图消耗的内存较少(对于BoolVar而言不是很大的差异,但对于依赖于BitSet列表域实现的IntVar来说却是如此)并且它避免了创建无用的约束。这些元素非常小,但乘以10000时,它可以在运行时产生差异。此外,它们被缓存:如果两个视图具有相同的值,则实际上只创建一个新对象。但是,回溯数将保持不变(除非搜索启发式基于随机性或约束数等)。
最佳,
Jean-Guillaume Fages https://www.cosling.com/