Primeira vez aqui? Seja bem vindo e cheque o FAQ!
x

Considere o exercício 1 da página 443 do livro "Numerical Methods in Economics do Keneth Judd". Use apenas um dos métodos propostos para a discretização.

+1 voto
47 visitas
perguntada Jul 10, 2016 em Aprendizagem de Máquinas por Matheus Costa (26 pontos)  

Considere o exercício 1 da página 443 do livro "Numerical Methods in Economics do Keneth Judd". Use apenas um dos métodos propostos para a discretização: Value Iteration.

Compartilhe

1 Resposta

0 votos
respondida Jul 10, 2016 por Matheus Costa (26 pontos)  
editado Jul 11, 2016 por Matheus Costa

O exercício nos pede para encontrar a função valor que representa um problema de crescimento com capital, consumo e trabalho. O modelo é descrito da seguinte forma.

\[\beta = 0.8\]
\[u(c,l) = \log c + \log(1-l)\]
\[F(k,l) = k+\beta^{-1}(1-\beta)k^{0.25}l^{0.75}\]

O que buscamos de fato é a função valor do problema, ou seja:
\[V(k) = max_{c,l}[u(c,l)+\beta V(F(k,l)-c):c\leq F(k,l)-k]\]

Para isso, usaremos a propriedade que para uma dada função \(V_i(k)\),

\[ \Phi(V_i) =max_{c,l}[u(c,l)+\beta V_i(F(k,l)-c):c\leq F(k,l)-k] \]

é uma contração, ou seja,

\[ d_{\infty}(\Phi(V_i) , \Phi(V_j)) < d_{\infty}(V_i,V_j) \]

E portanto podemos aplicar o teorema do ponto fixo de Banach, de modo que a sequência de funções \(V_n\), tal que \(V_{i+1}=\Phi(V_i)\) converge para uma única função \(V\).

Desenvolvemos, portanto, um algoritmo que itera sobre \(\Phi\), até que encontremos que a distância entre \(V_i\) e \(V_{i+1}\) seja menor que um dado \(\epsilon\).

Primeiro definimos as funções:

import numpy as np
import scipy.optimize as opt
import matplotlib.pyplot as plt

b = 0.8

def u(x):   # Utilidade do agente
    return np.log(x[0]) + np.log(1-x[1])
def F(k,l): # Funcao de acumulacao de capital
    return k + ((1-b)/b)*(k**0.25)*(l**0.75)
def V0(k):  # Chute inicial para funcao valor
    return k
def W(k,x,V0):  #
    return u(x) + b*V0(F(k,x[1])-x[0])
def V1(k,V0):
    return -opt.minimize(lambda x: -W(k,x,V0),[0.8,0.8],method='SLSQP',
                        bounds=([0.0001,10], [.0001,.9999]),
                        constraints=({'type':'ineq', 'fun': lambda x: F(k,x[1])-k-x[0]})).fun

Em que V1 definido por último é a implementação de \(\Phi\). Para prosseguirmos, no entanto, precisaremos encontrar a função por interpolação. Uma vez que os mecanismos computacionais não nos permitem enxergar a função obtida de V1 diretamente, e, além disso, a função de otimização é computacionalmente custosa. Ao invés também de \(d_infty\), usaremos uma função de distância que busca o máximo da distância entre os pontos da interpolação, dado que dessa forma o processo fica mais leve e não representa nenhuma perda de informação.

def dist2(y1,y2):
    return np.max(np.absolute(y1-y2))

def VFIA(V0,e,iter=0):
    x = np.linspace(0,2,num = 500)
    y1 = np.array([V1(i,V0) for i in x])
    y2 = np.array([V0(i) for i in x])
    def Vi(k):
        return np.interp(k,x,y1)
    plt.plot(x,y1)
    d = dist2(y1,y2)
    if d<e:
        print 'd = ', d, 'i = ', iter
        return Vi
    else:
        iter = iter+1
        print 'd = ', d, 'i = ', iter
        def Vn(z):
            return np.interp(z,x,y1)
        return VFIA(Vn,e,iter)

print VFIA(V0,.01)
plt.xlabel('$k$', fontsize=14)
plt.ylabel('$V_i(k)$', fontsize=14)
plt.show()

VFIA, é uma sigla para Value Function Iteration Algorithm. Para \(\beta = 0.8\) obtemos:

\(d = 0.009121558533 i = 31\)

A imagem será apresentada aqui.

Sendo i o número de iterações necessárias para obtenção do critério de convergência \(\epsilon = 0.01\)

Para \(\beta = 0.96\) o número de iterações necessárias para convergência se eleva consideravelmente, de modo que obtemos.
\(d = 0.0096793759536 i = 168\)

A imagem será apresentada aqui.

já para \(\beta = 0.99\) infelizmente não conseguimos encontrar função que convergisse em tempo hábil. Isso poderia, possivelmente, ser corrigido com uma alteração na sugestão inicial \(V_0\). Mas serve para mostrar a restrição com relação à função que se busca fazer convergir.

...