Skip to content

Commit 3a78cec

Browse files
[Shortest_Path]Translation Updating (#155)
* Update short_path.md * update translations --------- Co-authored-by: Humphrey Yang <u6474961@anu.edu.au>
1 parent 8b3c5f8 commit 3a78cec

File tree

2 files changed

+49
-20
lines changed

2 files changed

+49
-20
lines changed

lectures/long_run_growth.md

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -97,28 +97,28 @@ data.head()
9797

9898
我们可以看到,该数据集包含许多国家和年份的人均国内生产总值(`gdppc`)和人口(`pop`)。
9999

100-
让我们看看这个数据集中有多少国家和哪些国家
100+
让我们看看这个数据集中有多少国家/地区。
101101

102102
```{code-cell} ipython3
103-
countries = data.country.unique()
104-
len(countries)
103+
regions = data.country.unique()
104+
len(regions)
105105
```
106106

107-
通过运行上面的代码,我们可以列出这个数据集有多少个国家。
107+
通过运行上面的代码,我们可以列出这个数据集有多少个国家/地区
108108

109109
下面,我们将列出这些国家。
110110

111111
```{code-cell} ipython3
112-
countries
112+
regions
113113
```
114114

115-
我们现在可以继续探索数据集里的169个国家。
115+
我们现在可以继续探索数据集里的169个国家/地区
116116

117-
我们可以遍历每个国家来了解每个国家可用的年份都有哪些
117+
我们可以遍历每个样本来了解每个样本可用的年份都有哪些
118118

119119
```{code-cell} ipython3
120120
country_years = []
121-
for country in countries:
121+
for country in regions:
122122
cy_data = data[data.country == country]['year']
123123
ymin, ymax = cy_data.min(), cy_data.max()
124124
country_years.append((country, ymin, ymax))

lectures/short_path.md

Lines changed: 41 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -49,22 +49,29 @@ import numpy as np
4949
```
5050

5151
## 问题概述
52-
最短路径问题是寻找如何以最小成本从[](https://en.wikipedia.org/wiki/Graph_%28mathematics%29)中的一个指定节点遍历到另一个节点。
52+
53+
最短路径问题是寻找如何以最小成本从[](https://baike.baidu.com/item/%E5%9B%BE/13018767)中的一个指定节点遍历到另一个节点。
54+
5355
考虑下面这个图
5456

5557
```{figure} /_static/lecture_specific/short_path/graph.png
5658
5759
```
5860

5961
我们希望以最小成本从节点(顶点)A到达节点G
62+
6063
* 箭头(边)表示我们可以采取的移动。
6164
* 边上的数字表示沿该边行进的成本。
6265
(像上面这样的图被称为加权[有向图](https://en.wikipedia.org/wiki/Directed_graph)。)
66+
6367
图的可能解释包括
68+
6469
* 供应商到达目的地的最小成本。
6570
* 互联网上的数据包路由(最小化时间)。
6671
* 等等。
72+
6773
对于这个简单的图,快速扫描边可以看出最优路径是
74+
6875
* A, C, F, G,成本为8
6976

7077
```{figure} /_static/lecture_specific/short_path/graph4.png
@@ -78,16 +85,21 @@ import numpy as np
7885
```
7986

8087
## 寻找最低成本路径
81-
对于大型图,我们需要一个系统的解决方案。
88+
89+
对于更大的图,我们需要一个系统性的解决方案。
90+
8291
让 $J(v)$ 表示从节点 $v$ 出发的最小成本,理解为如果我们选择最佳路线,从 $v$ 出发的总成本。
92+
8393
假设我们知道每个节点 $v$ 的 $J(v)$,如下图所示(基于前面示例中的图)。
8494

8595
```{figure} /_static/lecture_specific/short_path/graph2.png
8696
8797
```
8898

8999
注意 $J(G) = 0$。
90-
现在可以通过以下步骤找到最佳路径:
100+
101+
我们可以通过以下步骤找到最佳路径:
102+
91103
1. 从节点 $v = A$ 开始
92104
1. 从当前节点 $v$,移动到解决以下问题的任何节点
93105

@@ -98,10 +110,14 @@ import numpy as np
98110
```
99111

100112
其中
113+
101114
* $F_v$ 是可以从 $v$ 一步到达的节点集合。
102115
* $c(v, w)$ 是从 $v$ 到 $w$ 的旅行成本。
103-
因此,如果我们知道函数 $J$,那么找到最佳路径几乎就是微不足道的事。
116+
*
117+
因此,如果我们知道函数 $J$,那么找到最佳路径几乎就是轻而易举的事。
118+
104119
但是我们如何找到成本函数 $J$ 呢?
120+
105121
经过一些思考,你会确信对于每个节点 $v$,
106122
函数 $J$ 满足
107123

@@ -111,15 +127,15 @@ import numpy as np
111127
J(v) = \min_{w \in F_v} \{ c(v, w) + J(w) \}
112128
```
113129

114-
这被称为**贝尔曼方程**,以数学家[理查德·贝尔曼](https://en.wikipedia.org/wiki/Richard_E._Bellman)的名字命名。
130+
这被称为**贝尔曼方程**,以数学家[理查德·贝尔曼](https://baike.baidu.com/item/%E8%B4%9D%E5%B0%94%E6%9B%BC%E6%96%B9%E7%A8%8B/5500990)的名字命名。
115131

116132
贝尔曼方程可以被理解为$J$必须满足的一个限制条件。
117133

118134
我们现在想要做的是利用这个限制条件来计算$J$。
119135

120-
## 求解最小代价-到-目标
136+
## 求解最小成本函数
121137

122-
让我们来看一个计算$J$的算法,然后思考如何实现它。
138+
让我们一起学习一个计算$J$的算法,然后思考如何实现它。
123139

124140
### 算法
125141

@@ -139,7 +155,9 @@ J_0(v) = 0 \text{ for all } v
139155
1. 设 $n = 0$
140156
2. 对所有 $v$,设 $J_{n+1} (v) = \min_{w \in F_v} \{ c(v, w) + J_n(w) \}$
141157
3. 如果 $J_{n+1}$ 和 $J_n$ 不相等,则将 $n$ 加 1,返回步骤 2
158+
142159
这个序列收敛于 $J$。
160+
143161
虽然我们在此省略了证明,但我们将在其他动态规划讲座中证明类似的结论。
144162

145163
### 实现
@@ -156,6 +174,7 @@ Q(v, w)
156174
& +\infty \text{ 否则 }
157175
\end{cases}
158176
$$
177+
159178
在这种情况下,$Q$ 通常被称为**距离矩阵**
160179

161180
我们现在也对节点进行编号,其中 $A = 0$,所以,例如
@@ -165,6 +184,7 @@ Q(1, 2)
165184
=
166185
\text{ 从 B 到 C 的旅行成本 }
167186
$$
187+
168188
例如,对于上面的简单图,我们设置
169189

170190
```{code-cell} python3
@@ -180,13 +200,15 @@ Q = np.array([[inf, 1, 5, 3, inf, inf, inf],
180200
```
181201

182202
请注意,保持不动(在主对角线上)的成本设置为:
203+
183204
* 对于非目的地节点,设为 `np.inf` --- 必须继续移动。
184205
* 对于目的地节点,设为 0 --- 这是我们停止的地方。
206+
185207
对于到达成本函数的近似序列 $\{J_n\}$,我们可以使用 NumPy 数组。
186208
让我们尝试这个例子,看看效果如何:
187209

188210
```{code-cell} python3
189-
nodes = range(7) # 节点 = 0, 1, ..., 6
211+
nodes = range(7) # 节点 = 0, 1, ..., 6
190212
J = np.zeros_like(nodes, dtype=int) # 初始猜测
191213
next_J = np.empty_like(nodes, dtype=int) # 储存更新的猜测
192214
@@ -201,14 +223,16 @@ while i < max_iter:
201223
if np.array_equal(next_J, J):
202224
break
203225
204-
J[:] = next_J # 将 next_J 的内容复制到 J
226+
J[:] = next_J # 将 next_J 的内容复制到 J
205227
i += 1
206228
207229
print("到达成本函数是", J)
208230
```
209231

210232
这与我们上面通过观察得到的数字相符。
233+
211234
但更重要的是,我们现在有了一种处理大型图的方法。
235+
212236
## 练习
213237

214238
```{exercise-start}
@@ -218,10 +242,12 @@ print("到达成本函数是", J)
218242
以下文本描述了一个加权有向图。
219243

220244
`node0, node1 0.04, node8 11.11, node14 72.21` 表示从node0我们可以到达:
221-
* node1,代价为0.04
222-
* node8,代价为11.11
223-
* node14,代价为72.21
245+
* node1,成本为0.04
246+
* node8,成本为11.11
247+
* node14,成本为72.21
248+
224249
从node0无法直接到达其他节点。
250+
225251
其他行具有类似的解释。
226252
你的任务是使用上面给出的算法来找到最优路径及其代价。
227253

@@ -367,10 +393,13 @@ def map_graph_to_distance_matrix(in_file):
367393
return Q
368394
```
369395

396+
370397
此外,让我们编写
371398
1. 一个"贝尔曼算子"函数,该函数接受距离矩阵和当前的J估计值,并返回更新后的J估计值,以及
372399
2. 一个函数,该函数接受距离矩阵并返回一个代价函数。
400+
373401
我们将使用上述算法。
402+
374403
最小化步骤被向量化以提高速度。
375404

376405
```{code-cell} python3

0 commit comments

Comments
 (0)