Точность в вычислениях c ++ Cplex

Я реализовал свою математическую модель, используя Ilog Cplex с c ++. Большинство моих переменных решения имеют дробные значения в оптимальных решениях. Некоторые из них очень малы, поэтому cplex выдает их как 0. Есть ли способ повысить точность, чтобы я все еще мог видеть значения таких переменных?

Кроме того, когда я использую cplex.getBestObjValue(), это дает мне «-Inf». (Это проблема максимизации.)

0

Решение

Наличие значений для целочисленных переменных, близких (но не совсем) к целочисленным значениям, вполне нормально. CPLEX имеет допуск на интегральность, поэтому эти значения принимаются как достаточно близкие к правильным целочисленным значениям. Просто используйте стандартные функции вывода C ++ для вывода этих значений с любой точностью, которую вы хотите.

В основном это не проблема, но при необходимости вы можете установить допуск интегральности на меньшее значение. Обычно я округляю эти значения до ближайшего целочисленного значения и использую его в качестве решения. Вы также можете попробовать повторно решить вашу модель с этими переменными решения, зафиксированными в их округленных целочисленных значениях, чтобы убедиться, что решение действительно является действительным. Если вы не уверены, что этого достаточно, попробуйте предложение Алекса для акцентирования численной точности.

1

Другие решения

Вы можете попробовать использовать настройку IloCplex :: Param :: Emphasis :: Numeric

Подчеркивает точность в нестабильных или сложных задачах. Этот параметр позволяет указать CPLEX, что он должен подчеркивать точность в сложных или нестабильных задачах, с последующим компромиссом производительности во времени и памяти.

О вашем втором вопросе, ваша модель LP?

С уважением

0

По вопросам рекламы [email protected]