Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions .translate/state/inventory_dynamics.md.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
source-sha: dba5555ac22c4127d46bb9fcd209fc6f449d2662
synced-at: "2026-07-18"
model: claude-sonnet-5
mode: RESYNC
section-count: 4
tool-version: 0.17.0
40 changes: 25 additions & 15 deletions lectures/inventory_dynamics.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,13 @@ kernelspec:
display_name: Python 3 (ipykernel)
language: python
name: python3
translation:
title: 库存动态
headings:
Overview: 概述
Sample Paths: 样本路径
Marginal Distributions: 边际分布
Exercises: 练习
---

```{raw} jupyter
Expand All @@ -21,6 +28,9 @@ kernelspec:

# 库存动态

```{index} single: Markov process, inventory
```

```{contents} 目录
:depth: 2
```
Expand Down Expand Up @@ -85,7 +95,7 @@ $$

下面是一个类,它用于存储参数并生成库存的时间路径。

```{code-cell} ipython3
```{code-cell} python3
firm_data = [
('s', float64), # 触发补货水平
('S', float64), # 库存总容量
Expand Down Expand Up @@ -149,7 +159,7 @@ ax.legend(**legend_args)
plt.show()
```

现在让我们模拟多条路径,这样可以更好地了解库存动态的整体行为和可能的库存分布
现在让我们模拟多条路径,从而更全面地了解不同结果的概率

```{code-cell} ipython3
sim_length=200
Expand Down Expand Up @@ -243,7 +253,7 @@ plt.show()
* 大多数公司已经补了两次货,但也有少部分公司只补货一次(见上图路径)。
* 第二种公司的库存较少。

我们还可以使用[核密度估计](https://baike.baidu.com/item/核密度估计/10349033)来近似这个分布。
我们还可以使用[核密度估计](https://en.wikipedia.org/wiki/Kernel_density_estimation)来近似这个分布。

核密度估计可以被理解为平滑的直方图。

Expand Down Expand Up @@ -291,7 +301,7 @@ plt.show()

你应该能看到收敛性,体现在两个连续分布之间的差异越来越小。

尝试使用不同的初始条件来验证,无论从哪个初始状态开始,长期分布都会收敛到相同的平稳分布
尝试使用不同的初始条件来验证,从长期来看,分布在不同初始条件下是不变的
```

```{solution-start} id_ex1
Expand All @@ -300,9 +310,9 @@ plt.show()

以下是其中一种解法:

由于这个计算需要大量的计算资源,我们需要编写更高效的代码
由于这个计算需要大量的CPU运算,我们尝试编写更高效的代码

为此,我们将创建一个专门的函数来替代之前使用的类,以提高计算效率
为此,我们编写了一个专门的函数来替代之前使用的类

```{code-cell} ipython3
s, S, mu, sigma = firm.s, firm.S, firm.mu, firm.sigma
Expand Down Expand Up @@ -351,23 +361,23 @@ ax.legend()
plt.show()
```

从图中可以看出,随着时间的推移,分布逐渐收敛到一个稳定状态
注意到,到 $t=500$ 或 $t=750$ 时,密度几乎不再变化

在 t=500 和 t=750 时的分布几乎完全重合,表明我们已经得到了平稳密度的良好近似
我们已经得到了平稳密度的一个合理近似

你可以通过测试多个不同的初始条件,来确定初始条件确实不重要
你可以通过测试几个不同的初始条件,来确认初始条件确实不重要

例如,你可以尝试将所有公司的初始库存设置为 $X_0 = 20$ 或 $X_0 = 80$,然后重新运行上面的代码,观察分布最终是否收敛到相同的稳态分布
例如,你可以尝试将所有公司的初始库存设置为 $X_0 = 20$ 或 $X_0 = 80$,然后重新运行上面的代码。

```{solution-end}
```

```{exercise}
:label: id_ex2

使用模拟的方法,估计一家初始库存为 $X_0 = 70$ 的公司在前50个时期内至少需要补充库存两次的概率
使用模拟的方法,计算初始库存为 $X_0 = 70$ 的公司在前50个时期内需要补货两次或以上的概率

为了获得统计上可靠的结果,请确保使用足够大的样本量
你需要较大的样本量才能得到准确的结果
```

```{solution-start} id_ex2
Expand All @@ -378,7 +388,7 @@ plt.show()

同样地,由于计算量相对较大,我们编写了一个专门的函数而不是使用上面的类。

我们将利用并行计算来同时处理多家公司的模拟,以提高计算效率
我们还将利用公司之间的并行计算

```{code-cell} ipython3
@jit(parallel=True)
Expand Down Expand Up @@ -413,11 +423,11 @@ freq = compute_freq()
print(f"至少发生两次缺货的频率 = {freq}")
```

尝试将上面`@jit`[装饰器](https://zhuanlan.zhihu.com/p/53666925)中的`parallel`参数改为`False`。
尝试将上面`@jit`装饰器中的`parallel`参数改为`False`。

根据你的系统配置,运行速度的差异可能会很大。

(在我们的系统上运行速度提升了5倍
(在我们的系统上运行速度提升了5倍

```{solution-end}
```
Loading