Pyomoで効用最大化問題を解く

Pythonを使って、効用最大化問題を解くという超ベーシックなことをやってみる。

参考にさせていただいたのはこちら。今日もpyomoとipoptを使う。
helve-python.hatenablog.jp


効用最大化問題

なんでもよかったのだけど、手元の武隈ミクロの数値例を使った。

演習ミクロ経済学 (演習新経済学ライブラリ)

演習ミクロ経済学 (演習新経済学ライブラリ)


武隈ミクロ例題1.3

効用関数  $ u=x_1^3 x_2^2 $
所得 $20$, $p_1=2, p_2=1$のときの各財の需要量はいくらか。

解 $x_1=6$, x_2=8




ソースコード

import pyomo.environ as pyo

model1 = pyo.ConcreteModel(name="NLP sample",
doc="2 variables, 1 constraints")

model1.x1 = pyo.Var(domain=pyo.NonNegativeReals) # 変数を定義
model1.x2 = pyo.Var(domain=pyo.NonNegativeReals)
 

model1.OBJ = pyo.Objective(expr = model1.x1**3 * model1.x2**2,
sense = pyo.maximize)# 目的関数を定義
model1.Constraint = pyo.Constraint(expr = 2*model1.x1 + model1.x2 <=20)
# 制約条件を定義

opt = pyo.SolverFactory('ipopt') # 最適化ソルバを設定
res = opt.solve(model1) # 最適化計算を実行

print(f"x1: {model1.x1()}")
print(f"x2: {model1.x2()}")

実行結果は以下。無事解けた。

x1: 6.000000059999709
x2: 8.000000079999856


(2020.11.15)
探索中:価格比を残したままモデルを解く方法