始める無料で始める

大域最適解を見つける

次の利潤最大化問題について、大域最大値を求めてください。

\(\Pi= -\frac{1}{4}q^4 + 11q^3 - 160q^2 + 900q\)

数量の下限は自然に \(0\) で、\(q=30\) では利潤が負であることが分かっているため、\(30\) を上限の候補とします。

この問題の大域最適解を見つけましょう。

basinhopping はインポート済みです。

この演習はコースの一部です

Pythonで学ぶOptimization入門

コースを見る

演習の手順

  • 境界を \(0\) と \(30\) にして、キーワード引数の辞書 kwargs を定義します。
  • 目的関数として profit の負値を用い、初期値 x0 を与えて minimizerkwargs を渡しながら basinhopping を実行します。

実践的なインタラクティブ演習

このサンプルコードを完成させて、この演習に挑戦してみましょう。

def profit(q): 
	return -q**4 / 4 + 11 * q**3 - 160 * q**2 + 900 * q
  
x0 = 0

# Define the keyword arguments for bounds
kwargs = {"bounds": [(____, ____)]} 

# Run basinhopping to find the optimal quantity
result = basinhopping(____ q: -profit(q), ____, ____=kwargs)

print(f"{result.message}")
print(f"The maximum according to basinhopping(x0={x0}) is at {result.x[0]:.2f}\n")
コードを編集して実行