Calcule a lacuna de otimização relativa no problema MIP GAMS

Aug 16 2020

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

1 Lutz Aug 17 2020 at 14:16

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.objvalretorna o Final Solvevalor. Se você quiser ver o MIP Solutionvalor (como o link Cplex faz internamente), você pode desativar a resolução final. No entanto, se Final Solvee MIP Solutionsã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.