Могу ли я включить непрерывную переменную при оптимизации с помощью CPMpy?
Мне нужно запустить модель, в которой я оптимизирую диету в рамках набора ограничений и в конце вызываю все целочисленные решения. Я нашел пример диеты, который почти соответствует тому, что мне нужно, здесь: hakank.org. Однако в моем случае мои переменные принимают непрерывные значения, поэтому в примерах это будут все питательные ценности и стоимость, а только x принимает целое число. Однако кажется, что я могу определить только «intvar» или «boolvar» при определении переменных с этой моделью. Есть ли способ преодолеть это? Будут ли другие более подходящие модели с примерами, которые я могу прочитать в Интернете?
Я новичок в программировании ограничений, поэтому любая помощь будет оценена!
Спасибо.
1 ответ
Чтобы ответить на ваш вопрос: CPMpy не поддерживает переменные с плавающей запятой (и я не уверен, что он находится в стадии разработки для будущих расширений).
Другой вариант — помимо использования решателей MIP, как предлагает Эрвин, — написать модель проблемы MiniZinc (https://www.minizinc.org/ ) и использовать некоторые из ее решателей.См. мою версию MiniZinc о диете: http://hakank.org/minizinc/diet1.mzn . И см. MiniZinc-версию проблемы диеты Стиглера, хотя это только переменные с плавающей запятой: http://hakank.org/minizinc/stigler.mzn.
Некоторые решатели MiniZinc CP также поддерживают переменные с плавающей запятой, например, Gecode, JaCoP и OptimathSAT. Однако, в зависимости от точных ограничений, таких как связь с переменными с плавающей запятой и переменными с целыми числами, им может быть трудно найти быстрое решение. В отличие от некоторых решателей MIP, генерация всех решений является одной из основных особенностей решателей CP.
Возможно, все эти разнообразные предложения больше запутают вас, чем помогут. Извини за это. Это может помочь, если вы дадите более подробную информацию о вашей проблеме.