7 votos

Función de valor Splittet y ecuación de Hamilton-Jacobi-Bellman

Problema general

Dejemos que $k\in\mathbb{R}_+$ sea la variable de estado, $k=k^*$ un punto fijo (silla de montar) y $v(k)$ una función de valor. El problema es que la función de valor tiene dos formas funcionales distintas, donde el interruptor está en el punto fijo.

  1. ¿Tiene alguna referencia para este tipo de problemas?
  2. ¿Crees que se puede aproximar una solución al modelo siguiente?
  3. ¿Y qué pasa con la función de control/política?

Modelo

Dejemos que $t\in[0,\infty)$ et $k\in[0,2]$ es el estado. Hay dos actores $i=1,2$ con controles $\tau_i\in[0,1]$ . La producción viene dada por $f:[0,2]\to\mathbb{R}_+$ . Los salarios e intereses vienen dados por $w_1=f(k)-f'(k)k$ , $w_2=f(2-k)-f'(2-k)(2-k)$ et $r_1=f'(k)-\tau_1$ , $r_2=f'(2-k)-\tau_2$ respectivamente. La ley de movimiento del estado viene dada por \begin{align} \dot{k}=r_1-r_2. \end{align} Hay una silla de montar en \begin{align} k^*=1,~ \tau^*_1=\tau^*_2 \end{align} donde $\tau_i^*$ depende de algunos parámetros. La utilidad viene dada por la función \begin{align} u(g_i,c_i)=h(g_i)+c_i \end{align} donde $u_g>0<u_c$ . El bien público es con $g_i=\tau_i k$ y el consumo \begin{align} c_1=\begin{cases} w_1+r_1k+\int^1_k{[r_2-a(\theta)]d\theta},\quad & k\in[0,1)\\ w_1+r_1,& k\in[1,2] \end{cases} \end{align} et \begin{align} c_2=\begin{cases} w_2+r_2,\quad & k\in[0,1)\\ w_2+r_2(2-k)+\int^k_1{[r_1-b(\theta)]d\theta},& k\in[1,2] \end{cases} \end{align} con $a:[0,1]\to\mathbb{R}_+,~b:[1,2]\to\mathbb{R}_+$ que representa un cierto coste para $\theta\in[0,2]$ . Las funciones de retribución vienen dadas entonces por \begin{align} j_i(\tau_i,\tau_j)=\int^\infty_0{e^{-\rho t}(h(g_i)+c_i)dt} \end{align} con $\rho>0$ tasa de preferencia temporal. Y las funciones de valor son \begin{align} v_i(k)=\sup_{\tau_i} j_i. \end{align} Al establecer las ecuaciones de Hamilton-Jacobi-Bellman (HJB) para cada jugador se obtiene \begin{align} \rho v_i(k)=\max_{\tau_i} h(g_i)+c_i + v'_i(k)\dot{k}. \end{align} En primer lugar, voy a arreglar $\tau_2$ en el nivel de equilibrio $\tau^*$ . Entonces el HJB para el jugador 1 es

\begin{align} \rho v_1(k) &=\max_{\tau_1} h(g_1)+c_1 + v'_1(k)\dot{k}\\ &=\begin{cases}\max_{\tau_1} h(g_1) + w_1+r_1k+\int^1_k{[r_2-a(\theta)]d\theta} + v'_1(k)\dot{k},\quad & k\in[0,1)\\ \max_{\tau_1} h(g_1) + w_1 + r_1 + v'_1(k)\dot{k},& k\in[1,2] \end{cases} \fin{align}

Los BDC son \begin{align} \tau_1= \begin{cases} (v_1'(k)+k)^{-1},\quad & k\in[0,1)\\ (v_1'(k)+1)^{-1},\quad & k\in[1,2] \end{cases} \end{align}

Primera pasada de la aplicación

He utilizado el algoritmo proporcionado por Benjamin Moll . Como referencia: en su modelo de crecimiento óptimo, la función de valor convergió en 8441 iteraciones y tardó 0,825062 segundos.

He utilizado una función de CB Production $f(k)=k^\alpha$ avec $Ak$ -Tecnología, es decir $f(k)=k$ (para $\alpha<1$ Tengo un problema) y registrar las preferencias a la $u(g,c)=\ln g +c$ . Una función de coste lineal con $a:\theta\mapsto (1-\theta)$ . Paré después de 200 iteraciones que ya duraron 21 minutos. En el primer panel está la estimación de la función de valor 1 y 200. El segundo panel muestra la diferencia entre las funciones de valor (tendencia de convergencia). Y el último panel es la función de política real, por ejemplo, $\tau_1(k)$ (nótese el pliegue en $k=1=k^*$ ). Parece correcto desde una perspectiva intuitiva. Es decir, un país reduce su tipo impositivo sobre el capital si el stock de capital es realmente pequeño y viceversa. No sé muy bien por qué el procedimiento es tan largo.
test

Actualización

Pude aumentar la velocidad. Luego aumenté el rango de la rejilla a los respectivos puntos finales del estado, así como el número de puntos de la rejilla y corrí el VFI (40000 Iteraciones) hasta que me quedé sin memoria. El primer panel contiene la primera y la última función de valor. El algoritmo converge con $|v^{40000}-v^{39999}|=0.0077$ . La curvatura de la función política se mantiene, pero la forma difiere ligeramente ahora. test2

2voto

Justin Puntos 1169

Creo que no he visto casos con un pliegue en tiempo continuo que se resuelvan numéricamente. Aguiar y Amador (2014) tienen un problema en su HJB, pero resuelven su HJB analíticamente.

Validación

No sé hasta qué punto el algoritmo de Moll et al va a acertar. Lo más probable es que obtenga un comportamiento extraño en torno a la curva, pero es dudoso que sea la forma funcional real, y tendrá que argumentar a posteriori que "se ve bien, ¿de acuerdo?".

Si quieres tener un mejor control sobre si la torcedura se ve bien, hazla más extrema . Sin repasar tus ecuaciones, parece que la primera parte es convexa y la segunda es lineal. Aumenta la curvatura de la primera parte para que puedas "ver" más fácilmente si sigue pareciendo correcta alrededor de la curva.

Además, deberías mirar definitivamente las contrapartidas numéricas de la derivada de primer y segundo orden, la diferencia de primer y segundo orden de la aproximación dividida por el tamaño del paso. ¿Tienen los signos correctos alrededor de la curva?

Una cosa en la que haría hincapié es en tener muchos puntos de rejilla alrededor de la curva. Sin embargo, dado que el algoritmo se vuelve más difícil cuando tienes una cuadrícula no lineal (porque el tamaño del paso de la cuadrícula ahora no es una constante, sino un vector), puede que no valga la pena y que prefieras aumentar los puntos de la cuadrícula en general y mantenerla lineal.

Velocidad

Por último, deberías considerar tener matrices dispersas para las matrices A y B. 10 iteraciones por minuto es realmente lento. Te lleva quizás 30 minutos entender e implementar (si nunca has trabajado con sistemas dispersos antes), pero ya después de la segunda vez que ejecutas el código has recuperado ese tiempo.

Si el problema persiste, eche un vistazo a los perfiladores de su lenguaje de codificación. Para Python, este es una buena solución. Incluso si tienes todo disperso, tal vez olvidaste alguna matriz que ni siquiera necesitas en el bucle de iteración. Ese fue mi caso, y con tamaños de rejilla grandes esa única reinicialización me llevó mucho tiempo. El Profiler te dirá qué es lo que pasa.

Finanhelp.com

FinanHelp es una comunidad para personas con conocimientos de economía y finanzas, o quiere aprender. Puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X