Pyomoで効用最大化問題を解く
Pythonを使って、効用最大化問題を解くという超ベーシックなことをやってみる。
参考にさせていただいたのはこちら。今日もpyomoとipoptを使う。
helve-python.hatenablog.jp
効用最大化問題
なんでもよかったのだけど、手元の武隈ミクロの数値例を使った。
- 作者:武隈 愼一
- 発売日: 2017/03/10
- メディア: 単行本
武隈ミクロ例題1.3
効用関数 $ u=x_1^3 x_2^2 $
所得 $20$, $p_1=2, p_2=1$のときの各財の需要量はいくらか。
解 $x_1=6$,
ソースコード
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)
探索中:価格比を残したままモデルを解く方法