MIP 문제 GAMS에서 상대적 최적 성 갭 계산

Aug 16 2020

MIP 문제의 상대적 최적 성 Gap을 계산하고 싶습니다. 또한 특정 실행 시간에 실행을 중단하고 싶습니다. 이 방법:

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

GAMS가 로그에서 계산하는 간격과 일치하지 않습니다. GAMS는 "Best Integer"를 사용하여 현재 목표 값이 아닌 간격을 찾습니다. 어느 것이 맞습니까? 현재 "Best Integer"를 매개 변수 (예 : .objval)에 저장하려면 어떻게해야합니까?

마지막으로 벤더 알고리즘에서 상대적 최적 성 갭을 계산하는 것이이 방법이 맞습니까?

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

"MIP 솔루션"을 사용하여 GAMS가 계산하는 것

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 반환 "Final Solve")을 사용하여 갭을 계산하므로 계산 된 갭은 % 13이고 mymodel.objval 값은 5.633016E + 7 (GAMS 계산 갭은 % 98)입니다. 그래서 나는 그것을 엑셀 파일로 내보내려면 매개 변수에 "MIP 솔루션"을 저장해야합니다.

답변

1 Lutz Aug 17 2020 at 14:16

상대적 최적 성 차이를 계산하는 여러 공식이 있습니다. 적용되는 솔버에 따라 다릅니다. 이에 대한 일부 정보는 GAMS 옵션 optCR 의 설명에서 찾을 수 있습니다 . 사용하는 솔버의 솔버 매뉴얼에는 실제로 적용된 공식에 대한 자세한 내용이있을 수 있습니다.

질문이 업데이트 된 후 수정 :

당신이 쓴대로 값을 mymodel.objval반환합니다 Final Solve. MIP Solution대신 값 을 보려면 (Cplex 링크가 내부적으로 수행하므로) 최종 해결을 비활성화 할 수 있습니다. 그러나 귀하의 예에서 Final SolveMIP 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)에 문제가있을 수 있습니다.