Calcule la brecha de optimización relativa en el problema MIP GAMS

Aug 16 2020

Quiero calcular la brecha de optimización relativa de un problema MIP y también quiero cancelar las ejecuciones en un tiempo de ejecución determinado. este método:

F(1)    
abs(mymodel.objest - mymodel.objval)/max(abs(mymodel.objest),abs(mymodel.objval)) 

no es consistente con la brecha que GAMS calcula en log. GAMS utiliza el "Mejor entero" para encontrar la brecha y no el valor objetivo actual. ¿Cuál es el correcto? y ¿Cómo puedo guardar el "Mejor entero" actual en un parámetro (como .objval).

y, finalmente, calcular la brecha de optimización relativa en un algoritmo de dobladores es correcto de esta manera?

rgap = (upperBound - lowerBound)/(1 + abs(upperBound));

Qué calcula GAMS usando "Solución MIP"

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) brecha calculada usando mymodel.objval (mymodel.objval devuelve "Final Solve"), por lo que la brecha calculada es %13 y el valor de mymodel.objval es 5.633016E+7 (la brecha calculada de GAMS es %98). así que necesito guardar "Solución MIP" en un parámetro para exportarlo a un archivo de Excel.

Respuestas

1 Lutz Aug 17 2020 at 14:16

Existen diferentes fórmulas para calcular la brecha de optimalidad relativa. Depende del solucionador que use, cuál se aplica. Puede encontrar información sobre esto en la descripción de la opción optCR de GAMS . El manual del solucionador del solucionador que usa podría tener más detalles sobre la fórmula realmente aplicada.

EDITAR después de que se actualizó la pregunta:

Como escribiste mymodel.objvaldevuelve el Final Solvevalor. Si desea ver el MIP Solutionvalor en su lugar (como lo hace internamente el enlace Cplex), puede desactivar la resolución final. Sin embargo, si Final Solvey MIP Solutionson tan diferentes como en su ejemplo, a menudo es una indicación de algún problema (por lo general, son (casi) idénticos). A menudo, esto indica un modelo a escala deficiente. Tal vez podría mejorar la situación ajustando las tolerancias de Cplex (consulte las opciones de Cplex epopt, eprhs, epint) y activando el escalado agresivo (opción de Cplex scaind 2). Activando mipkappastats(https://www.gams.com/latest/docs/S_CPLEX.html#CPLEXmipkappastats) y quality(https://www.gams.com/latest/docs/S_CPLEX.html#CPLEXquality) podría darle más información. DataCheck=2(https://www.gams.com/latest/docs/S_CPLEX.html#CPLEXdatacheck) podría mostrar algunos problemas.