Вычислить относительный разрыв оптимальности в задаче MIP GAMS
Я хочу рассчитать разрыв относительной оптимальности проблемы MIP, а также хочу прервать выполнение в определенное время выполнения. Этот способ:
F(1)
abs(mymodel.objest - mymodel.objval)/max(abs(mymodel.objest),abs(mymodel.objval))
не согласуется с пробелом, который GAMS рассчитывает в журнале. GAMS использует "наилучшее целое число", чтобы найти разрыв, не являющийся текущим целевым значением. какой из них правильный? и как я могу сохранить текущее «наилучшее целое число» в параметре (например, .objval).
и, наконец, вычисление разрыва относительной оптимальности в алгоритме изгибов является правильным?
rgap = (upperBound - lowerBound)/(1 + abs(upperBound));
Что GAMS рассчитывает с помощью "MIP Solution"
MIP Solution: 3334501534.000555 (1625 iterations, 0 nodes)
Final Solve: 56330158.829040 (2561 iterations)
Best possible: 48915652.476336
Absolute gap: 3285585881.524219
Relative gap: 0.985330
F (1) рассчитал разрыв с использованием mymodel.objval (mymodel.objval возвращает «Окончательное решение»), поэтому расчетный разрыв составляет% 13, а значение mymodel.objval - 5,633016E + 7 (расчетный разрыв GAMS составляет% 98). поэтому мне нужно сохранить «Решение MIP» в параметр, чтобы экспортировать его в файл Excel.
Ответы
Существуют разные формулы для расчета разрыва относительной оптимальности. Это зависит от того, какой решатель вы используете. Некоторую информацию об этом можно найти в описании опции GAMS optCR . Руководство решателя, которое вы используете, может содержать более подробную информацию о фактически применяемой формуле.
ИЗМЕНИТЬ после обновления вопроса:
Как вы писали, mymodel.objval
возвращает Final Solve
значение. Если вы хотите MIP Solution
вместо этого увидеть значение (поскольку ссылка Cplex делает это внутри), вы можете деактивировать окончательное решение. Однако, если Final Solve
и MIP Solution
так сильно отличаются, как в вашем примере, это часто указывает на некоторую проблему (обычно они (почти) идентичны). Часто это указывает на плохо масштабируемую модель. Может быть , вы могли бы улучшить ситуацию, затягивая допуски CPLEX (см варианты CPLEX epopt
, eprhs
, epint
) и активируя агрессивное масштабирование (опция CPLEX scaind 2
). Активация mipkappastats
(https://www.gams.com/latest/docs/S_CPLEX.html#CPLEXmipkappastats) и quality
(https://www.gams.com/latest/docs/S_CPLEX.html#CPLEXquality) мог бы дать вам больше информации. DataCheck=2
(https://www.gams.com/latest/docs/S_CPLEX.html#CPLEXdatacheck) могут возникнуть проблемы.