Menggunakan callback
Anda ingin menemukan dua maksimum tertinggi dari sebuah fungsi profit dan Anda memutuskan untuk menggunakan callback untuk mengumpulkan titik optimum yang ditemukan, lalu memilih dua nilai teratas.
Pertama, Anda akan melengkapi fungsi callback. Anda akan memeriksa apakah nilai objektif yang saat ini diperiksa oleh basinhopping diterima sebagai optimum, dan jika ya, tambahkan ke daftar opt_values. Setelah itu Anda akan menjalankan basinhopping dengan fungsi callback yang baru saja Anda definisikan.
basinhopping telah diimpor untuk Anda.
Tebakan awal, x0, kwargs, dan fungsi profit telah didefinisikan untuk Anda.
Latihan ini adalah bagian dari kursus
Pengantar Optimasi di Python
Petunjuk latihan
- Lengkapi fungsi
callbackuntuk memeriksa apakah kandidatxyang diperiksa pada iterasi saat ini memang dianggap optimum. - Tambahkan nilai objektif yang diminimalkan ke daftar
opt_values. - Jalankan
basinhoppingdengan fungsi callback yang sesuai dan temukan dua maksimum teratas.
Latihan interaktif praktis
Cobalah latihan ini dengan menyelesaikan kode contoh berikut.
opt_values = []
def callback(x, f, accept):
# Check if the candidate is an optimum
if ____:
# Append the value of the minimized objective to list opt_values
opt_values.append(____)
# Run basinhopping to find top two maxima
result = basinhopping(lambda q: -profit(q), x0, callback=____, minimizer_kwargs=kwargs, niter=5, seed=3)
top2 = sorted(list(set([round(f, 2) for f in opt_values])), reverse=True)[:2]
top2 = [-f for f in top2]
print(f"{result.message}\nThe highest two values are {top2}")