Hitung Gap optimalitas relatif di Soal MIP GAMS
Saya ingin menghitung Gap optimalitas relatif dari Masalah MIP juga saya ingin membatalkan proses pada waktu proses tertentu. metode ini:
F(1)
abs(mymodel.objest - mymodel.objval)/max(abs(mymodel.objest),abs(mymodel.objval))
tidak konsisten dengan celah yang dihitung oleh GAMS dalam log. GAMS menggunakan "Bilangan Bulat Terbaik" untuk menemukan celah, bukan nilai tujuan saat ini. yang mana yang benar? dan Bagaimana cara menyimpan "Integer Terbaik" saat ini ke dalam parameter (seperti .objval).
dan akhirnya menghitung Gap optimalitas relatif dalam algoritma benders benar dengan cara ini?
rgap = (upperBound - lowerBound)/(1 + abs(upperBound));
Apa yang Dihitung GAMS menggunakan "Solusi 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) menghitung gap menggunakan mymodel.objval (mymodel.objval mengembalikan "Final Solve") sehingga gap yang dihitung adalah% 13 dan nilai mymodel.objval adalah 5.633016E + 7 (gap yang dihitung oleh GAMS adalah% 98). jadi saya perlu menyimpan "Solusi MIP" ke parameter untuk mengekspornya ke file excel.
Jawaban
Ada rumus yang berbeda untuk menghitung kesenjangan optimalitas relatif. Itu tergantung pada solver yang Anda gunakan, mana yang diterapkan. Beberapa info tentang ini dapat ditemukan dalam deskripsi optCR opsi GAMS . Panduan pemecah pemecah yang Anda gunakan bisa memiliki detail lebih lanjut tentang rumus yang sebenarnya diterapkan.
EDIT setelah pertanyaan diperbarui:
Saat Anda menulis mymodel.objval
mengembalikan Final Solve
nilainya. Jika Anda ingin melihat MIP Solution
nilainya (karena tautan Cplex melakukannya secara internal), Anda dapat menonaktifkan penyelesaian akhir. Namun, jika Final Solve
dan MIP Solution
sangat berbeda seperti dalam contoh Anda, ini sering menjadi indikasi untuk beberapa masalah (biasanya, keduanya (hampir) identik). Seringkali, ini menunjukkan model dengan skala yang buruk. Mungkin Anda bisa memperbaiki situasi dengan mengencangkan toleransi CPLEX (lihat pilihan CPLEX epopt
, eprhs
, epint
) dan mengaktifkan skala agresif (pilihan CPLEX scaind 2
). Mengaktifkan mipkappastats
(https://www.gams.com/latest/docs/S_CPLEX.html#CPLEXmipkappastats) dan quality
(https://www.gams.com/latest/docs/S_CPLEX.html#CPLEXquality) dapat memberi Anda lebih banyak informasi. DataCheck=2
(https://www.gams.com/latest/docs/S_CPLEX.html#CPLEXdatacheck) mungkin menunjukkan beberapa masalah.