Використання callback
Ви хочете знайти два найбільші максимуми функції прибутку та вирішили використати callback, щоб зібрати знайдені оптимуми, а потім вибрати дві найвищі величини.
Спочатку завершіть функцію callback. Перевірте, чи значення цільової функції, яке зараз розглядає basinhopping, приймається як оптимум. Якщо так, додайте його до списку opt_values. Після цього запустіть basinhopping із щойно визначеною функцією зворотного виклику.
basinhopping уже імпортовано для вас.
Початкове припущення x0, kwargs і функцію profit уже визначено.
Ця вправа є частиною курсу
Вступ до оптимізації в Python
Інструкції до вправи
- Заповніть функцію
callback, щоб перевірити, чи кандидатx, розглянутий у поточній ітерації, справді вважається оптимумом. - Додайте значення мінімізованої цільової функції до списку
opt_values. - Запустіть
basinhoppingз відповідною функцією зворотного виклику й знайдіть два найбільші максимуми.
Інтерактивна практична вправа
Спробуйте виконати цю вправу, доповнивши цей зразок коду.
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}")