Maximização da Utilidade em Python

Author

Rafael Bressan

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.

from __future__ import division
from sympy import *
# 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\)