Calcule a lacuna de otimização relativa no problema MIP GAMS
Eu quero calcular a lacuna de otimização relativa de um problema de MIP e também quero abortar as execuções em um determinado tempo de execução. este método:
F(1)
abs(mymodel.objest - mymodel.objval)/max(abs(mymodel.objest),abs(mymodel.objval))
não é consistente com a lacuna que o GAMS calcula em log. O GAMS usa "Best Integer" para encontrar o intervalo e não o valor objetivo atual. qual é o correto? e Como posso salvar o "Melhor Número Inteiro" atual em um parâmetro (como .objval).
e, finalmente, calculando a lacuna de otimização relativa em um algoritmo de dobradores é assim?
rgap = (upperBound - lowerBound)/(1 + abs(upperBound));
O que o GAMS calcula usando "Solução 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) calculou o gap usando mymodel.objval (mymodel.objval retorna "Final Solve"), então o gap calculado é %13 e o valor mymodel.objval é 5,633016E+7 (o gap calculado GAMS é %98). então eu preciso salvar "Solução MIP" em um parâmetro para exportá-lo para um arquivo excel.
Respostas
Existem diferentes fórmulas para calcular a lacuna de otimização relativa. Depende do solver que você usa, qual é aplicado. Algumas informações sobre isso podem ser encontradas na descrição da opção optCR do GAMS . O manual do solucionador que você usa poderia ter mais detalhes sobre a fórmula realmente aplicada.
EDIT depois que a pergunta foi atualizada:
Como você escreveu mymodel.objval
retorna o Final Solve
valor. Se você quiser ver o MIP Solution
valor (como o link Cplex faz internamente), você pode desativar a resolução final. No entanto, se Final Solve
e MIP Solution
são muito diferentes como no seu exemplo, isso geralmente é uma indicação de algum problema (geralmente, eles são (quase) idênticos). Muitas vezes, isso indica um modelo mal dimensionado. Talvez você possa melhorar a situação apertando as tolerâncias do Cplex (consulte as opções do Cplex epopt
, eprhs
, epint
) e ativando o dimensionamento agressivo (opção do Cplex scaind 2
). Ativando mipkappastats
(https://www.gams.com/latest/docs/S_CPLEX.html#CPLEXmipkappastats) e quality
(https://www.gams.com/latest/docs/S_CPLEX.html#CPLEXquality) pode fornecer mais informações. DataCheck=2
(https://www.gams.com/latest/docs/S_CPLEX.html#CPLEXdatacheck) pode apresentar alguns problemas.