@@ -25,10 +25,7 @@ kernelspec:
2525```
2626
2727``` {epigraph}
28- "询问一个McCall工人就像与一个失业的朋友对话:
29- '也许你的期望值定得太高了',或者'为什么你在找到新工作之前就辞掉了原来的工作?'这就是真正的社会科学:试图通过观察人们所处的情况、他们面临的选择来建模,以理解人类行为
30-
31- "以及他们自己所认为的优缺点。" -- 罗伯特·卢卡斯(小)
28+ "询问一个McCall工人就像与一个失业的朋友对话:'也许你的期望值定得太高了',或者'为什么你在找到新工作之前就辞掉了原来的工作?'这就是真正的社会科学:试图通过观察人们所处的情况、他们面临的选择、以及他们自己所认为的优缺点来建模,以理解人类行为。" -- 小罗伯特·卢卡斯
3229```
3330
3431除了Anaconda中已有的内容外,本讲座还需要以下库:
@@ -46,15 +43,15 @@ McCall 搜索模型 {cite}`McCall1970` 帮助改变了经济学家思考劳动
4643
4744为了阐明"非自愿"失业等概念,McCall 从以下因素建模了失业工人的决策问题:
4845
49- * 当前和可能的未来工资
50- * 不耐心程度
46+ * 当前工资和可能的未来工资
47+ * 耐心程度
5148* 失业补助
5249
5350为了解决这个决策问题,McCall 使用了动态规划。
5451
55- 在这里 ,我们将建立 McCall 的模型并使用动态规划来分析它。
52+ 在本讲中 ,我们将建立 McCall 的模型并使用动态规划来分析它。
5653
57- 我们将看到,McCall 的模型不仅本身很有趣,而且也是学习动态规划的绝佳载体 。
54+ 我们将看到,McCall 的模型不仅本身很有趣,而且是学习动态规划的绝佳载体 。
5855
5956让我们从一些导入开始:
6057
@@ -65,7 +62,7 @@ FONTPATH = "fonts/SourceHanSerifSC-SemiBold.otf"
6562mpl.font_manager.fontManager.addfont(FONTPATH)
6663plt.rcParams['font.family'] = ['Source Han Serif SC']
6764
68- plt.rcParams["figure.figsize"] = (11, 5) #set default figure size
65+ plt.rcParams["figure.figsize"] = (11, 5) #设置默认图片尺寸
6966import numpy as np
7067from numba import jit, float64
7168from numba.experimental import jitclass
@@ -78,35 +75,35 @@ from quantecon.distributions import BetaBinomial
7875``` {index} single: Models; McCall
7976```
8077
81- 一个失业者在每个时期都会收到工资为 $w_t$的工作机会。
78+ 一个失业者在每个时期都会收到一个工资为 $w_t$的工作机会。
8279
8380在本讲中,我们采用以下简单环境:
8481
8582* 工资序列$\{ w_t\} _ {t \geq 0}$是独立同分布的,其中$q(w)$是在有限集合$\mathbb{W}$中观察到工资$w$的概率。
86- * 代理人在 $t$期开始时观察到 $w_t$。
87- * 代理人知道 $\{ w_t\} $是具有共同分布$q$的独立同分布序列,并可以利用这一点计算期望值。
83+ * 失业者在 $t$期的开始观察到 $w_t$。
84+ * 失业者知道 $\{ w_t\} $是具有共同分布$q$的独立同分布序列,并可以利用这一点计算期望值。
8885
8986(在后续讲座中,我们将放宽这些假设。)
9087
91- 在时间$t$,我们的代理人有两个选择 :
88+ 在时间$t$,失业者有两个选择 :
9289
93- 1 . 接受工作机会并以固定工资 $w_t$永久工作。
90+ 1 . 接受工作机会,并以固定工资 $w_t$永久工作。
94911 . 拒绝工作机会,获得失业补助$c$,并在下一期重新考虑。
9592
96- 代理人具有无限生命,目标是最大化预期的折现收益总和
93+ 假设失业者具有无限长的生命,其目标是最大化折现收益总和的期望值
9794
9895$$
9996\mathbb{E} \sum_{t=0}^{\infty} \beta^t y_t
10097$$
10198
10299常数$\beta$位于$(0, 1)$之间,被称为** 折现因子** 。
103100
104- $\beta$ 越小,代理人对未来效用的折现程度相对于当前效用就越高 。
101+ $\beta$ 越小,未来效用的折现值越高 。
105102
106- 变量 $y_t$ 是收入,等于
103+ 变量 $y_t$ 是收入,
107104
108- * 就业时的工资 $w_t$
109- * 失业时的失业补助金 $c$
105+ * 当就业时,它等于工资 $w_t$
106+ * 当失业时,它等于失业补助金 $c$
110107
111108
112109### 权衡取舍
@@ -136,15 +133,15 @@ $\beta$ 越小,代理人对未来效用的折现程度相对于当前效用就
136133
137134为此,让$v^* (w)$表示当工资为$w \in \mathbb{W}$时,一个失业工人在当前时期开始时的总生命周期* 价值* 。
138135
139- 具体来说,该个体手头有工资offer $w$。
136+ 具体来说,我们考虑这样一种情况:一个失业者现在面临一个工资为 $w$ 的工作机会 。
140137
141- 更准确地说 ,$v^* (w)$表示当处于这种情况下的个体在当前和未来所有时间点做出 * 最优* 决策时,目标函数{eq}` objective ` 的价值。
138+ 那么 ,$v^* (w)$表示的是该失业者在当前和未来所有时间点做出 * 最优* 决策时,目标函数{eq}` objective ` 的价值。
142139
143140当然,计算$v^* (w)$并不简单,因为我们还不知道哪些决策是最优的,哪些不是!
144141
145- 但是可以将$v^* $看作一个函数,它为每个可能的工资$s$分配在手头有该offer时可获得的最大生命周期价值 。
142+ 但是可以将$v^* $看作一个函数,它为每个可能的工资$w$分配在持有该工作机会时可获得的最大终身价值 。
146143
147- 一个关键的观察是 ,这个函数$v^* $必须满足以下递归关系
144+ 一个关键点是 ,这个函数$v^* $必须满足以下递归关系: 对于 $\mathbb{W}$ 中的每一个可能的 $w$,我们有
148145
149146``` {math}
150147:label: odu_pv
@@ -156,33 +153,29 @@ v^*(w)
156153 \right\}
157154```
158155
159- 对于 $\mathbb{W}$ 中的每一个可能的 $w$。
160-
161156这个重要的方程是** 贝尔曼方程** 的一个版本,这个方程在经济动态学和其他涉及长期规划的领域中无处不在。
162157
163158其背后的直观理解如下:
164159
165- * max运算中的第一项是接受当前报价的终身收益 ,因为
160+ * max运算中的第一项是接受当前工作机会的终身收益 ,因为
166161
167162$$
168163 \frac{w}{1 - \beta} = w + \beta w + \beta^2 w + \cdots
169164$$
170165
171- * max运算中的第二项是** 延续价值 ** ,即拒绝当前报价并在随后所有时期做出最优行为的终身收益
166+ * max运算中的第二项是** 延续值 ** ,即拒绝当前工作机会并在随后所有时期做出最优行为的终身收益。
172167
173- 如果我们优化并从这两个选项中选择最佳选项,我们就能获得当前报价 $w$ 下的最大终身价值。
168+ 通过从这两个选项中选择最优的一个,我们就能得到在当前工资报价 $w$ 下的最大终身价值。
174169
175- 但这恰恰就是 {eq}` odu_pv ` 左边的 $v^* (w)$。
170+ 而这恰恰就是 {eq}` odu_pv ` 左边的 $v^* (w)$。
176171
177172### 最优策略
178173
179174假设现在我们能够求解 {eq}` odu_pv ` 得到未知函数 $v^* $。
180175
181- 一旦我们掌握了这个函数,我们就可以做出最优行为(即做出
176+ 一旦我们掌握了这个函数,我们就可以做出最优行为(即在接受和拒绝之间做出正确选择)。
182177
183- 在右侧选择最大值(在接受和拒绝之间)。
184-
185- 我们只需要在{eq}` odu_pv ` 右侧选择最大值即可。
178+ 我们只需要在{eq}` odu_pv ` 的右侧选择最大值即可。
186179
187180最优行动最好被理解为一个** 策略** ,它通常是一个从状态到行动的映射。
188181
218211
219212这里的 $\bar w$(称为* 保留工资* )是一个取决于 $\beta, c$ 和工资分布的常数。
220213
221- 代理应当当且仅当当前工资报价超过保留工资时接受 。
214+ 失业者当且仅当当前工作机会的工资超过保留工资时接受该工作 。
222215
223216根据{eq}` reswage ` ,如果我们能计算出价值函数,就能计算出这个保留工资。
224217
@@ -270,7 +263,7 @@ v'(i)
270263 v(j) q (j)
271264 \right\}
272265\quad
273- \text{for } i = 1, \ldots, n
266+ \text{对于 } i = 1, \ldots, n
274267```
275268
276269第3步:计算 $v$ 和 $v'$ 之间的差异度量,例如 $\max_i |v(i)- v'(i)|$。
@@ -279,13 +272,13 @@ v'(i)
279272
280273第5步:返回 $v$。
281274
282- 对于较小的容差,返回的函数 $v$ 是值函数 $v^* $ 的近似值。
275+ 对于较小的容差,返回的函数 $v$ 是价值函数 $v^* $ 的近似值。
283276
284277下面的理论将详细说明这一点。
285278
286279### 不动点理论
287280
288- 这些想法背后的数学原理是什么 ?
281+ 这个算法背后的数学原理是什么 ?
289282
290283首先,通过以下方式定义从 $\mathbb R^n$ 到自身的映射 $T$:
291284
@@ -308,19 +301,19 @@ v'(i)
308301
309302* 这是从初始猜测 $v$ 开始,应用 $k$ 次 $T$ 的结果
310303
311- 可以证明,$T$ 在 $\mathbb R^n$ 上满足[ 巴拿赫不动点定理] ( https://en.wikipedia.org/wiki/Banach_fixed-point_theorem ) 的条件。
304+ 可以证明,$T$ 在 $\mathbb R^n$ 上满足[ 巴拿赫不动点定理] ( https://baike.baidu.com/item/%E5%B7%B4%E6%8B%BF%E8%B5%AB%E4%B8%8D%E5%8A%A8%E7%82%B9%E5%AE%9A%E7%90%86/9492042 ) 的条件。
312305
313- 其中一个推论是 $T$ 在 $\mathbb R^n$ 中有唯一的不动点。
306+ 一个推论是 $T$ 在 $\mathbb R^n$ 中有唯一的不动点。
314307
315308* 即存在唯一的向量 $\bar v$ 使得 $T \bar v = \bar v$。
316309
317- 此外 ,从 $T$ 的定义可以直接得出这个不动点就是 $v^* $。
310+ 而且 ,从 $T$ 的定义可以直接得出这个不动点就是 $v^* $。
318311
319312巴拿赫收缩映射定理的第二个推论是,无论 $v$ 取何值,序列 $\{ T^k v \} $ 都会收敛到不动点 $v^* $。
320313
321314### 实现
322315
323- 对于状态过程的分布 $q$,我们的默认选择是[ Beta-二项分布] ( https://en.wikipedia .org/wiki/Beta-binomial_distribution ) 。
316+ 对于状态过程的分布 $q$,我们的默认选择是[ Beta-二项分布] ( https://docs.scipy .org.cn/doc/scipy/tutorial/stats/discrete_betabinom.html ) 。
324317
325318``` {code-cell} ipython3
326319n, a, b = 50, 200, 100 # 默认参数
@@ -347,7 +340,7 @@ plt.show()
347340
348341我们将使用Numba来加速我们的代码。
349342
350- * 特别参见 [ 我们关于Numba的讲座] ( https://python-programming.quantecon.org/numba.html ) 中对` @jitclass ` 的讨论。
343+ * 参见 [ 我们关于Numba的讲座] ( https://python-programming.quantecon.org/numba.html ) 中对` @jitclass ` 的讨论。
351344
352345以下内容通过提供一些类型来帮助Numba
353346
@@ -360,9 +353,7 @@ mccall_data = [
360353]
361354```
362355
363- 这是一个用于存储数据并计算状态-动作对值的类,
364- 即计算贝尔曼方程 {eq}` odu_pv2p ` 右侧最大括号中的值,
365- 基于当前状态和任意可行动作。
356+ 这是一个用于存储数据并计算状态-行动对的值的类,即基于当前状态和任意可行的行动,计算贝尔曼方程 {eq}` odu_pv2p ` 右侧最大值括号中的值。
366357
367358类中包含了默认参数值。
368359
@@ -381,8 +372,8 @@ class McCallModel:
381372 """
382373 # 简化名称
383374 c, β, w, q = self.c, self.β, self.w, self.q
384- # 评估每个状态-动作对的值
385- # 考虑动作 = 接受或拒绝当前报价
375+ # 评估每个状态-行动对的值
376+ # 考虑行动 = 接受或拒绝当前报价
386377 accept = w[i] / (1 - β)
387378 reject = c + β * np.sum(v * q)
388379
@@ -430,7 +421,7 @@ plot_value_function_seq(mcm, ax)
430421plt.show()
431422```
432423
433- 你可以看到收敛正在发生 :连续的迭代值越来越接近。
424+ 你可以看到收敛的发生 :连续的迭代值越来越接近。
434425
435426这里有一个更严谨的迭代计算极限的方法,它会持续计算直到连续迭代之间的测量偏差小于容差值。
436427
@@ -469,7 +460,7 @@ def compute_reservation_wage(mcm,
469460 return (1 - β) * (c + β * np.sum(v * q))
470461```
471462
472- 下一行计算在默认参数下的保留工资
463+ 现在我们计算在默认参数下的保留工资
473464
474465``` {code-cell} ipython3
475466compute_reservation_wage(mcm)
@@ -522,7 +513,7 @@ plt.show()
522513
523514但对于我们的McCall搜索模型来说,还有一个更简单的方法,可以避免计算价值函数。
524515
525- 让 $h$ 表示继续值 :
516+ 让 $h$ 表示延续值 :
526517
527518``` {math}
528519:label: j1
581572
582573我们可以再次使用巴拿赫不动点定理来证明这个过程总是收敛的。
583574
584- 这里的一个重大区别是,我们是在对一个标量 $h$ 进行迭代,而不是对一个 $n$ 维向量 $v(i), i = 1, \ldots, n$ 进行迭代。
575+ 与之前的方法相比,这里有一个重要区别:我们现在是对单个标量 $h$ 进行迭代,而不是像之前那样对 $n$ 维向量 $v(i), i = 1, \ldots, n$ 进行迭代,这使得计算过程更加简单 。
585576
586577以下是实现代码:
587578
@@ -614,7 +605,7 @@ def compute_reservation_wage_two(mcm,
614605 return (1 - β) * h
615606```
616607
617- 你可以使用以下代码来解决下面的练习 。
608+ 你可以使用以上代码来完成下面的练习 。
618609
619610## 练习
620611
@@ -625,7 +616,7 @@ def compute_reservation_wage_two(mcm,
625616
626617> `c_vals = np.linspace(10, 40, 25)`
627618
628- 也就是说,让代理人从失业状态开始 ,根据给定参数计算其保留工资,然后模拟看需要多长时间才能接受工作。
619+ 也就是说,让失业者从失业状态开始 ,根据给定参数计算其保留工资,然后模拟看需要多长时间才能接受工作。
629620
630621重复多次并取平均值。
631622
@@ -636,7 +627,7 @@ def compute_reservation_wage_two(mcm,
636627:class: dropdown
637628```
638629
639- 这是一个解决方案
630+ 参考答案
640631
641632``` {code-cell} ipython3
642633cdf = np.cumsum(q_default)
@@ -689,7 +680,7 @@ plt.show()
689680
690681本练习的目的是展示如何将上文使用的离散工资分布替换为连续分布。
691682
692- 这是一个重要的主题 ,因为许多常用的分布都是连续的(即具有密度函数)。
683+ 这是一个重要内容 ,因为许多常用的分布都是连续的(即具有密度函数)。
693684
694685幸运的是,在我们的简单模型中理论变化很小。
695686
742733:class: dropdown
743734```
744735
745- 这是一个解决方案 :
736+ 参考答案 :
746737
747738``` {code-cell} ipython3
748739mccall_data_continuous = [
@@ -771,7 +762,7 @@ def compute_reservation_wage_continuous(mcmc, max_iter=500, tol=1e-5):
771762
772763 c, β, σ, μ, w_draws = mcmc.c, mcmc.β, mcmc.σ, mcmc.μ, mcmc.w_draws
773764
774- h = np.mean(w_draws) / (1 - β) # 初始猜测
765+ h = np.mean(w_draws) / (1 - β) # 初始值猜测
775766 i = 0
776767 error = tol + 1
777768 while i < max_iter and error > tol:
@@ -791,7 +782,7 @@ def compute_reservation_wage_continuous(mcmc, max_iter=500, tol=1e-5):
791782
792783现在我们研究保留工资如何随着 $c$ 和 $\beta$ 变化。
793784
794- 我们将使用等高线图来进行这项研究 。
785+ 我们将使用等值线图来分析这个问题 。
795786
796787``` {code-cell} ipython3
797788grid_size = 25
0 commit comments