Вычислить относительный разрыв оптимальности в задаче MIP GAMS

Aug 16 2020

Я хочу рассчитать разрыв относительной оптимальности проблемы 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.

Ответы

1 Lutz Aug 17 2020 at 14:16

Существуют разные формулы для расчета разрыва относительной оптимальности. Это зависит от того, какой решатель вы используете. Некоторую информацию об этом можно найти в описании опции 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) могут возникнуть проблемы.