始める無料で始める

callback を使う

利益関数の最大値を上位2つ見つけたいとします。そのために、callback を使って見つかった最適値を収集し、そこから上位2つを選ぶことにしました。

まず、callback 関数を完成させます。basinhopping が現在評価している目的関数値が最適と受け入れられたかを確認し、そうであればリスト opt_values に追加します。続いて、定義したコールバック関数を使って basinhopping を実行します。

basinhopping はすでにインポートされています。 初期値 x0kwargs、そして 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}")
コードを編集して実行