from __future__ import division
from sympy import *Maximização da Utilidade em Python
Resolvendo o problema do consumidor com Python
Introdução
O problema do consumidor é assim definido:
\[ \begin{aligned} \max_{x_1, x_2} &\quad u(x_1, x_2) \\ \text{s.a.} &\quad p_1 x_1 + p_2 x_2 \leq m \\ \end{aligned} \]
Neste exercício utilizaremos a função utilidade Cobb-Douglas: \(u(x_1, x_2) = x_1^\alpha x_2^{1-\alpha}\).
Utilizando o Sympy
O Sympy é uma biblioteca de computação simbólica para Python. Com ela podemos resolver o problema do consumidor de forma analítica. O sympy irá resolver o lagrangiano do problema e encontrar a demanda marshalliana dos bens 1 e 2.
# Definindo os simbolos
x1, x2, p1, p2 = symbols("x1 x2 p1 p2", positive=True)
alpha, mu = symbols("alpha mu", Real=True) # alpha, multiplicador de lagrange
u, m, e, v = symbols("u m e v") # utilidade, renda, despesa, utilidade indireta# Definindo a função utilidade
utilidade = x1**alpha * x2 ** (1 - alpha)
utilidade\(\displaystyle x_{1}^{\alpha} x_{2}^{1 - \alpha}\)
# Definindo a restrição orçamentária
ro = p1 * x1 + p2 * x2
ro\(\displaystyle p_{1} x_{1} + p_{2} x_{2}\)
# Definindo o lagrangiano
L=utilidade + mu * (m - ro)
L\(\displaystyle \mu \left(m - p_{1} x_{1} - p_{2} x_{2}\right) + x_{1}^{\alpha} x_{2}^{1 - \alpha}\)
# Condicoes de primeira ordem
foc1 = diff(L, x1)
foc2 = diff(L, x2)
foc3 = diff(L, mu)# Resolvendo o sistema de equações
solucao = solve([foc1, foc2, foc3], [x1, x2, mu], dict=True)
solucao[{mu: alpha*(alpha*m*p2)**(alpha - 1)*(-alpha*m + m)**(1 - alpha)/p1**alpha,
x1: alpha*m/p1,
x2: m*(1 - alpha)/p2}]
# Extraindo as demandas marshallianas
x1_mar = solucao[0][x1]
x1_mar\(\displaystyle \frac{\alpha m}{p_{1}}\)
x2_mar = solucao[0][x2]
x2_mar\(\displaystyle \frac{m \left(1 - \alpha\right)}{p_{2}}\)
utilidade_indireta = utilidade.subs({x1: x1_mar, x2: x2_mar})
utilidade_indireta\(\displaystyle \left(\frac{\alpha m}{p_{1}}\right)^{\alpha} \left(\frac{m \left(1 - \alpha\right)}{p_{2}}\right)^{1 - \alpha}\)
Qual a maior utilidade que o consumidor pode obter com renda \(m=100\) e os preços \(p_1=1\) e \(p_2=2\)? Considere \(\alpha=0.8\).
utilidade_indireta.subs({m: 100, p1: 1, p2: 2, alpha: 0.8})\(\displaystyle 52.7803164309158\)
Nas condições acima, qual o consumo dos bens 1 e 2?
x1_sol = x1_mar.subs({m: 100, p1: 1, p2: 2, alpha: 0.8})
x1_sol\(\displaystyle 80.0\)
x2_sol = x2_mar.subs({m: 100, p1: 1, p2: 2, alpha: 0.8})
x2_sol\(\displaystyle 10.0\)
Confira que a utilidade gerada pelo consumo destas quantidades dos bens 1 e 2 é igual à utilidade indireta.
utilidade.subs({x1: x1_sol, x2: x2_sol, alpha: 0.8})\(\displaystyle 52.7803164309158\)