Skip to content

Commit 160e7b9

Browse files
authored
Merge pull request #34 from QuantEcon/mccall_fitted_vfi
[mccall_fitted_vfi] Translation Update
2 parents 41cf96e + 26c3044 commit 160e7b9

11 files changed

+92
-85
lines changed

lectures/cake_eating_numerical.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@ v(x) = \max_{0\leq c \leq x} \{u(c) + \beta v(x-c)\}
6767

6868
我们将采用的第一种方法是**值函数迭代**
6969

70-
这是一种**连续逼近**的方法,在我们的{doc}`求职搜索讲座 <mccall_model>`中已经讨论过。
70+
这是一种**连续逼近**的方法,在我们的{doc}`工作搜寻讲座 <mccall_model>`中已经讨论过。
7171

7272
基本思路是:
7373

@@ -93,7 +93,7 @@ $$
9393
从$v$我们得到$Tv$,将$T$应用于此得到$T^2 v := T (Tv)$,依此类推。
9494

9595
这被称为从初始猜测值$v$开始**迭代贝尔曼算子**
96-
正如我们在后面的讲座中详细讨论的那样,可以使用Banach收缩映射定理来证明函数序列$T^n v$收敛到Bellman方程的解
96+
正如我们在后面的讲座中详细讨论的那样,可以使用Banach收缩映射定理来证明函数序列$T^n v$收敛到贝尔曼方程的解
9797

9898
### 拟合值函数迭代
9999

@@ -105,7 +105,7 @@ $$
105105

106106
但这意味着我们必须在无限多个$x$处存储$T^n v(x)$,这通常是不可能的。
107107

108-
为了解决这个问题,我们将使用拟合值函数迭代,这在之前关于{doc}`求职搜索的讲座 <mccall_fitted_vfi>`中已经讨论过。
108+
为了解决这个问题,我们将使用拟合值函数迭代,这在之前关于{doc}`工作搜寻的讲座 <mccall_fitted_vfi>`中已经讨论过。
109109

110110
这个过程如下:
111111

lectures/career.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ kernelspec:
1818
</div>
1919
```
2020

21-
# 求职搜索 V:职业选择建模
21+
# 工作搜寻 V:职业选择建模
2222

2323
```{index} single: Modeling; Career Choice
2424
```

lectures/jv.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ kernelspec:
1818
</div>
1919
```
2020

21-
# {index}`求职搜索 VI:在职搜索 <single: Job Search VI: On-the-Job Search>`
21+
# {index}`工作搜寻 VI:在职搜索 <single: Job Search VI: On-the-Job Search>`
2222

2323
```{index} single: Models; On-the-Job Search
2424
```

lectures/mccall_correlated.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ kernelspec:
1717
</div>
1818
```
1919

20-
# 求职搜索 IV:相关工资报价
20+
# 工作搜寻 IV:相关工资报价
2121

2222
```{contents} 目录
2323
:depth: 2
@@ -34,7 +34,7 @@ tags: [hide-output]
3434

3535
## 概述
3636

37-
在本讲座中,我们求解一个工资报价由持续性和暂时性成分组成的{doc}`McCall求职搜索模型 <mccall_model>`
37+
在本讲座中,我们求解一个工资报价由持续性和暂时性成分组成的{doc}`McCall工作搜寻模型 <mccall_model>`
3838

3939
换句话说,我们放宽了工资随机性在时间上独立的假设。
4040

lectures/mccall_fitted_vfi.md

