Использование функции обратного вызова
Вы хотите найти два наибольших максимума функции прибыли и решили использовать 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}")