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
Instruções do exercício
- Complete a função
callbackpara verificar se a candidataxexaminada na iteração atual é de fato considerada um ótimo. - Adicione o valor da função objetivo minimizada à lista
opt_values. - Execute
basinhoppingcom 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}")