効用最大化
Bill はピアノを学び始めた学生で、古典音楽を学ぶ時間を $c$、モダン音楽を学ぶ時間を \(m\) として配分します。彼の選好は、先ほどプロットしたのと同じ効用関数で表されます。
$U(c, m)=c^{0.7}m^{0.3}$。
毎日の学習時間は合計で 2 時間($c+m=2$)です。Bill が最適な学習計画を見つけられるよう手伝ってください。
np と minimize は読み込まれています。すでに SymPy から symbols、diff、solve をインポートし、c と m を symbols として定義し、効用関数 U も定義済みです。
この演習はコースの一部です
Pythonで学ぶOptimization入門
演習の手順
varsをアンパックして効用関数を定義し、負符号を付けて返します。- 制約関数を定義します。
typeとfunを用いて制約を設定します。- 最適化を実行し、
cとmの結果を取り出します。
実践的なインタラクティブ演習
このサンプルコードを完成させて、この演習に挑戦してみましょう。
# Define the utility function
def utility_function(vars):
____
return ____
# Define the constraint function
def constraint(vars):
return ____
initial_guess = [12, 12]
# Set up the constraint
constraint_definition = {____}
# Perform optimization
result = ____
____ = result.____
print("Optimal study hours for classical music:", round(c, 2))
print("Optimal study hours for modern music:", round(m, 2))