ComeçarComece de graça

Usando callback

Você quer encontrar os dois maiores máximos de uma função de lucro e decidiu usar callback para coletar os ótimos encontrados e, depois, selecionar os dois maiores valores.

Primeiro, você vai completar a função callback. Você vai verificar se o valor da função objetivo atualmente examinado por basinhopping foi aceito como ótimo e, em caso afirmativo, adicioná-lo à lista opt_values. Em seguida, você executará o basinhopping com a função de callback que acabou de definir.

basinhopping já foi importado para você. A suposição inicial x0, kwargs e a função profit já foram definidos para você.

Este exercício faz parte do curso

Introdução à Otimização em Python

Ver curso

Instruções do exercício

  • Complete a função callback para verificar se a candidata x examinada na iteração atual é de fato considerada um ótimo.
  • Adicione o valor da função objetivo minimizada à lista opt_values.
  • Execute basinhopping com a função de callback apropriada e encontre os dois maiores máximos.

Exercício interativo prático

Experimente este exercício completando este código de exemplo.

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}")
Editar e executar o código