callback を使う
利益関数の最大値を上位2つ見つけたいとします。そのために、callback を使って見つかった最適値を収集し、そこから上位2つを選ぶことにしました。
まず、callback 関数を完成させます。basinhopping が現在評価している目的関数値が最適と受け入れられたかを確認し、そうであればリスト opt_values に追加します。続いて、定義したコールバック関数を使って basinhopping を実行します。
basinhopping はすでにインポートされています。
初期値 x0、kwargs、そして profit 関数は用意されています。
この演習はコースの一部です
Pythonで学ぶOptimization入門
演習の手順
callback関数を記入し、現在の反復で評価された候補xが最適と見なされるかを確認します。- 最小化された目的関数の値をリスト
opt_valuesに追加します。 - 適切なコールバック関数を指定して
basinhoppingを実行し、最大値の上位2つを見つけます。
実践的なインタラクティブ演習
このサンプルコードを完成させて、この演習に挑戦してみましょう。
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}")