大域最適解を見つける
次の利潤最大化問題について、大域最大値を求めてください。
\(\Pi= -\frac{1}{4}q^4 + 11q^3 - 160q^2 + 900q\)
数量の下限は自然に \(0\) で、\(q=30\) では利潤が負であることが分かっているため、\(30\) を上限の候補とします。
この問題の大域最適解を見つけましょう。
basinhopping はインポート済みです。
この演習はコースの一部です
Pythonで学ぶOptimization入門
演習の手順
- 境界を \(0\) と \(30\) にして、キーワード引数の辞書
kwargsを定義します。 - 目的関数として
profitの負値を用い、初期値x0を与えてminimizerにkwargsを渡しながら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")