Použití callbacku
Chceš najít dvě nejvyšší maxima funkce zisku a rozhodl/a ses použít callback ke shromáždění nalezených optim a výběru dvou nejvyšších hodnot.
Nejprve dokončíš funkci callback. Zkontroluješ, zda je hodnota účelové funkce, kterou basinhopping právě zkoumá, přijata jako optimum – a pokud ano, připojíš ji do seznamu opt_values. Poté spustíš basinhopping s právě definovanou callback funkcí.
basinhopping je již naimportován.
Počáteční odhad x0, kwargs a funkce profit jsou již pro tebe definovány.
Toto cvičení je součástí kurzu
Introduction to Optimization in Python
Pokyny k cvičení
- Doplň funkci
callbacktak, aby ověřila, zda je kandidátxzkoumaný v aktuální iteraci skutečně vyhodnocen jako optimum. - Připoj hodnotu minimalizované účelové funkce do seznamu
opt_values. - Spusť
basinhoppings odpovídající callback funkcí a najdi dvě nejvyšší maxima.
Interaktivní cvičení na vyzkoušení si v praxi
Vyzkoušejte si toto cvičení dokončením tohoto ukázkového kódu.
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}")