3) Equilíbrio do item (a)
A situação descrita no item (a) nos mostra que existem \(J = 2\) ativos e \(S = 2\) estados.
A matriz \(X\) de payoffs é dada por:
\[
X =
\left[
\begin{array}{cc}
x_{1} & x_{2}
\end{array}
\right]
=
\left[
\begin{array}{cc}
x_{11} & x_{12} \\
x_{21} & x_{22}
\end{array}
\right]
=
\left[
\begin{array}{cc}
1 & 1 \\
1 & 0
\end{array}
\right]
\]
ou seja, \(x_{1}\) é o ativo livre de risco e \(x_{2}\) é o ativo arriscado.
Seja o problema de escolha do consumo/carteira do agente \(i\):
\[
\begin{array}{rrl}
\displaystyle\max_{c^i_0, c^i_{1,1}, c^i_{1,2}, h} & u(c^i_0, c^i_{1,1}, c^i_{1,2}) & = a^i_0 \log{c^i_0} + a^i_1 \log{c^i_{1,1}} + a^i_2 \log{c^i_{1,2}} \\
~ & ~ & ~ \\
s.a. & c^i_0 & \leq w^i_0 - p_1 h^i_1 - p_2 h^i_2 \\
~ & c^i_{1,1} & \leq w^i_{1,1} + x_{11} h^i_1 + x_{12} h^i_2 \\
~ & c^i_{1,2} & \leq w^i_{1,2} + x_{21} h^i_1 + x_{22} h^i_2 \\
~ & c^i_0 & \geq 0 \\
~ & c^i_{1,1} & \geq 0 \\
~ & c^i_{1,2} & \geq 0
\end{array}
\]
Como \(u(c^i_0, c^i_{1,1}, c^i_{1,2})\) é estritamente crescente, então:
\[
\begin{array}{rcl}
c^i_0 & = & w^i_0 - p_1 h^i_1 - p_2 h^i_2 \\
c^i_{1,1} & = & w^i_{1,1} + x_{11} h^i_1 + x_{12} h^i_2 \\
c^i_{1,2} & = & w^i_{1,2} + x_{21} h^i_1 + x_{22} h^i_2
\end{array}
\]
Usando a equação de \(h_j\) (condição de primeira ordem) apresentada no final da seção 1, então:
\[
\frac{a^i_0}{c^i_0} p_j = \sum_{s=1}^{2}{\frac{a^i_s}{c^i_{1,s}} x_{sj}}, \forall j
\]
\(\Rightarrow \frac{a^i_0}{w^i_0 - p_1 h^i_1 - p_2 h^i_2} p_j = \frac{a^i_1}{w^i_{1,1} + x_{11} h^i_1 + x_{12} h^i_2} x_{1j} + \frac{a^i_2}{w^i_{1,2} + x_{21} h^i_1 + x_{22} h^i_2} x_{2j}, \forall j\)
\[
\Rightarrow
\left\{
\begin{array}{rcl}
\frac{a^i_0}{w^i_0 - p_1 h^i_1 - p_2 h^i_2} p_1 & = & \frac{a^i_1}{w^i_{1,1} + x_{11} h^i_1 + x_{12} h^i_2} x_{11} + \frac{a^i_2}{w^i_{1,2} + x_{21} h^i_1 + x_{22} h^i_2} x_{21} \\
\frac{a^i_0}{w^i_0 - p_1 h^i_1 - p_2 h^i_2} p_2 & = & \frac{a^i_1}{w^i_{1,1} + x_{11} h^i_1 + x_{12} h^i_2} x_{12} + \frac{a^i_2}{w^i_{1,2} + x_{21} h^i_1 + x_{22} h^i_2} x_{22}
\end{array}
\right.
\]
O agente \(i=1\) possui dotação \(w^i_0 = 19/8\), \(w^i_{1,1} = 1\), \(w^i_{1,2} = 3\) e sua função utilidade possui os parâmetros \(a^i_0 = 1\), \(a^i_1 = a^i_2= 1/4\). Substituindo estes valores nas equações acima, podemos resolver para encontrar \(h^i_1\) e \(h^i_2\). O seguinte programa escrito em Python calcula tais valores:
import numpy as np
from sympy import Symbol
from sympy import simplify
from sympy import N
from sympy.solvers import solve
def solucao_h1_h2(X, val_w0, val_w1, val_a0, val_a1, val_a2):
a0, a1, a2 = Symbol("a0"), Symbol("a1"), Symbol("a2")
w0, w11, w12 = Symbol("w0"), Symbol("w11"), Symbol("w12")
x11, x12, x21, x22 = Symbol("x11"), Symbol("x12"), Symbol("x21"), Symbol("x22")
h1, h2 = Symbol("h1"), Symbol("h2")
p1, p2 = Symbol("p1"), Symbol("p2")
eq1 = a0*p1/(w0 - p1*h1 - p2*h2) - a1*x11/(w11 + x11*h1 + x21*h2) - a2*x21/(w12 + x12*h1 + x22*h2)
eq1 = eq1.subs({w0: val_w0, w11: val_w1[0], w12: val_w1[1], x11: X[0][0], x21: X[1][0], x12: X[0][1], x22: X[1][1], a0: val_a0, a1: val_a1, a2: val_a2})
eq1 = simplify(96.0*eq1)
print "eq1: ", eq1, " = 0"
eq2 = a0*p2/(w0 - p1*h1 - p2*h2) - a1*x12/(w11 + x11*h1 + x21*h2) - a2*x22/(w12 + x12*h1 + x22*h2)
eq2 = eq2.subs({w0: val_w0, w11: val_w1[0], w12: val_w1[1], x11: X[0][0], x21: X[1][0], x12: X[0][1], x22: X[1][1], a0: val_a0, a1: val_a1, a2: val_a2})
eq2 = simplify(32.0*eq2)
print "eq2: ", eq2, " = 0"
solucoes_h1_h2 = solve((eq1, eq2), h1, h2, rational=True)
print "Solucoes\n"
for k, solucao in enumerate(solucoes_h1_h2):
print "Solucao ", (k+1)
print "h1 = ", solucao[0]
print "h2 = ", solucao[1]
return solucoes_h1_h2
X = [[1.0,1.0],[1.0,0.0]]
w0_ag1 = 19.0/8.0
w1_ag1 = [1.0, 3.0]
a0_ag1, a1_ag1, a2_ag1 = 1.0, 1.0/4.0, 1.0/4.0
print "Solucao do problema do agente 1"
solucoes_ag1 = solucao_h1_h2(X, val_w0 = w0_ag1, val_w1 = w1_ag1, val_a0 = a0_ag1, val_a1 = a1_ag1, val_a2 = a2_ag1)
Como resultado da execução do programa, temos que \(h^i_1\) e \(h^i_2\) para o agente \(i=1\) são dados por:
\[
i = 1:
\left\{
\begin{array}{rcl}
h^i_1 & = & \frac{-120 p_1 + 128 p_2 + 19}{48 (p_1 - p_2)} \\
h^i_2 & = & \frac{24 p_1^2 + 32 p_1 p_2 + 19 p_1 - 64 p_2^2 - 38 p_2}{48 p_2 (p_1 - p_2)}
\end{array}
\right.
\]
Da mesma forma, considerando que o agente \(i=2\) possui dotação \(w^i_0 = 21/8\), \(w^i_{1,1} = 5\), \(w^i_{1,2} = 3\) e sua função utilidade possui os parâmetros \(a^i_0 = 1\), \(a^i_1 = a^i_2= 1/6\), podemos substituir estes valores nas equações e usar o programa em Python para encontrar \(h^i_1\) e \(h^i_2\):
w0_ag2 = 21.0/8.0
w1_ag2 = [5.0, 3.0]
a0_ag2, a1_ag2, a2_ag2 = 1.0, 1.0/6.0, 1.0/6.0
print "\nSolucao do problema do agente 2"
solucoes_ag2 = solucao_h1_h2(X, val_w0 = w0_ag2, val_w1 = w1_ag2, val_a0 = a0_ag2, val_a1 = a1_ag2, val_a2 = a2_ag2)
\(h^i_1\) e \(h^i_2\) para o agente \(i=2\) são dados por:
\[
i = 2:
\left\{
\begin{array}{rcl}
h^i_1 & = & \frac{-168 p_1 + 208 p_2 + 21}{64 (p_1 - p_2)} \\
h^i_2 & = & \frac{24 p_1^2 - 160 p_1 p_2 + 21 p_1 + 96 p_2^2 - 42 p_2}{64 p_2 (p_1 - p_2)}
\end{array}
\right.
\]
E, usando a condição de "market clearing", podemos chegar nas seguintes de equações em \(p_1\) e \(p_2\):
\( h^1_1 + h^2_1 = 0 \Rightarrow \frac{-120 p_1 + 128 p_2 + 19}{48 (p_1 - p_2)} + \frac{-168 p_1 + 208 p_2 + 21}{64 (p_1 - p_2)} = 0 \)
\( h^1_2 + h^2_2 = 0 \Rightarrow \frac{24 p_1^2 + 32 p_1 p_2 + 19 p_1 - 64 p_2^2 - 38 p_2}{48 p_2 (p_1 - p_2)} + \frac{24 p_1^2 - 160 p_1 p_2 + 21 p_1 + 96 p_2^2 - 42 p_2}{64 p_2 (p_1 - p_2)} = 0 \)
O programa em Python abaixo resolve o sistema de equações acima e encontra \(p_1\) e \(p_2\), e também calcula os valores de \(\{h^i\}\) e \(\{(c^i_0, c^i_1)\}\):
p1, p2 = Symbol("p1"), Symbol("p2")
indice_solucao = 1
for solucao_ag1 in solucoes_ag1:
sol_h1_ag1 = solucao_ag1[0]
sol_h2_ag1 = solucao_ag1[1]
for solucao_ag2 in solucoes_ag2:
sol_h1_ag2 = solucao_ag2[0]
sol_h2_ag2 = solucao_ag2[1]
if ((p1 in sol_h1_ag1.free_symbols) or (p1 in sol_h2_ag1.free_symbols) or (p1 in sol_h1_ag2.free_symbols) or (p1 in sol_h2_ag2.free_symbols) or (p2 in sol_h1_ag1.free_symbols) or (p2 in sol_h2_ag1.free_symbols) or (p2 in sol_h1_ag2.free_symbols) or (p2 in sol_h2_ag2.free_symbols)):
eq1_p = sol_h1_ag1 + sol_h1_ag2
eq2_p = sol_h2_ag1 + sol_h2_ag2
solucoes_p1_p2 = solve((eq1_p, eq2_p), p1, p2, rational=True)
print "Verificando: "
print "eq1_p: ", eq1_p
print "eq2_p: ", eq2_p
print "Solucao: ", solucoes_p1_p2
print ""
if (len(solucoes_p1_p2) > 0):
if (type(solucoes_p1_p2) is list):
for solucao_p1_p2 in solucoes_p1_p2:
sol_p1 = solucao_p1_p2[0]
sol_p2 = solucao_p1_p2[1]
else:
sol_p1 = solucoes_p1_p2[p1]
sol_p2 = p2
sol_h1_ag1_val = sol_h1_ag1.subs({Symbol('p1'): sol_p1, Symbol('p2'): sol_p2})
sol_h2_ag1_val = sol_h2_ag1.subs({Symbol('p1'): sol_p1, Symbol('p2'): sol_p2})
c0_ag1 = w0_ag1 - sol_p1*sol_h1_ag1_val - sol_p2*sol_h2_ag1_val
c11_ag1 = w1_ag1[0] + x11*sol_h1_ag1_val + x12*sol_h2_ag1_val
c12_ag1 = w1_ag1[1] + x21*sol_h1_ag1_val + x22*sol_h2_ag1_val
sol_h1_ag2_val = sol_h1_ag2.subs({Symbol('p1'): sol_p1, Symbol('p2'): sol_p2})
sol_h2_ag2_val = sol_h2_ag2.subs({Symbol('p1'): sol_p1, Symbol('p2'): sol_p2})
c0_ag2 = w0_ag2 - sol_p1*sol_h1_ag2_val - sol_p2*sol_h2_ag2_val
c11_ag2 = w1_ag2[0] + x11*sol_h1_ag2_val + x12*sol_h2_ag2_val
c12_ag2 = w1_ag2[1] + x21*sol_h1_ag2_val + x22*sol_h2_ag2_val
condicao_consumo_atendida = (float(c0_ag1)>1.0e-10) and (float(c11_ag1)>1.0e-10) and (float(c12_ag1)>1.0e-10) and (float(c0_ag2)>1.0e-10) and (float(c11_ag2)>1.0e-10) and (float(c12_ag2)>1.0e-10)
if ((len((sol_h1_ag1_val+sol_h1_ag2_val+sol_h2_ag1_val+sol_h2_ag2_val).atoms(Symbol))==0) and (abs(N(sol_h1_ag1_val+sol_h1_ag2_val)) < 1e-6) and (abs(N(sol_h2_ag1_val+sol_h2_ag2_val)) < 1e-6) and condicao_consumo_atendida):
print "[Solucao ", indice_solucao, "]"
f_ag1 = a0_ag1*np.log(float(c0_ag1)) + a1_ag1*np.log(float(c11_ag1)) + a2_ag1*np.log(float(c12_ag1))
f_ag2 = a0_ag2*np.log(float(c0_ag2)) + a1_ag2*np.log(float(c11_ag2)) + a2_ag2*np.log(float(c12_ag2))
indice_solucao += 1
else:
f_ag1 = -np.Inf
f_ag2 = -np.Inf
print "[Sem Solucao]"
print "p1 = ", sol_p1
print "p2 = ", sol_p2
print "Agente 1"
print "h1 = ", sol_h1_ag1
print "h1 = ", sol_h1_ag1_val
print "h2 = ", sol_h2_ag1
print "h2 = ", sol_h2_ag1_val
print "c0 = ", c0_ag1
print "c11 = ", c11_ag1
print "c12 = ", c12_ag1
print "a0*log(c0) + a1*log(c11) + a2*log(c12) = ", f_ag1
print "Agente 2"
print "h1 = ", sol_h1_ag2
print "h1 = ", sol_h1_ag2_val
print "h2 = ", sol_h2_ag2
print "h2 = ", sol_h2_ag2_val
print "c0 = ", c0_ag2
print "c11 = ", c11_ag2
print "c12 = ", c12_ag2
print "a0*log(c0) + a1*log(c11) + a2*log(c12) = ", f_ag2
print "-------------------------------------------------------\n"
else:
print "[Sem Solucao]"
print "Agente 1"
print "h1 = ", sol_h1_ag1
print "h2 = ", sol_h2_ag1
print "Agente 2"
print "h1 = ", sol_h1_ag2
print "h2 = ", sol_h2_ag2
print "-------------------------------------------------------"
else:
if ((sol_h1_ag1 == -sol_h1_ag2) and (sol_h2_ag1 == -sol_h2_ag2)):
print "[Solucao ", indice_solucao, "]"
indice_solucao += 1
else:
print "[Sem Solucao]"
print "Agente 1"
print "h1 = ", sol_h1_ag1
print "h2 = ", sol_h2_ag1
print "Agente 2"
print "h1 = ", sol_h1_ag2
print "h2 = ", sol_h2_ag2
print "-------------------------------------------------------\n"
O resultado do programa nos fornece o equilíbrio, isto é, \(p_1 = 139/416\), \(p_2 = 139/832\) e:
\[
\left\{
\begin{array}{rcl}
h^1_1 & = & \frac{-168 p_1 + 208 p_2 + 21}{64 (p_1 - p_2)} = 5/139 \\
h^1_2 & = & \frac{24 p_1^2 + 32 p_1 p_2 + 19 p_1 - 64 p_2^2 - 38 p_2}{48 p_2 (p_1 - p_2)} = 2 \\
c^1_0 & = & w^1_0 - p_1 h^1_1 - p_2 h^1_2 = 2.02884615384615 \\
c^1_{1,1} & = & w^1_{1,1} + x_{11} h^1_1 + x_{12} h^1_2 = 3.03597122302158 \\
c^1_{1,2} & = & w^1_{1,2} + x_{21} h^1_1 + x_{22} h^1_2 = 3.03597122302158
\end{array}
\right.
\]
\[
\left\{
\begin{array}{rcl}
h^2_1 & = & \frac{-168 p_1 + 208 p_2 + 21}{64 (p_1 - p_2)} = -5/139 \\
h^2_2 & = & \frac{24 p_1^2 - 160 p_1 p_2 + 21 p_1 + 96 p_2^2 - 42 p_2}{64 p_2 (p_1 - p_2)} = -2 \\
c^2_0 & = & w^2_0 - p_1 h^2_1 - p_2 h^2_2 = 2.97115384615385 \\
c^2_{1,1} & = & w^2_{1,1} + x_{11} h^2_1 + x_{12} h^2_2 = 2.96402877697842 \\
c^2_{1,2} & = & w^2_{1,2} + x_{21} h^2_1 + x_{22} h^2_2 = 2.96402877697842
\end{array}
\right.
\]
O agente 1 possui \(h^1_1 = 5/139 > 0\) e \(h^1_2 = 2 > 0\). Estes valores positivos significam um "long position" nos ativos. O agente 1 está escolhendo consumir menos na data 0 para poder consumir mais nada data 1, ou seja, \(c^1_0 = 2.02884615384615 < 3.03597122302158 = c^1_{1,1} = c^1_{1,2}\). Podemos fazer a análise oposta para o agente 2, pois, como \(\sum_{i}{h^i} = 0\), o agente 1 comprou os ativos do agente 2. O agente 2 possui \(h^1_1 = -5/139 < 0\) e \(h^1_2 = -2 < 0\). Estes valores negativos significam um "short position" nos ativos. O agente 2 está escolhendo consumir mais na data 0, mas
consumirá menos nada data 1, ou seja, \(c^2_0 = 2.97115384615385 > 2.96402877697842 = c^2_{1,1} = c^2_{1,2}\).