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/

Другие вопросы по тегам