動的計画法(Dynamic Programming)
本稿では上級のマクロ経済学を学ぶために必須の時間の流れを加味した最適化、その中でも動的計画法(Dynamic Programming)について学部生向けに直感的な理解に軸足を置いた解説を行う。
動的計画法の核心
動的計画法(以下DP)は基本的に離散時間の最適化1に用いられる。早速だが動的計画法の核心は
- 最適性原理(principle of optimality)
全体で最適な意思決定はどの瞬間でも最適になっている。
- 再帰性(recursive)
毎期同じ条件のもとで同じ意思決定問題を解く。
の2つである。最適性原理はカーナビやグーグルマップを思い出して頂きたい。ある地点間の最短ルートを好きなところで切り取ったとしても、切り取られたルートはその区間で見ても最短ルートには変わりがない。逆に言えば、問題を解きやすいように小さく分解しても最適性は保たれる。
また、多くのマクロモデルは時間の変数に依存してないので意思決定が行われる環境は毎期同じである。つまり、同じの問題を無限回解いているとも理解できる。これが再帰性である。
動的計画法といかめしい名前が付いているが2理解すべき重要な概念はこれだけである。
用語の復習
DPの本質を理解したところで動学的最適化問題に必要な用語を簡潔に復習しよう。
本節は読み飛ばしても構わない。
動学的な意思決定
マクロ経済学における動学的な意思決定とは、例えば今所有しているパンを
『今日、いくら食べるのか』
『明日、いくら食べるのか』
『明後日、いくら食べるのか』
といった時間の流れを加味した消費行動の決定である。多くのマクロモデルではこの意思決定を無限期間行う。
割引率
人間は未来の消費の価値を低く見積もる傾向がある。今日一万円貰えるのと、来年一万円貰える嬉しさが等しい人はそうそういないだろう。経済学ではそれを割引率(discount rate )によって表現する。
割引率によって未来の価値を現在の価値に変換できる。現在の価値に変換した未来の価値を割引現在価値という。
操作変数と状態変数
動学的な意思決定では経済主体が操作するパラメータを操作変数(control variable)、操作変数によって引き起こされた状態を状態変数(state variable)で表現する。
基本的なマクロモデルでは操作変数は消費量、状態変数とは前期の消費によって決定された状態であり、\(c_{t}\)を制御変数、\(s_{t}\)を状態変数とすると
$$c_{t+1}=s_{t}$$
の関係が成り立っている。これは今期の消費量がそのまま次の期の状態を決定するという意味である。
横断性条件
$$\lim _{t \rightarrow \infty} \beta^{t} u^{\prime}\left(c_{t}\right) k_{t+1}=0$$
横断性条件(transversality condition)を簡潔に説明すれば、『財は残してはならない』ということである。有限期間であれば財を残してしまうと無駄になってしまうので財を使い切る消費計画のみが最適になる。しかし無限時間の場合には明確な最後の期は存在しないので途中で使い切ることは避けなければならず、逆に貯蔵しすぎもよろしくない。こうした問題を解決するために横断性条件は活躍する。つまり、財自体が使い切られる必要はないが割引現在価値としては最終的に使い切らなければならない。
動的計画法の解
動的計画法の解は関数で与えられ、政策関数(policy function)と呼ばれる。政策関数は最適な意思決定ルールを示しており、コントロール変数が状態変数の関数として表現されている。
$$c_{t}=P\left(s_{t}\right) $$
つまり政策関数とは、現在の状態が与えられたとき、どのような一期先の行動が最適であるのかを教えてくれるのである。
一般形の直感的理解
ここからは少し発展的な内容になる。一般形で定式化し、数式の意味を説明しよう。慣れない数式で難しく感じるかもしれないが何となく直感的な理解ができていれば十分である。
一般形
目的関数を\(u\left(c_{t}, s_{t}\right)\)とし、\(c_{t}\)を制御変数、\(s_{t}\)を状態変数、\(\beta\)を割引率とする。但し\(s_{0}\)は所与とする。この目的関数を最大化した生涯効用の割引現在価値を価値関数(value function)と呼び、
$$V\left(s_{t}\right) =\max_{\left\{ c_{i}\right\} _{i=t}^{\infty}}\sum_{i=t}^{\infty}\beta^{i}u\left(s_{i},c_{i}\right)
\\\text{s.t.} \,s_{i+1}=H\left(s_{i},c_{s}\right)$$
と定式化できる。難解に見えるかもしれないが、本質は学部の効用最大化と全く同じである。
次にこの最適化問題を変形してベルマン方程式(Bellman equation)を定義しよう。ベルマン方程式は動的計画法を解くための方程式(正確には関数方程式)である。
$$V\left(s_{t}\right)=\max_{c_{t}}\left[u\left(s_{t},c_{t}\right)+\beta V\left(H\left(s_{t},c_{t}\right)\right)\right]$$
ベルマン方程式の一階の条件(操作変数で微分)は
$$u_{c}\left(s_{t},c_{t}\right)+\beta V^{\prime}\left(H\left(s_{t},c_{t}\right)\right)H_{c}\left(s_{t},c_{t}\right)=0$$
包絡線条件(状態変数で微分)は
$$V^{\prime}\left(s_{t}\right)=u_{s}\left(s_{t},c_{t}\right)+\beta V^{\prime}\left(H\left(s_{t},c_{t}\right)\right)H_{s}\left(s_{t},c_{t}\right)$$
となり、包絡線条件を一階の条件に代入することでオイラー方程式(Euler equation)
$$0=u_{c}\left(s_{t},c_{t}\right)+\beta H_{s}\left(H\left(s_{t},c_{t}\right),c_{t+1}\right)H_{c}\left(s_{t},c_{t}\right)$$
が得られる。オイラー方程式と横断性条件(transversality condition)を用いることで、得られた解(政策関数)が最適であることが示せる3。
動的計画法のメリット
動的計画法を使うメリットはあるのだろうか?実は動的計画法は微分可能性や凸性に関する過程を必要としないので応用できる範囲が他手法に比べて広いというメリットがある。
一方で動的計画法が使えない場合もあり、価値関数が有界である必要がある。価値関数とベルマン方程式の関係と具体的な計算方法については別稿に回したい。
参考文献
- Acemoglu, D. (2009) Introduction to Modern Economic Growth. Princeton University Press.
- Barro, R.J., and Sala-i-Martin, X. (2004) Economic Growth. MIT Press.
- Chiang, A.C. (1992) Elements of Dynamic Optimization. McGraw-Hill.
- 工藤教孝(2007)『動学的最適化入門』
- 上東貴志(2011)『マクロ経済における動学的最適化』(経済セミナー2011年秋号)