Я реализовал свою математическую модель, используя Ilog Cplex с c ++. Большинство моих переменных решения имеют дробные значения в оптимальных решениях. Некоторые из них очень малы, поэтому cplex выдает их как 0. Есть ли способ повысить точность, чтобы я все еще мог видеть значения таких переменных?
Кроме того, когда я использую cplex.getBestObjValue()
, это дает мне «-Inf». (Это проблема максимизации.)
Наличие значений для целочисленных переменных, близких (но не совсем) к целочисленным значениям, вполне нормально. CPLEX имеет допуск на интегральность, поэтому эти значения принимаются как достаточно близкие к правильным целочисленным значениям. Просто используйте стандартные функции вывода C ++ для вывода этих значений с любой точностью, которую вы хотите.
В основном это не проблема, но при необходимости вы можете установить допуск интегральности на меньшее значение. Обычно я округляю эти значения до ближайшего целочисленного значения и использую его в качестве решения. Вы также можете попробовать повторно решить вашу модель с этими переменными решения, зафиксированными в их округленных целочисленных значениях, чтобы убедиться, что решение действительно является действительным. Если вы не уверены, что этого достаточно, попробуйте предложение Алекса для акцентирования численной точности.
Вы можете попробовать использовать настройку IloCplex :: Param :: Emphasis :: Numeric
Подчеркивает точность в нестабильных или сложных задачах. Этот параметр позволяет указать CPLEX, что он должен подчеркивать точность в сложных или нестабильных задачах, с последующим компромиссом производительности во времени и памяти.
О вашем втором вопросе, ваша модель LP?
С уважением