Lines changed: 70 additions & 63 deletions
Original file line numberDiff line numberDiff line change
@@ -17,27 +17,27 @@ kernelspec:
1717
</div>
1818
```
1919

20-
# 求职搜索 III: 拟合值函数迭代
20+
# 工作搜寻 III: 拟合值函数迭代
2121

2222
```{contents} 目录
2323
:depth: 2
2424
```
2525

2626
## 概述
2727

28-
在本讲座中,我们再次研究{doc}`带有离职的McCall求职搜索模型 <mccall_model_with_separation>`但这次使用连续工资分布
28+
在本讲座中,我们再次研究{doc}`带有离职情形的McCall工作搜寻模型 <mccall_model_with_separation>`但这次会使用连续工资分布
2929

30-
虽然我们在{doc}`第一个求职搜索讲座 <mccall_model>`的练习中已经简要考虑过连续工资分布,但在那种情况下,这种改变相对来说是微不足道的。
30+
虽然我们在{doc}`第一个工作搜寻讲座 <mccall_model>`的练习中已经简要讨论过连续工资分布,但在那个案例中,这种改变相对来说是微不足道的。
3131

32-
这是因为我们能够将问题简化为求解单个标量值(持续价值)
32+
这是因为我们能够将问题简化为求解单个标量值,即延续价值
3333

34-
在这里,由于分离,变化不那么简单,因为连续的工资分布导致了不可数的无限状态空间
34+
在这一讲座中,由于离职情形的存在,变化不再那么简单,因为连续工资分布会导致不可数的无限状态空间
3535

36-
无限状态空间带来了额外的挑战,特别是在应用值函数迭代(VFI)时。
36+
无限状态空间带来了额外的问题,特别是在应用值函数迭代(VFI)时。
3737

38-
这些挑战将促使我们通过添加插值步骤来修改VFI
38+
这些问题会促使我们通过添加插值这一步骤,来改进VFI方法
3939

40-
VFI和这个插值步骤的组合被称为**拟合值函数迭代**fitted VFI)。
40+
VFI和这个插值步骤的结合被称为**拟合值函数迭代**拟合 VFI)。
4141

4242
拟合VFI在实践中非常常见,所以我们将花一些时间来详细研究。
4343

@@ -57,19 +57,19 @@ from numba.experimental import jitclass
5757

5858
## 算法
5959

60-
该模型与我们{doc}`之前学习的 <mccall_model_with_separation>`带有工作分离的McCall模型相同,只是工资分布是连续的
60+
该模型与我们{doc}`之前学习的 <mccall_model_with_separation>`带有离职情形的McCall模型相同,除了工资分布是连续的
6161

62-
我们将从{ref}`简化转换 <ast_mcm>`后得到的两个Bellman方程开始
62+
我们将从{ref}`简化变换 <ast_mcm>`后得到的两个贝尔曼方程入手
6363

64-
为了适应连续的工资分布,它们采用以下形式
64+
为了适应连续工资抽样,这两个方程呈现以下形式
6565

6666
```{math}
6767
:label: bell1mcmc
6868
6969
d = \int \max \left\{ v(w'), \, u(c) + \beta d \right\} q(w') d w'
7070
```
7171

72-
72+
以及
7373

7474
```{math}
7575
:label: bell2mcmc
@@ -82,29 +82,29 @@ v(w) = u(w) + \beta
8282

8383
这里的未知量是函数$v$和标量$d$。
8484

85-
这些方程与我们之前处理的一对Bellman方程的区别在于
85+
这些方程与我们之前处理的一对贝尔曼方程的区别在于
8686

8787
1. 在{eq}`bell1mcmc`中,原来对有限个工资值的求和变成了对无限集合的积分。
8888
1. {eq}`bell2mcmc`中的函数$v$定义在所有$w \in \mathbb R_+$上。
8989

90-
函数 $q$ 在 {eq}`bell1mcmc` 中是工资分布的密度函数
90+
函数 $q$ 在 {eq}`bell1mcmc` 中是工资分布的概率密度函数
9191

9292
其支撑集等于 $\mathbb R_+$。
9393

9494
### 值函数迭代
9595

9696
理论上,我们应该按以下步骤进行:
9797

98-
1. 从一个对 {eq}`bell1mcmc`--{eq}`bell2mcmc` 解的猜测值 $v, d$ 开始
99-
1. 将 $v, d$ 代入 {eq}`bell1mcmc`--{eq}`bell2mcmc` 的右侧
100-
计算左侧以获得更新值 $v', d'$
101-
1. 除非满足某些停止条件,否则设置 $(v, d) = (v', d')$
98+
1. {eq}`bell1mcmc`--{eq}`bell2mcmc` 的解设定初始猜测值 $v, d$ 。
99+
1. 将 $v, d$ 代入 {eq}`bell1mcmc`--{eq}`bell2mcmc` 的右侧表达式
100+
通过计算获得左侧更新值 $v', d'$
101+
1. 若未满足某些终止条件,则令 $(v, d) = (v', d')$
102102
并返回步骤2。
103103

104-
然而,在实施这个程序之前,我们必须面对一个问题:
105-
值函数的迭代既不能被精确计算,也不能被存储在计算机中。
104+
然而,在实施这个算法之前,我们必须面对一个问题:
105+
值函数的迭代序列既不能被精确计算,也不能被存储在计算机中。
106106

107-
要理解这个问题,请考虑 {eq}`bell2mcmc`
107+
要理解这个问题,请考察 {eq}`bell2mcmc`
108108

109109
即使 $v$ 是一个已知函数,存储其更新值 $v'$ 的唯一方法
110110
是记录其在每个 $w \in \mathbb R_+$ 处的值 $v'(w)$。
@@ -113,36 +113,36 @@ v(w) = u(w) + \beta
113113

114114
### 拟合值函数迭代
115115

116-
我们将改用**拟合值函数迭代**
116+
我们将改用**拟合值函数迭代**的方法
117117

118118
具体步骤如下:
119119

120-
假设已有当前的猜测值 $v$。
120+
假设当前给定猜测值函数 $v$。
121121

122122
我们只在有限个"网格"点 $w_1 < w_2 < \cdots < w_I$ 上记录函数 $v'$ 的值,然后在需要时根据这些信息重构 $v'$。
123123

124-
更具体地说,算法将是
124+
更具体地说,这个算法是
125125

126126
(fvi_alg)=
127-
1. 从一个数组 $\mathbf v$ 开始,该数组表示在某些网格点 $\{w_i\}$ 上的初始值函数猜测值
128-
1. 基于 $\mathbf v$ 和 $\{w_i\}$,通过插值或近似在状态空间 $\mathbb R_+$ 上构建函数 $v$。
127+
1. 从一个数组 $\mathbf v$ 开始,该数组表示值函数在某些网格点 $\{w_i\}$ 上的初始猜测值
128+
1. 基于 $\mathbf v$ 和 $\{w_i\}$,通过插值法或近似法在状态空间 $\mathbb R_+$ 上构建函数 $v$。
129129
1. 在每个网格点 $w_i$ 上获取并记录更新后的函数 $v'(w_i)$ 的样本。
130-
1. 除非满足某些停止条件,否则将此作为新数组并返回步骤1
130+
1. 若未满足某些停止条件,则将其作为新数组并返回步骤1
131131

132132
我们应该如何处理步骤2?
133133

134-
这是一个函数逼近问题,有很多种方法可以解决。
134+
这是一个函数近似问题,有很多种方法可以解决。
135135

136-
这里重要的是函数近似方案不仅要对每个$v$产生良好的近似,而且还要能够很好地配合上述更广泛的迭代算法
136+
对于函数近似方案,我们需要考虑两个关键点:一是要能够准确地近似每个$v$,二是要能够有效地融入到整个迭代算法中
137137

138-
从这两个方面来看,分段线性插值是一个不错的选择
138+
从这两个方面来看,连续分段线性插值法是一个不错的选择
139139

140140
这种方法
141141

142-
1. 能够很好地配合值函数迭代(参见{cite}`gordon1995stable`或{cite}`stachurski2008continuous`
143-
1. 能保持有用的形状特性,如单调性和凹凸性。
142+
1. 能够很好地配合值函数迭代(参见{cite}`gordon1995stable`或{cite}`stachurski2008continuous`
143+
1. 能保持关键的形状特性,如单调性和凹凸性。
144144

145-
线性插值将使用[numpy.interp](https://numpy.org/doc/stable/reference/generated/numpy.interp.html)来实现。
145+
线性插值将通过[numpy.interp](https://numpy.org/doc/stable/reference/generated/numpy.interp.html)来实现。
146146

147147
下图展示了在网格点$0, 0.2, 0.4, 0.6, 0.8, 1$上对任意函数进行分段线性插值的情况。
148148

@@ -159,8 +159,8 @@ def Af(x):
159159
160160
fig, ax = plt.subplots()
161161
162-
ax.plot(f_grid, f(f_grid), 'b-', label='true function')
163-
ax.plot(f_grid, Af(f_grid), 'g-', label='linear approximation')
162+
ax.plot(f_grid, f(f_grid), 'b-', label='真实函数')
163+
ax.plot(f_grid, Af(f_grid), 'g-', label='线性近似')
164164
ax.vlines(c_grid, c_grid * 0, f(c_grid), linestyle='dashed', alpha=0.5)
165165
166166
ax.legend(loc="upper center")
@@ -171,11 +171,11 @@ plt.show()
171171

172172
## 实现
173173

174-
第一步是为具有分离和连续工资分布的McCall模型构建一个即时编译类
174+
第一步,是为具有离职情况和连续工资分布的McCall模型构建一个jit类
175175

176-
在本应用中,我们将效用函数设定为对数函数,即$u(c) = \ln c$。
176+
在这个应用中,我们将效用函数设定为对数函数,即$u(c) = \ln c$。
177177

178-
我们将为工资采用对数正态分布,当$z$为标准正态分布且$\mu, \sigma$为参数时,$w = \exp(\mu + \sigma z)$。
178+
我们将采用对数正态分布来描述工资水平,其具体形式为$w = \exp(\mu + \sigma z)$,其中$z$服从标准正态分布,$\mu, \sigma$为模型参数
179179

180180
```{code-cell} ipython3
181181
@jit
@@ -186,15 +186,15 @@ def lognormal_draws(n=1000, μ=2.5, σ=0.5, seed=1234):
186186
return w_draws
187187
```
188188

189-
这是我们的类。
189+
以下是类的定义:
190190

191191
```{code-cell} ipython3
192192
mccall_data_continuous = [
193193
('c', float64), # 失业补偿
194-
('α', float64), # 工作分离率
194+
('α', float64), # 离职率
195195
('β', float64), # 折现因子
196196
('w_grid', float64[:]), # 用于拟合VFI的网格点
197-
('w_draws', float64[:]) # 用于蒙特卡洛的工资抽样
197+
('w_draws', float64[:]) # 用于蒙特卡洛方法的工资抽样
198198
]
199199
200200
@jitclass(mccall_data_continuous)
@@ -221,10 +221,10 @@ class McCallModelContinuous:
221221
w = self.w_grid
222222
u = lambda x: np.log(x)
223223
224-
# 对数组表示的值函数进行插值
224+
# 对用数组表示的值函数进行插值
225225
vf = lambda x: np.interp(x, w, v)
226226
227-
# 使用蒙特卡洛方法评估积分来更新d
227+
# 使用蒙特卡洛方法进行积分估值来更新d
228228
d_new = np.mean(np.maximum(vf(self.w_draws), u(c) + β * d))
229229
230230
# 更新v
@@ -261,9 +261,9 @@ def solve_model(mcm, tol=1e-5, max_iter=2000):
261261
return v, d
262262
```
263263

264-
这是一个函数`compute_reservation_wage`,它接收一个`McCallModelContinuous`实例并返回相应的保留工资。
264+
以下是一个函数`compute_reservation_wage`,它接收一个`McCallModelContinuous`实例并返回相应的保留工资。
265265

266-
如果对所有的w都有$v(w) < h$,那么函数返回np.inf
266+
如果对所有的$w$都有$v(w) < h$,那么函数返回`np.inf`
267267

268268
```{code-cell} ipython3
269269
@jit
@@ -272,7 +272,7 @@ def compute_reservation_wage(mcm):
272272
通过寻找最小的满足v(w) >= h的w,
273273
计算McCall模型实例的保留工资。
274274
275-
如果不存在这样的w,则w_bar被设为np.inf。
275+
如果不存在这样的w,那么w_bar就被设为np.inf。
276276
"""
277277
u = lambda x: np.log(x)
278278
@@ -288,25 +288,25 @@ def compute_reservation_wage(mcm):
288288
return w_bar
289289
```
290290

291-
这些练习要求你探索解决方案以及它如何随参数变化
291+
下面的练习中我们探究保留工资随参数变化的情况
292292

293293
## 练习
294294

295295
```{exercise}
296296
:label: mfv_ex1
297297
298-
使用上面的代码探索当工资参数 $\mu$ 发生变化时,保留工资会发生什么变化。
298+
使用上面的代码来探究当工资参数 $\mu$ 发生变化时,保留工资会发生什么变化。
299299
300-
使用默认参数和 `mu_vals = np.linspace(0.0, 2.0, 15)` 中的 $\mu$
300+
使用默认参数以及 `mu_vals = np.linspace(0.0, 2.0, 15)` $\mu$ 的值
301301
302-
保留工资的变化是否如你所预期
302+
保留工资的变化是否符合你的预期
303303
```
304304

305305
```{solution-start} mfv_ex1
306306
:class: dropdown
307307
```
308308

309-
这是一个解决方案
309+
这是一种答案
310310

311311
```{code-cell} ipython3
312312
mcm = McCallModelContinuous()
@@ -320,41 +320,48 @@ for i, m in enumerate(mu_vals):
320320
w_bar = compute_reservation_wage(mcm)
321321
w_bar_vals[i] = w_bar
322322
323-
ax.set(xlabel='mean', ylabel='reservation wage')
324-
ax.plot(mu_vals, w_bar_vals, label=r'$\bar w$ as a function of $\mu$')
323+
ax.set(xlabel='均值', ylabel='保留工资')
324+
ax.plot(mu_vals, w_bar_vals, label=r'$\bar w$ $\mu$ 的变化')
325325
ax.legend()
326326
327327
plt.show()
328328
```
329329

330-
不出所料,当报价分布向右偏移时,求职者更倾向于等待。
330+
不出所料,当工资报价分布向右偏移时,求职者更倾向于等待。
331331

332332
```{solution-end}
333333
```
334334

335335
```{exercise}
336336
:label: mfv_ex2
337337
338-
让我们现在来考虑求职者如何对波动性的增加做出反应
338+
现在我们来考虑求职者在面对波动性增加时,会做出怎样的反应
339339
340-
为了理解这一点,请计算当工资报价分布在 $(m - s, m + s)$ 上均匀分布,且 $s$ 变化时的保留工资
340+
为了理解这一点,请计算当工资报价在 $(m - s, m + s)$ 上均匀分布且 $s$ 会变化时的保留工资
341341
342-
这里的想法是我们保持均值不变,但扩大分布范围
342+
这里的想法是我们保持均值不变,但扩大支撑集
343343
344-
(这是一种*均值保持扩散*。)
344+
(这是一种*均值保留展开*。)
345345
346346
使用 `s_vals = np.linspace(1.0, 2.0, 15)` 和 `m = 2.0`。
347347
348-
说明你预期保留工资如何随 $s$ 变化。
348+
在分析保留工资如何随 $s$ 变化之前,让我们先思考一下:
349349
350-
现在计算它。结果是否如你所预期?
350+
当工资分布的波动性增加时,求职者面临两个相反的影响:
351+
352+
1. 更高的不确定性可能会让求职者倾向于接受当前工作机会,因为这提供了确定性收入
353+
2. 但另一方面,更大的波动性也意味着出现高工资的机会增加了
354+
355+
你认为哪个影响会占主导地位?保留工资会随着 $s$ 的增加而上升还是下降?
356+
357+
现在,请计算它。结果是否符合你的预期?
351358
```
352359

353360
```{solution-start} mfv_ex2
354361
:class: dropdown
355362
```
356363

357-
这是一个解决方案
364+
这是其中一种解法
358365

359366
```{code-cell} ipython3
360367
mcm = McCallModelContinuous()
@@ -371,7 +378,7 @@ for i, s in enumerate(s_vals):
371378
w_bar_vals[i] = w_bar
372379
373380
ax.set(xlabel='波动性', ylabel='保留工资')
374-
ax.plot(s_vals, w_bar_vals, label=r'工资波动性函数中的$\bar w$')
381+
ax.plot(s_vals, w_bar_vals, label=r'将工资波动性作为自变量的$\bar w$')
375382
ax.legend()
376383
377384
plt.show()
@@ -382,7 +389,7 @@ plt.show()
382389

383390
人们可能会认为,更高的波动性会使求职者更倾向于接受给定的工作机会,因为接受工作代表确定性,而等待则意味着风险。
384391

385-
但求职就像持有期权:劳动者只面临上行风险(因为在自由市场中,没有人可以强迫他们接受不好的工作机会)。
392+
但求职就像持有期权:工人只面临上行风险(因为在自由市场中,没有人可以强迫他们接受不好的工作机会)。
386393

387394
更大的波动性意味着更高的上行潜力,这会鼓励求职者继续等待。
388395

0 commit comments

Comments
 (0)