Skip to content

Commit 4d26d6b

Browse files
authored
Add files via upload
1 parent 0f27ba2 commit 4d26d6b

File tree

1 file changed

+88
-85
lines changed

1 file changed

+88
-85
lines changed

lectures/coleman_policy_iter.md

Lines changed: 88 additions & 85 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ kernelspec:
2323
:depth: 2
2424
```
2525

26-
除了Anaconda中已有的库外,本讲座还需要以下库
26+
除Anaconda已包含的库外,本讲义还需要安装以下库
2727

2828
```{code-cell} ipython
2929
---
@@ -33,22 +33,23 @@ tags: [hide-output]
3333
```
3434
## 概述
3535

36-
在本讲中,我们将继续我们{doc}`之前 <optgrowth>`对随机最优增长模型的研究
36+
在本讲中,我们将继续此前对{doc}`随机最优增长模型 <optgrowth>`的研究
3737

38-
在那节课中,我们使用值函数迭代求解了相关的动态规划问题
38+
在那一讲中,我们使用价值函数迭代求解了相关的动态规划问题
3939

4040
这种技术的优点在于其广泛的适用性。
4141

42-
然而,对于数值问题,我们通常可以通过推导专门针对具体应用的方法来获得更高的效率
42+
然而,在数值问题中,我们常常可以通过推导出更贴合具体应用的算法,以获得更高的效率
4343

44-
随机最优增长模型有大量可供利用的结构,特别是当我们对原始函数采用一些凹性和光滑性假设时
44+
随机最优增长模型具备丰富的结构可供利用,尤其当我们对原始要素施加某些凹性与光滑性假设时
4545

46-
我们将利用这种结构来获得一个基于欧拉方程的方法
46+
我们将利用这一结构,获得基于欧拉方程的方法
4747

48-
这将是对我们在{doc}`蛋糕食用问题 <cake_eating_numerical>`的基础讲座中考虑的时间迭代法的扩展
48+
这将是我们在基础讲义{doc}`吃蛋糕问题 <cake_eating_numerical>`中所考虑的时间迭代方法的扩展
4949

50-
在{doc}`后续讲座 <egm_policy_iter>`中,我们将看到时间迭代可以进一步调整以获得更高的效率。
51-
让我们从一些导入开始:
50+
在{doc}`下一讲 <egm_policy_iter>`中,我们将看到,时间迭代可以进一步调整,以获得更高的效率。
51+
52+
接下来,让我们从导入开始:
5253

5354
```{code-cell} ipython
5455
import matplotlib.pyplot as plt
@@ -63,18 +64,18 @@ from numba import jit
6364
```
6465
## 欧拉方程
6566

66-
我们的第一步是推导欧拉方程,这是对我们在{doc}`蛋糕食用问题讲座 <cake_eating_problem>`中得到的欧拉方程的推广。
67+
我们的第一步是推导欧拉方程,这是此前在{doc}`吃蛋糕问题 <cake_eating_problem>`中得到的欧拉方程的推广。
6768

68-
我们采用{doc}`随机增长模型讲座 <optgrowth>`中设定的模型,并添加以下假设
69+
我们采用{doc}`随机增长模型 <optgrowth>`中的模型设定,并加入以下假设
6970

70-
1. $u$$f$是连续可微且严格凹函数
71-
1. $f(0) = 0$
72-
1. $\lim_{c \to 0} u'(c) = \infty$$\lim_{c \to \infty} u'(c) = 0$
73-
1. $\lim_{k \to 0} f'(k) = \infty$$\lim_{k \to \infty} f'(k) = 0$
71+
1. $u$$f$ 是连续可微且严格凹函数
72+
1. $f(0) = 0$
73+
1. $\lim_{c \to 0} u'(c) = \infty$$\lim_{c \to \infty} u'(c) = 0$
74+
1. $\lim_{k \to 0} f'(k) = \infty$$\lim_{k \to \infty} f'(k) = 0$
7475

75-
最后两个条件通常被称为**稻田条件**
76+
最后两个条件通常被称为**Inada条件**
7677

77-
回顾贝尔曼方程
78+
回顾贝尔曼方程
7879

7980
```{math}
8081
:label: cpi_fpb30
@@ -83,26 +84,26 @@ v^*(y) = \max_{0 \leq c \leq y}
8384
\left\{
8485
u(c) + \beta \int v^*(f(y - c) z) \phi(dz)
8586
\right\}
86-
\quad \text{for all} \quad
87-
y \in \mathbb R_+
87+
\quad \forall y \in \mathbb R_+
8888
```
8989

90-
让最优消费策略用$\sigma^*$表示。
90+
令最优消费策略记为 $\sigma^*$。
91+
92+
我们知道 $\sigma^*$ 是一个 $v^*$-逐期最优的,因此 $\sigma^*(y)$ 是{eq}`cpi_fpb30`中的最大化解。
9193

92-
我们知道$\sigma^*$是一个$v^*$-贪婪策略,因此$\sigma^*(y)$是{eq}`cpi_fpb30`中的最大化值。
93-
上述条件表明
94+
上述条件表明:
9495

95-
* $\sigma^*$ 是随机最优增长模型的唯一最优策略
96-
* 最优策略是连续的、严格递增的,并且是**内部的**,即对于所有严格正的 $y$,都有 $0 < \sigma^*(y) < y$,并且
97-
* 值函数是严格凹的且连续可微的,满足
96+
* $\sigma^*$ 是随机最优增长模型的唯一最优策略
97+
* 该最优策略是连续的、严格递增的,并且是**内部解**,即对于所有严格正的 $y$,都有 $0 < \sigma^*(y) < y$
98+
* 价值函数是严格凹的且连续可微的,并满足:
9899

99100
```{math}
100101
:label: cpi_env
101102
102103
(v^*)'(y) = u' (\sigma^*(y) ) := (u' \circ \sigma^*)(y)
103104
```
104105

105-
最后这个结果被称为**包络条件**,因为它与[包络定理](https://en.wikipedia.org/wiki/Envelope_theorem)有关。
106+
最后一个结果被称为**包络条件**,因为它与[包络定理](https://baike.baidu.com/item/%E5%8C%85%E7%BB%9C%E5%AE%9A%E7%90%86/5746200)有关。
106107

107108
要理解为什么{eq}`cpi_env`成立,可以将贝尔曼方程写成等价形式
108109

@@ -113,18 +114,18 @@ v^*(y) = \max_{0 \leq k \leq y}
113114
\right\},
114115
$$
115116

116-
对 $y$ 求导,然后在最优点处求值即可得到{eq}`cpi_env`
117-
[EDTC](https://johnstachurski.net/edtc.html)第12.1节包含这些结果的完整证明,许多其他教材中也可以找到密切相关的讨论。)
117+
对 $y$ 求导,并在最优解处求值,即可得到{eq}`cpi_env`
118+
[EDTC](https://johnstachurski.net/edtc.html)第12.1节给出了这些结果的完整证明,许多其他教材中也可找到类似讨论。)
118119

119-
价值函数的可微性和最优策略的内部性意味着最优消费满足与{eq}`cpi_fpb30`相关的一阶条件,即
120+
价值函数的可微性和最优策略的内部性意味着,最优消费决策满足与{eq}`cpi_fpb30`相关的一阶条件,即
120121

121122
```{math}
122123
:label: cpi_foc
123124
124125
u'(\sigma^*(y)) = \beta \int (v^*)'(f(y - \sigma^*(y)) z) f'(y - \sigma^*(y)) z \phi(dz)
125126
```
126127

127-
将{eq}`cpi_env`和一阶条件{eq}`cpi_foc`结合得到**欧拉方程**
128+
将{eq}`cpi_env`和该一阶条件{eq}`cpi_foc`结合,得到**欧拉方程**
128129

129130
```{math}
130131
:label: cpi_euler
@@ -133,21 +134,21 @@ u'(\sigma^*(y)) = \beta \int (v^*)'(f(y - \sigma^*(y)) z) f'(y - \sigma^*(y)) z
133134
= \beta \int (u'\circ \sigma^*)(f(y - \sigma^*(y)) z) f'(y - \sigma^*(y)) z \phi(dz)
134135
```
135136

136-
我们可以将欧拉方程视为一个泛函方程
137+
我们可以将欧拉方程视为一个函数方程:
137138

138139
```{math}
139140
:label: cpi_euler_func
140141
141142
(u'\circ \sigma)(y)
142143
= \beta \int (u'\circ \sigma)(f(y - \sigma(y)) z) f'(y - \sigma(y)) z \phi(dz)
143144
```
144-
对于内部消费策略 $\sigma$,其中一个解就是最优策略 $\sigma^*$。
145+
其中 $\sigma$ 为内部消费策略,其解之一即为最优策略 $\sigma^*$。
145146

146147
我们的目标是求解函数方程 {eq}`cpi_euler_func` 从而获得 $\sigma^*$。
147148

148149
### Coleman-Reffett 算子
149150

150-
回顾 Bellman 算子
151+
回顾贝尔曼算子:
151152

152153
```{math}
153154
:label: fcbell20_coleman
@@ -158,14 +159,14 @@ Tv(y) := \max_{0 \leq c \leq y}
158159
\right\}
159160
```
160161

161-
正如我们引入 Bellman 算子来求解 Bellman 方程一样,我们现在将引入一个作用于策略的算子来帮助我们求解欧拉方程
162+
正如我们引入贝尔曼算子来求解贝尔曼方程一样,我们现在将引入一个作用于策略空间的算子,用于帮助我们求解欧拉方程
162163

163-
这个算子 $K$ 将作用于所有连续、严格递增且内部的 $\sigma \in \Sigma$ 的集合上
164+
该算子 $K$ 将作用于所有连续、严格递增且为内部解的 $\sigma \in \Sigma$。
164165

165-
此后我们用 $\mathscr P$ 表示这个策略集合
166+
此后我们将这类策略集合记为 $\mathscr P$
166167

167-
1. 算子 $K$ $\sigma \in \mathscr P$ 为参数
168-
1. 返回一个新函数 $K\sigma$,其中 $K\sigma(y)$ 是求解以下方程的 $c \in (0, y)$
168+
1. 算子 $K$ 的自变量是一个 $\sigma \in \mathscr P$
169+
1. 返回一个新函数 $K\sigma$,其中 $(K\sigma)(y)$ 是求解以下方程的 $c \in (0, y)$:
169170

170171
```{math}
171172
:label: cpi_coledef
@@ -176,76 +177,78 @@ u'(c)
176177

177178
我们称这个算子为**Coleman-Reffett算子**,以此致敬{cite}`Coleman1990`和{cite}`Reffett1996`的研究工作。
178179

179-
本质上,当你的未来消费政策是$\sigma$时,$K\sigma$是欧拉方程告诉你今天应该选择的消费政策
180+
本质上,$K\sigma$ 表示在给定未来消费策略为 $\sigma$ 时,欧拉方程指导你今天应选择的消费策略
180181

181-
关于$K$需要注意的重要一点是,根据其构造,其不动点恰好与函数方程{eq}`cpi_euler_func`的解coincide
182+
值得注意的是:依据构造,算子 $K$ 的不动点恰好与函数方程{eq}`cpi_euler_func`的解相一致
182183

183-
特别地,最优政策$\sigma^*$就是一个不动点
184+
特别地,最优政策 $\sigma^*$ 是一个不动点
184185

185-
事实上,对于固定的$y$,$K\sigma^*(y)$是解决以下方程的$c$:
186+
事实上,对于固定的 $y$,$(K\sigma^*)(y)$ 是满足以下方程的 $c$:
186187

187188
$$
188189
u'(c)
189190
= \beta \int (u' \circ \sigma^*) (f(y - c) z ) f'(y - c) z \phi(dz)
190191
$$
191192

192-
根据欧拉方程,这恰好就是$\sigma^*(y)$。
193+
根据欧拉方程,该解正是 $\sigma^*(y)$。
193194

194-
### Coleman-Reffett算子是否良定义
195+
### Coleman-Reffett算子是否定义良好
195196

196-
特别地,是否总存在唯一的$c \in (0, y)$来解决{eq}`cpi_coledef`
197+
特别地,是否总存在唯一的 $c \in (0, y)$ 使其满足{eq}`cpi_coledef`
197198

198199
在我们的假设条件下,答案是肯定的。
199-
对于任何 $\sigma \in \mathscr P$,{eq}`cpi_coledef` 右侧
200200

201-
* 在 $(0, y)$ 上关于 $c$ 是连续且严格递增的
202-
* 当 $c \uparrow y$ 时趋向于 $+\infty$
201+
对于任何 $\sigma \in \mathscr P$,{eq}`cpi_coledef` 的右侧:
202+
203+
* 在 $(0, y)$ 上关于 $c$ 是连续且严格递增的;
204+
* 当 $c \uparrow y$ 时趋向于 $+\infty$。
203205

204-
{eq}`cpi_coledef` 左侧
206+
{eq}`cpi_coledef` 的左侧:
205207

206-
* 在 $(0, y)$ 上关于 $c$ 是连续且严格递减的
207-
* 当 $c \downarrow 0$ 时趋向于 $+\infty$
208+
* 在 $(0, y)$ 上关于 $c$ 是连续且严格递减的
209+
* 当 $c \downarrow 0$ 时趋向于 $+\infty$
208210

209-
绘制这些曲线并利用上述信息,你会确信当 $c$ 在 $(0, y)$ 范围内变化时,这些曲线恰好相交一次
211+
绘制这些曲线并利用上述信息,二者在 $c \in (0, y)$ 上恰好有且仅有一次交点
210212

211-
通过更深入的分析,可以进一步证明当 $\sigma \in \mathscr P$ 时,$K \sigma \in \mathscr P$。
213+
进一步分析可得:若 $\sigma \in \mathscr P$,则 $K \sigma \in \mathscr P$。
212214

213-
### 与值函数迭代的比较(理论
215+
### 与价值函数迭代(VFI)的比较(理论部分
214216

215-
可以证明 $K$ 的迭代与贝尔曼算子的迭代之间存在紧密关系。
217+
可以证明,算子 $K$ 的迭代与贝尔曼算子的迭代之间存在紧密关系。
216218

217-
从数学角度来说,这两个算子是*拓扑共轭的*
219+
从数学上讲,这两个算子是*拓扑共轭的*
218220

219-
简单来说,这意味着如果一个算子的迭代收敛,那么另一个算子的迭代也会收敛,反之亦然。
221+
简单来说,这意味着:如果一个算子的迭代收敛,那么另一个算子的迭代也会收敛,反之亦然。
220222

221-
而且,至少从理论上讲,它们的收敛速度是相同的。
222-
然而,事实证明算子 $K$ 在数值计算上更加稳定,因此在我们考虑的应用中更加高效。
223+
此外,在理论上可以认为二者的收敛速率是相同的。
223224

224-
下面给出一些例子。
225+
然而,事实证明,算子 $K$ 在数值计算上更加稳定,因此在我们考虑的应用中更加高效。
226+
227+
下面给出若干示例。
225228

226229
## 实现
227230

228-
如同我们在{doc}`之前的研究 <optgrowth_fast>`中一样,我们继续假设
231+
{doc}`上一讲 <optgrowth_fast>`一样,我们继续假设
229232

230-
* $u(c) = \ln c$
231-
* $f(k) = k^{\alpha}$
232-
* $\phi$ 是当 $\zeta$ 为标准正态分布时 $\xi := \exp(\mu + s \zeta)$ 的分布
233+
* $u(c) = \ln c$
234+
* $f(k) = k^{\alpha}$
235+
* $\phi$ $\xi := \exp(\mu + s \zeta)$ 的分布,且 $\zeta$ 服从标准正态分布。
233236

234-
这将使我们能够将结果与解析解进行比较
237+
这一设定使我们能够将数值结果与解析解进行比较。
235238

236239
```{code-cell} ipython3
237240
:load: _static/lecture_specific/optgrowth/cd_analytical.py
238241
```
239-
如上所述,我们计划使用时间迭代来求解模型,这意味着要使用算子$K$进行迭代。
242+
如上所述,我们的目标是通过时间迭代来求解模型,即对算子 $K$ 进行迭代。
240243

241-
为此,我们需要访问函数$u'$和$f, f'$。
244+
为此,我们需要函数 $u', f$ 和 $f'$。
242245

243-
这些函数在我们在{doc}`之前的讲座 <optgrowth_fast>`中构建的`OptimalGrowthModel`类中可用
246+
我们将使用{doc}`上一讲 <optgrowth_fast>`中构建的`OptimalGrowthModel`类来实现
244247

245248
```{code-cell} ipython3
246249
:load: _static/lecture_specific/optgrowth_fast/ogm.py
247250
```
248-
现在我们实现一个名为`euler_diff`的方法,它返回
251+
接下来我们实现一个名为`euler_diff`的方法,该方法返回:
249252

250253
```{math}
251254
:label: euler_diff
@@ -272,11 +275,11 @@ def euler_diff(c, σ, y, og):
272275
vals = u_prime(σ_func(f(y - c) * shocks)) * f_prime(y - c) * shocks
273276
return u_prime(c) - β * np.mean(vals)
274277
```
275-
函数`euler_diff`通过蒙特卡洛方法计算积分,并使用线性插值来近似函数
278+
函数`euler_diff`通过蒙特卡洛方法计算积分,并使用线性插值对函数进行近似
276279

277-
我们将使用根查找算法来求解{eq}`euler_diff`在给定状态$y$$σ$(当前策略猜测值)的情况下求解$c$。
280+
我们将使用求根算法来求解式{eq}`euler_diff`给定状态 $y$$σ$,寻找当前期消费 $c$。
278281

279-
以下是实现根查找步骤的算子$K$。
282+
下面是实现该求根算法的算子 $K$。
280283

281284
```{code-cell} ipython3
282285
@jit
@@ -301,7 +304,7 @@ def K(σ, og):
301304
```
302305
### 测试
303306

304-
让我们生成一个实例并绘制$K$的一些迭代结果,从$σ(y) = y$开始
307+
接下来,我们生成一个实例并绘制算子 $K$ 的若干次迭代结果,初始条件取 $σ(y) = y$。
305308

306309
```{code-cell} ipython3
307310
og = OptimalGrowthModel()
@@ -326,9 +329,9 @@ ax.legend()
326329
327330
plt.show()
328331
```
329-
我们可以看到迭代过程快速收敛到一个极限值,这与我们在{doc}`上一讲<optgrowth_fast>`中得到的解相似
332+
我们可以看到,迭代过程快速收敛到一个极限,该极限与我们在{doc}`上一讲<optgrowth_fast>`中得到的解非常相似
330333

331-
这里有一个名为`solve_model_time_iter`的函数,它接收一个`OptimalGrowthModel`实例作为输入,并通过时间迭代法返回最优策略的近似解。
334+
这里给出一个名为`solve_model_time_iter`的函数,它接收一个`OptimalGrowthModel`实例作为输入,并通过时间迭代法返回最优策略的近似解。
332335

333336
```{code-cell} ipython3
334337
:load: _static/lecture_specific/coleman_policy_iter/solve_time_iter.py
@@ -355,33 +358,33 @@ plt.show()
355358
```
356359
再次说明,拟合效果非常好。
357360

358-
两种策略之间的最大绝对偏差是
361+
两种策略之间的最大绝对偏差是
359362

360363
```{code-cell} ipython3
361364
np.max(np.abs(σ - σ_star(og.grid, og.α, og.β)))
362365
```
363-
需要多长时间才能收敛?
366+
收敛所需时间如下:
364367

365368
```{code-cell} ipython3
366369
%%timeit -n 3 -r 1
367370
σ = solve_model_time_iter(og, σ_init, verbose=False)
368371
```
369-
与我们的{doc}`JIT编译的值函数迭代<optgrowth_fast>`相比,收敛速度非常快
372+
收敛速度非常快,甚至优于我们{doc}`基于JIT编译的价值函数迭代<optgrowth_fast>`
370373

371-
总的来说,我们发现时间迭代方法对于这个模型来说提供了很高的效率和准确性
374+
总的来说,我们发现,至少对于该模型而言,时间迭代法在效率与准确度上均展现出高度优势
372375

373376
## 练习
374377

375378
```{exercise}
376379
:label: cpi_ex1
377380
378-
用CRRA效用函数求解模型
381+
求解具有CRRA效用函数的模型
379382
380383
$$
381384
u(c) = \frac{c^{1 - \gamma}} {1 - \gamma}
382385
$$
383386
384-
设定`γ = 1.5`。
387+
其中`γ = 1.5`。
385388
386389
计算并绘制最优策略。
387390
```
@@ -390,19 +393,19 @@ $$
390393
:class: dropdown
391394
```
392395

393-
我们使用{doc}`VFI讲座<optgrowth_fast>`中的`OptimalGrowthModel_CRRA`类。
396+
我们使用{doc}`VFI讲义<optgrowth_fast>`中的`OptimalGrowthModel_CRRA`类。
394397

395398
```{code-cell} ipython3
396399
:load: _static/lecture_specific/optgrowth_fast/ogm_crra.py
397400
```
398401

399-
让我们创建一个实例
402+
创建一个实例
400403

401404
```{code-cell} ipython3
402405
og_crra = OptimalGrowthModel_CRRA()
403406
```
404407

405-
现在我们求解并绘制策略
408+
求解并绘制策略
406409

407410
```{code-cell} ipython3
408411
%%time
@@ -412,7 +415,7 @@ og_crra = OptimalGrowthModel_CRRA()
412415
fig, ax = plt.subplots()
413416
414417
ax.plot(og.grid, σ, lw=2,
415-
alpha=0.8, label='approximate policy function')
418+
alpha=0.8, label='近似策略函数')
416419
417420
ax.legend()
418421
plt.show()

0 commit comments

Comments
 (0)