Как обрабатывать большие целые числа в оптимизаторе IBM ILOG CPLEX CP?

Это продолжение от этот пост. Короче говоря, я использую IBM ILOG CPLEX CP Optimizer в Python для решения задачи программирования в ограничениях. Одной из целей оптимизации является максимизация произведения целых чисел x_1 * x_2 * ... * x_n. По мере увеличения масштаба проблемы (например, n составляет около 300), продукт, по-видимому, станет очень большим, и оптимизатор CP, похоже, не сможет справиться с этим большим целым числом. Для разных значений n возвращаемый продукт всегда был равен 1,79769e+308.

Целые числа не ограничены по размеру и не имеют максимального значения в собственном Python, поэтому я предполагаю, что CP Optimizer обрабатывает большие целые числа по-другому. Есть ли способ справиться с большими целыми числами в CP Optimizer?

Некоторые примечания:

  • Моя программа отлично работала с меньшими размерами данных (маленький n).
  • Я попытался максимизировать log(x_1) + log(x_2) + ... + log(x_n), но программа работала без остановок. Я считаю, что журнал все усложняет.
  • Для тех, кому интересно, мой исходный код и примеры данных: здесь.

Большое спасибо!


person foo    schedule 21.10.2018    source источник
comment
Это верхний предел float64 (поэтому даже этот тип данных вам не подходит, и он молча используется в ядре). Поскольку, вероятно, нет поддержки произвольной арифметики, вы можете попытаться добавить верхнюю границу этой суммы, исходя из дополнительных предположений модели. Конечно, это несколько предполагает, что вы ожидаете решения в этом допустимом диапазоне.   -  person sascha    schedule 21.10.2018


Ответы (1)


в https://www.ibm.com/support/knowledgecenter/SSSA5P_12.7.0/ilog.odms.ide.help/refcppopl/html/variables/IlcIntMax.html

вы можете прочитать

На 64-битных платформах наибольшее положительное целое число, которое может быть представлено как 64-битное число с плавающей запятой в соответствии со стандартом IEEE 754, или константа 2^53-1. На 32-битных платформах константа 2^31-1.

Этот верхний предел следует соблюдать при указании значений домена для класса IlcIntVar.

person Alex Fleischer    schedule 21.10.2018