4. 仿真核心依赖库
供应链场景仿真工程并非从零编写所有算法,而是建立在成熟的开源科学计算与仿真库之上。本章聚焦五个核心依赖库的定位、安装策略与版本锁定方法,确保团队在不同开发环境(Windows / macOS / Linux / CI 流水线)中复现一致的仿真行为。
4.1 五大依赖库的职责边界
在进入安装命令之前,必须理解每个库在仿真系统中的具体角色。下表从数据层、建模层、分析层三个维度划分职责:
| 库名 | 版本基线(推荐) | 核心职责 | 在仿真工程中的典型用法 |
|---|---|---|---|
| SimPy | 4.0.x | 离散事件仿真引擎 | 定义仓库补货流程、运输延迟、订单生成器等事件驱动逻辑 |
| NumPy | 1.24.x | 高性能数值计算与随机数生成 | 生成需求分布(正态/泊松)、矩阵运算、批量数组操作 |
| Pandas | 2.0.x | 结构化数据清洗与时间序列处理 | 加载历史订单表、按 SKU 分组聚合、输出仿真结果 DataFrame |
| Matplotlib | 3.7.x | 静态图表与仿真结果可视化 | 绘制库存水位曲线、订单满足率直方图、多场景对比折线图 |
| NetworkX | 3.1.x | 图结构与网络分析 | 构建供应链网络拓扑(工厂→仓库→门店)、计算最短路径与连通性 |
版本选择原则:推荐锁定各库的 次新稳定大版本(如 NumPy 1.24.x 而非 1.25.x),因为供应链仿真项目通常持续 6–18 个月,次新版本在 API 稳定性与社区支持之间取得最佳平衡。
4.2 环境隔离与安装命令
严禁在系统全局 Python 环境中直接安装依赖。必须使用虚拟环境隔离每个仿真项目的依赖树。以下为基于 venv + pip 的标准操作流程:
- 创建虚拟环境(Python 3.9+ 推荐):
python -m venv scm_sim_env
source scm_sim_env/bin/activate # Linux/macOS
scm_sim_env\Scripts\activate # Windows
- 一次性安装五个核心库:
pip install simpy==4.0.1 numpy==1.24.3 pandas==2.0.3 matplotlib==3.7.2 networkx==3.1
- 验证安装版本:
python -c "import simpy,numpy,pandas,matplotlib,networkx; \
print(simpy.__version__, numpy.__version__, pandas.__version__, \
matplotlib.__version__, networkx.__version__)"
输出示例:
若版本号与预期不符,请检查是否激活了正确的虚拟环境,或是否存在全局包冲突。
4.0.1 1.24.3 2.0.3 3.7.2 3.1若版本号与预期不符,请检查是否激活了正确的虚拟环境,或是否存在全局包冲突。
4.3 版本锁定的工程化方案
仅靠 pip install 指定版本不足以应对团队协作与 CI/CD 场景。必须使用 requirements.txt 或 pyproject.toml 锁定完整依赖树。以下为两种主流方案的对比:
| 方案 | 锁定粒度 | 适用场景 | 生成命令 |
|---|---|---|---|
| requirements.txt | 顶层依赖 + 子依赖全版本 | 传统 pip 工作流、Docker 构建 | pip freeze > requirements.txt |
| pyproject.toml + poetry.lock | 依赖树哈希校验 | 现代 Python 项目、多环境发布 | poetry lock |
对于本课程,推荐使用 requirements.txt 方式,因为它与 CI 流水线、Dockerfile 的集成最为直接。锁定后的文件片段示例如下:
simpy==4.0.1
numpy==1.24.3
pandas==2.0.3
matplotlib==3.7.2
networkx==3.1
# 以下为自动锁定的子依赖(示例)
contourpy==1.1.0
cycler==0.11.0
fonttools==4.42.0
kiwisolver==1.4.4
packaging==23.1
pillow==10.0.0
pyparsing==3.0.9
python-dateutil==2.8.2
pytz==2023.3
six==1.16.0
tzdata==2023.3
常见陷阱:不要手动编辑 requirements.txt 中的子依赖版本。每次更新依赖后,重新执行
pip freeze > requirements.txt 覆盖旧文件,否则可能引入不可复现的版本冲突。
4.4 依赖库协作架构图
下图展示了五个核心库在供应链仿真工程中的数据流与调用关系。理解这张图有助于在后续章节中快速定位每个库的代码位置:
4.5 跨平台兼容性检查清单
在团队中推广前,建议逐项验证以下环境要素,避免因操作系统差异导致仿真结果不一致:
- Python 解释器版本:统一使用 3.9、3.10 或 3.11,避免 3.12 早期版本与 SimPy 4.0 的兼容问题。
- NumPy 随机数种子:确认
numpy.random.default_rng(seed)在不同平台上生成相同的序列(NumPy 1.24+ 已保证跨平台一致性)。 - Matplotlib 字体回退:中文字体在 macOS 与 Linux 上默认不同,需在仿真脚本中显式指定
plt.rcParams['font.sans-serif']。 - NetworkX 布局算法:
spring_layout等布局函数依赖随机初始化,每次运行前应固定seed参数。
工程落地建议:在项目根目录创建
env_check.py 脚本,自动检测上述五项兼容性指标并输出通过/失败状态。将此脚本加入 CI 流水线的第一个步骤,确保所有开发者的环境在进入仿真开发前已对齐。