НачатьНачать бесплатно

Использование функции обратного вызова

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