choco назначает 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);
Является ли один превосходит другого с точки зрения, например. нужно меньше места, быстрее решать, меньше отступать?
1 ответ
array[i][j] = VariableFactory.fixed(0, решатель); более эффективен, потому что фиксированное представление потребляет меньше памяти (не большая разница для BoolVar, но верно для IntVar, основанного на реализации домена списка BitSet), и позволяет избежать создания бесполезного ограничения. Эти элементы довольно незначительны, но при умножении на 10000 это может иметь значение во время выполнения. Более того, они кэшируются: если два представления имеют одинаковое значение, на самом деле будет создан только один новый объект. Однако номер возврата останется прежним (если эвристика поиска не основана на случайности или количестве ограничений и т. Д.).
Лучший,
Жан-Гийом Фаджес https://www.cosling.com/