# 仿真导论

LLMS 索引： [llms.txt](/llms.txt)

---

仿真（simulation）是对真实世界过程或系统运行过程的模仿。无论采用手工方式还是计算机方式，仿真都包含两个要素：生成系统的一段人造历史（artificial history），并观察这段人造历史，从而推断真实系统的运行特性。

研究系统随时间演化的行为，方法是建立仿真模型（simulation model）。该模型通常以一组关于系统如何运行的假设的形式出现。这些假设通过系统中各实体（entity，即关注的对象）之间的数学、逻辑和符号关系来表达。模型一旦建立并通过验证（validated），就可以用它来研究关于真实世界的各种"如果……会怎样"（what if）问题。可以先对系统的潜在变更进行仿真，以预测其对系统性能的影响。仿真也可用于研究尚处于设计阶段、尚未建成的系统。因此，仿真建模既可作为分析工具，用于预测对既有系统的变更所产生的效果，也可作为设计工具，用于预测新系统在各种不同情形下的性能。

在某些情况下，所建立的模型足够简单，可以用数学方法"求解"。这类解可能通过微分学、概率论、代数方法或其他数学技术获得。解通常由一个或多个数值参数构成，这些参数称为系统的**性能度量（measures of performance）**。然而，许多真实世界系统极其复杂，其模型几乎不可能用数学方法求解。在这些情况下，可以采用基于计算机的数值仿真来模仿系统随时间的行为。从仿真中收集数据，就如同在观察一个真实系统一样。这些由仿真生成的数据被用来估计系统的性能度量。

本章首先讨论何时应当使用仿真、仿真的优点与缺点，以及仿真的实际应用领域。随后探讨系统与模型的概念。最后给出建立并使用系统仿真模型的步骤概要。

## 1 仿真何时是恰当的工具

专用仿真语言的出现、运算成本不断下降所带来的巨量计算能力，以及仿真方法学的进展，使仿真成为运筹学与系统分析中被最广泛使用和认可的工具之一。何种情形下适合使用仿真，已有众多作者作过讨论，从 Naylor 等人 [1966] 到 Shannon [1998]。仿真可用于以下目的：

1. 仿真使得对复杂系统内部交互作用、或复杂系统内某个子系统的交互作用进行研究、开展实验成为可能。
2. 信息、组织和环境方面的变更可以先进行仿真，从而观察这些改变对模型行为的影响。
3. 在设计仿真模型过程中所获得的知识，对提出针对所研究系统的改进建议极有价值。
4. 改变仿真输入并观察相应的输出，可以产生有价值的洞察：哪些变量最为重要，以及变量之间如何相互作用。
5. 仿真可以用作一种教学手段，以强化解析求解方法。
6. 仿真可以在实施之前对新的设计或政策进行试验，从而为可能发生的事情做好准备。
7. 仿真可以用来验证解析解。
8. 对机器的不同能力配置进行仿真，有助于确定其需求。
9. 为培训而设计的仿真模型，使学习成为可能，且无须付出在职培训的成本与干扰。
10. 动画可以展示系统的仿真运行过程，使方案得以可视化。
11. 现代系统（工厂、晶圆厂、服务组织等）极其复杂，其内部交互作用只能通过仿真来处理。

## 2 仿真何时不适用

本节基于 Banks 与 Gibson [1997] 的一篇文章，该文给出了十条用于判断何时不宜使用仿真的规则。第一条规则指出：当问题可以凭常识解决时，不应使用仿真。文中举了一个汽车牌照服务设施的例子，顾客随机到达，平均到达率为 100 人/小时，而平均服务率为 12 人/小时。为了确定所需服务人员的最小数量，并不需要仿真。只须计算 100/12 = 8.33，即可得出需要 9 名或更多服务人员的结论。

第二条规则指出：若问题可以用解析方法求解，则不应使用仿真。例如，在某些条件下，上述例子中的平均等待时间可以利用 www.bcnn.net 提供的工具求得。

第三条规则指出：若直接做实验的成本更低，则不应使用仿真。文中以一家快餐店汽车穿梭通道（drive-in）为例：为了确定增设一个接单点对顾客等待时间的影响，安排一个人使用手持终端并通过语音接单，其成本低于开展仿真研究。

第四条规则指出：若成本超过收益，则不应使用仿真。如第 12 节将要讨论的，完成一次仿真包含许多步骤，且每一步都必须扎实地完成。倘若一项仿真研究花费 2 万美元，而可能带来的节省仅为 1 万美元，那么仿真就不合适。

第五和第六条规则指出：若资源或时间不具备，则不应开展仿真。如果估计仿真成本为 2 万美元，而只有 1 万美元可用，那么建议不要贸然启动仿真研究。同理，若决策需要在两周内做出，而仿真要花一个月，那么也不建议开展仿真研究。

仿真需要数据，有时候需要大量数据。若没有数据可依，连估计值都没有，则不建议使用仿真。下一条规则涉及能否验证和确认模型。若时间不够，或人手不足，仿真就不适用。

如果管理者抱有不切实际的期望，过早要求过多东西，或者高估了仿真的能力，那么仿真也可能不适用。

最后，若系统行为过于复杂或无法定义，仿真就不适用。人类行为有时极其复杂，难以建模。

## 3 仿真的优点与缺点

仿真对客户而言具有直觉上的吸引力，因为它模拟了真实系统中发生的事情，或模拟了处于设计阶段的系统给人的感知。仿真的输出数据应当与从真实系统中可记录到的输出直接对应。此外，还可以在不依赖可疑假设（诸如"每个随机变量服从同一统计分布"这类数学可解模型的假设）的前提下，为系统建立仿真模型。由于这些以及其他原因，仿真常常成为问题求解的首选技术。

与优化模型不同，仿真模型是被"运行"（run）而非被"求解"（solved）的。给定一组特定的输入与模型特征，模型被运行，仿真行为被观察。这一改变输入与模型特征的过程，产生一组待评估的方案（scenario）。随后针对这些方案给出推荐方案，无论是对既有系统的分析还是对新系统的设计，最终都可将推荐的解决方案付诸实施。

仿真有许多优点，但也有一些缺点。Pegden、Shannon 与 Sadowski [1995] 列举了这些优缺点。部分优点如下：

1. 可以在不干扰真实系统日常运行的前提下，探索新的政策、作业流程、决策规则、信息流、组织流程等。
2. 可以对新的硬件设计、物理布局、运输系统等进行试验，而无须为购置它们而投入资源。
3. 关于某些现象如何发生或为何发生的假设，可以就其可行性进行检验。
4. 时间可以被压缩或拉伸，从而使所研究的现象得以加速或减速。
5. 可以获得关于变量之间相互作用的洞察。
6. 可以获得关于各变量对系统性能重要性的洞察。
7. 可以进行瓶颈分析，以发现在制品、信息、材料等被过度延误的环节。
8. 仿真研究有助于理解系统实际上是如何运行的，而不仅仅停留在人们认为系统如何运行的层面上。
9. "如果……会怎样"类问题可以得到解答。这在新系统设计中尤其有用。

部分缺点如下：

1. 建模需要专门训练。这是一门需要随时间、经由经验习得的技艺。而且，若两个模型由不同的行家分别构建，它们或许有相似之处，但完全相同的可能性极低。
2. 仿真结果可能难以解释。多数仿真输出本质上是随机变量（它们通常基于随机输入），因此很难分辨某个观察结果究竟源于系统内部的相互关系，还是源于随机性。
3. 仿真建模与分析可能既耗时又昂贵。在建模与分析上削减资源，可能导致仿真模型或分析不足以胜任任务。
4. 在某些情况下，即便解析解存在甚至更可取，人们仍会使用仿真，正如第 2 节所讨论的。这在某些排队系统的仿真中可能尤为明显，因为那里已有闭式排队模型（closed-form queueing model）可用。

为仿真辩护，针对上述四点缺点分别可以作如下回应：

1. 仿真软件厂商一直在积极开发包含若干模型的软件包，这些模型只需输入数据即可运行。这类模型有"模拟器"（simulator）或"模板"（template）这样的通用称谓。
2. 许多仿真软件厂商已在其软件包中开发了输出分析功能，用以进行非常细致的分析。
3. 今天的仿真比昨天做得更快，明天还会更快，这既得益于硬件的进步（可以快速运行方案），也得益于众多仿真软件包的进步。例如，某些仿真软件包含用于物料搬运建模的构件，可使用叉车、输送带和自动导引车（AGV）这类运输设备。
4. 闭式模型无法分析实践中遇到的大多数复杂系统。在本书两位作者多年的咨询实践中，没有遇到过一个可以用闭式解求解的问题。

## 4 应用领域

仿真的应用极为广泛。冬季仿真会议（Winter Simulation Conference, WSC）是了解仿真应用与理论最新进展的绝佳途径。会议还提供从入门到高阶的大量教程。WSC 由六个技术学会和美国国家标准与技术研究院（NIST）赞助。这六个技术学会分别是：美国统计学会（ASA）、美国计算机协会/仿真专业兴趣组（ACM/SIGSIM）、电气电子工程师学会系统、人类与控制论学会（IEEE/SMCS）、工业工程师学会（IIE）、运筹学与管理科学学会仿真分会（INFORMS-SIM），以及国际建模与仿真学会（SCS）。关于即将召开的 WSC 的信息可从 www.wintersim.org 获取。含完整论文的 WSC 会议文集可从 www.informs-cs.org/wscpapers.html 获取。下面按领域列出最近一次 WSC 的部分报告：

### 制造业应用

- 选择最合适瓶颈检测方法的方法论
- 船厂制造模型的自动化开发
- 制造工程过程中的仿真（Emulation）应用
- 面向提升制造绩效的优化维护设计
- 汽车零部件行业的生产率管理
- 日本汽车制造厂的产线设计

### 晶圆制造

- 批次分配到机台的范式转变
- 带有重入过程的多芯片封装装配线调度
- 封装—测试设施的执行层产能分配决策
- 借助回路控制管理在制品（WIP）与周期时间

### 业务流程处理

- 服务请求分派问题的新策略
- 流程执行监控与调整方案
- 零售门店的店内陈列
- 小型零售店的销售预测

### 建筑工程与项目管理

- 多个建筑工地有限弯曲机（bar-bender）的调度
- 重复性项目的施工
- 面向公路建设项目改进规划的交通组织
- 隧道竖井施工建模模板
- 隧道施工规划决策支持工具

### 物流、运输与配送

- 驳船运输系统的运营策略
- 生物恐怖事件下应急医疗物资的发放方案
- 复杂邮件运输网络的分析
- 提升集装箱码头性能
- 基于实时数据的场桥调度
- 航空运营中的单元装载设备库存
- 基于预测更新策略的库存系统
- 食品配送中心的泊位分配
- 驳船运输系统的运营策略

### 军事应用

- 多国战区内部物流配送
- 加拿大军队行动的可持续性前景研究
- 替换 MK19 自动榴弹发射系统的可行性研究
- 为非对称作战训练联合部队
- 多目标无人机任务规划
- 由作战需求驱动的联邦的发展

### 医疗保健

- 缩短预约提前期与降低患者爽约率的干预措施
- 支持智慧型思维以改善医院绩效
- 急诊室流程精益改进的验证
- 缓解急诊科拥挤状况
- 易腐药品的库存建模
- 门诊手术中心的实施
- 传染病控制政策
- 手术室与麻醉后资源的平衡
- 结直肠癌筛查的成本效益分析

### 其他应用

- 采用多重反馈控制的劳动力资源行动管理
- 分析球洞大小对推杆入洞的影响
- 粒子滤波在野火蔓延仿真中的应用
- 封闭生境中的捕食者—被捕食者关系
- 集约化仔猪生产系统
- 呼叫中心的实时延迟估计
- 某公立大学的大流行性流感应急预案

在 *ICS Newsletter*（ICS 通讯）上一篇关于仿真未来的文章（Banks, 2008）中，十六位仿真研究者——其中包括该领域知名的专家——就以下问题给出了各自的回答："从长远来看，比如说三年之后，我们将在仿真软件上看到哪些非凡的成果？"以下回答即出自该文：

- 在诸如基于智能体建模（agent-based modeling）这类全新思想与方法被软件厂商采纳之后（这将在几年内发生），仿真建模的进展将由计算能力的提升所驱动。例如，在某个时点上，我们将能够仿真超大型供应链和制造设施的详细运行过程。
- 仿真建模将更像一种"装配"活动，而非一种"从零开始建造"的活动。建模时将使用智能的、参数化的组件来拼装模型，而不是定义大量细化的逻辑。
- 在解决困难问题方面将取得进展。要为真正困难的问题提供工具，仿真软件开发者必须回到起点，认真重新思考一个根本问题："谁提供力量，谁提供远见？"把这两者的组合摆正，对进一步进步至关重要。当软件开发者试图同时提供力量与远见时，最终用户将被迫接受开发者的范式。这对简单问题很有效，对困难问题则效果不佳。对于所有真正困难的问题，用户对问题的了解往往比软件开发者更多显而易见的解决方案是：由开发者提供经过深思熟虑的真正原语集合，以及组合和打包这些原语的方式。
- 仿真软件将与控制软件更紧密地集成。
- 建模者将拥有一个在组织内跨应用共享的单一模型。
- 仿真应用将不仅限于设计类应用，还将用于组织内部的日常运营决策。
- 运行在强大服务器上的仿真建模将通过基于网页的接口来访问。
- 对人类活动更好、更方便的建模将成为可能（例如把基于智能体的模型嵌入离散事件模型之中）。
- 可以预期会有更多协作式的仿真项目开发。
- 将采纳接口标准并融入 Web 服务，使仿真软件不仅能作为一个整合的联邦相互协作，还能标准化并简化其他应用与仿真软件之间的接口方式。
- 解析求解技术（如线性规划）将与仿真能力相结合。
- 那些"非凡"的成果将源自计算技术其他领域和软件工程方面的进展。但没有什么能超越由 SIMULA 67 引入软件主流开发之中的面向对象范式，而 SIMULA 67 恰恰源自仿真软件这一社区。

## 5 仿真的若干近期应用

本节介绍仿真的若干近期应用。这些案例均见于所标注的文献中，您可以查阅这些案例并了解更多细节。

### 案例 1

- **标题：** "土耳其军队使用仿真对燃料供应系统建模与优化"
- **作者：** I. Sabuncuoglu, A. Hatip
- **报道于：** 2005 年 11—12 月，《Interfaces》
- **挑战：** 对土耳其军队的燃料供应系统进行分析。
- **技术方法：** (1) 在各种情形下测量既有系统与拟建系统的绩效；(2) 开发了一个基于遗传算法的仿真优化模型以优化系统性能；(3) 开展了大量仿真实验。
- **节约金额：** 数百万美元。

### 案例 2

- **标题：** "PLATO 帮助雅典夺得金牌：面向组织变革与资源管理的奥运会知识建模"
- **作者：** D.A. Beis, P. Poucopoulos, Y. Pyrgiotis, K.G. Zografos
- **报道于：** 2006 年 1—2 月，《Interfaces》
- **挑战：** 开发一套用于规划和设计场馆运营的系统化流程；建立一个内容丰富的模型库，可直接迁移给未来的奥运会组委会及其他体育赛事。
- **技术方法：** 基于仿真与其他决策分析方法的知识建模与资源管理技术及工具。
- **节约金额：** 超过 6970 万美元。

### 案例 3

- **标题：** "斯伦贝谢使用仿真进行陆地地震勘测的投标与实施"
- **作者：** P.W. Mullarkey, G. Butler, S. Gavirneni, D.J. Morrice
- **报道于：** 2007 年 3—4 月，《Interfaces》
- **挑战：** 快速且准确地度量地震勘测的成本。
- **技术方法：** 开发了一套仿真工具，用于评估队伍规模、勘测区域、地理区域和天气条件对勘测成本与工期的影响。
- **节约金额：** 每年 150 万至 300 万美元。

### 案例 4

- **标题：** "运筹学助力 Standard Register 公司重塑运营战略"
- **作者：** S.L. Ahire, M.F. Gorman, D. Dwiggins, O. Mudry
- **报道于：** 2007 年 11—12 月，《Interfaces》
- **挑战：** 在竞争激烈的传统印刷市场中，最小化提供有竞争力定价所需的总成本。
- **技术方法：** (1) 用回归分析估计成本与时间属性；(2) 用优化建模确定订单路由策略；(3) 对生产—配送网络进行仿真建模。
- **节约金额：** 每年超过 1000 万美元。

### 案例 5

- **标题：** "仿真为服务业实现需求驱动的劳动力调度器"
- **作者：** M. Zottolo, O.M. Ulgen, E. Williams
- **报道于：** 2007 年冬季仿真会议论文集，编者 S.G. Henderson, B. Biller, M.-H. Hsieh, J. Shortle, J.D. Tew, R.R. Barton。
- **实施方：** PMC（www.pmcorp.com）
- **客户：** 美国某大型家电公司。
- **挑战：** 由于排班过程耗时、依赖手工且效率低下，客户出现了工作组排班过量与不足、所提供服务水平不一致、现场管理人员不堪重负等问题。
- **技术方法：** (1) 建立仿真模型，依据一天中客户需求的变化和服务时间为不同工作组排班；(2) 确定作业标准；(3) 开发用于输入数据的接口以及排班的存储与发布功能；(4) 实施该调度工具并培训员工使用。
- **节约金额：** 估计为其美国工厂每年节约 8000 万美元。

### 案例 6

- **标题：** "仿真改进某家电生产商的产线末端分拣与物料搬运取货调度"
- **作者：** N. Kale, M. Zottolo, O.M. Ulgen, E. Williams
- **实施方：** PMC（www.pmcorp.com）
- **客户：** 美国某大型汽车租赁公司。*（原文如此印）*
- **报道于：** 2007 年冬季仿真会议论文集，编者 S.G. Henderson, B. Biller, M.-H. Hsieh, J. Shortle, J.D. Tew, R.R. Barton。
- **挑战：** 确定把若干种成品家电（SKU）分配到 12 条分拣通道的最有效方法，以尽量减少物料搬运作业和取货所需的叉车数量。由于产品组合波动大、SKU 数量众多、管理费用高昂，这一分拣任务及其相关的物料搬运任务复杂到值得采用离散事件仿真来分析。
- **技术方法：** 建立仿真模型，并就以下方面开展实验：(1) 不同 SKU 向不同通道的分配；(2) 取货策略与取货批量；(3) SKU 的批量规模。
- **节约金额：** 估计每年节约 10 万美元，而一次性资本投入仅 5 万美元。

## 6 系统与系统环境

要对一个系统建模，必须理解系统的概念以及系统边界（system boundary）的概念。**系统**（system）被定义为：一组以某种有规律的交互或相互依赖关系相结合、为达成某一目的而存在的对象。汽车制造生产系统即是一例：机器、零部件和工人沿装配线协同作业，生产出高质量的整车。

系统常常受到系统之外所发生变更的影响。这类变更被称为发生在**系统环境**（system environment）中 [Gordon, 1978]。在为系统建模时，必须界定系统与其环境之间的边界。这一决定可能取决于研究的目的。

以工厂系统为例，控制订单到达的因素可能被视为处于工厂影响之外，因而属于环境的一部分。然而，如果要考虑供给对需求的影响，工厂产出与订单到达之间就存在一种关系，而这种关系必须视为系统的活动。同样地，以银行系统为例，可能存在可支付最高利率的上限。对于研究单家银行而言，这将被视为环境施加的约束；但在研究货币法规对银行业影响的研究中，该上限的设定则属于系统的活动 [Gordon, 1978]。

## 7 系统的组成要素

为了理解与分析一个系统，需要定义若干术语。**实体**（entity）是系统中关注的对象；**属性**（attribute）是实体的性质；**活动**（activity）代表一段规定长度的时间。如果研究的是银行，那么顾客可能是实体之一，其支票账户余额可能是属性，而存款则是一项活动。

构成某项研究之系统的实体集合，可能只是另一项研究所针对的整个系统的一个子集 [Law, 2007]。例如，如果研究上述银行是为了确定办理存取款业务所需的柜台员人数，那么系统可以定义为银行中由普通柜台员和排队等待的顾客构成的那一部分。若研究目的扩展到确定所需的专职柜台员人数（用以开具银行本票、办理商业交易等），则系统的定义必须相应扩大。

系统的**状态**（state）被定义为：为在任意时刻描述系统、相对于研究目标而言所必需的那一组变量。在银行研究中，可能的状态变量包括忙碌的柜台员人数、排队等待或正在接受服务的顾客人数，以及下一位顾客的到达时间。**事件**（event）被定义为可能改变系统状态的一次瞬时发生。**内生**（endogenous）一词用于描述发生在系统内部的活动和事件；**外生**（exogenous）一词用于描述环境中那些影响系统的活动和事件。在银行研究中，顾客到达是外生事件，顾客服务完成则是内生事件。

表 1 列出了若干系统中实体、属性、活动、事件和状态变量的示例。这里仅给出系统组成部分的部分列表。除非明确研究目的，否则无法给出完整的清单。依据研究目的不同，系统中受到关注的方面也不同，从而可以补全这一组成要素清单。

**表 1 系统及其组成要素示例**

| 系统 | 实体 | 属性 | 活动 | 事件 | 状态变量 |
|---|---|---|---|---|---|
| 银行 | 顾客 | 支票账户余额 | 存款 | 到达；离开 | 忙碌的柜台员人数；等待的顾客人数 |
| 城际铁路 | 乘客 | 出发地；目的地 | 乘车行进 | 到达车站；到达目的地 | 各站等待的乘客人数；在途乘客人数 |
| 生产 | 机器 | 速度；产能；故障率 | 焊接；冲压 | 故障 | 机器状态（忙碌、闲置或停机） |
| 通信 | 消息 | 长度；目的地 | 传输 | 到达目的地 | 等待传输的消息数 |
| 库存 | 仓库 | 容量 | 取货 | 需求 | 库存水平；积压需求 |

![原书中的表 1](img/ch01/table1_system_components.jpg)

## 8 离散系统与连续系统

系统可以被划分为离散型或连续型。"在实践中，完全离散或完全连续的系统很少，但由于对大多数系统而言总有一种变化占主导地位，因此通常可以把一个系统归类为离散型或连续型" [Law, 2007]。**离散系统**（discrete system）是指状态变量仅在一组离散时间点上发生变化的系统。银行就是一个离散系统的例子：状态变量"银行内的顾客人数"仅在顾客到达或顾客服务完成时才发生变化。图 1 展示了顾客人数如何仅在离散时间点上发生变化。

![图 1 离散系统的状态变量](img/ch01/fig1_discrete_state.jpg)

**图 1 离散系统的状态变量。**

**连续系统**（continuous system）是指状态变量随时间连续变化的系统。水坝后的水位即是一例。在暴雨期间及暴雨结束后的若干时间内，雨水流入坝后的湖中。水从大坝中引出，用于防洪和发电。蒸发也会使水位下降。图 2 展示了这一连续系统的状态变量——坝后水位——的变化过程。

![图 2 连续系统的状态变量](img/ch01/fig2_continuous_state.jpg)

**图 2 连续系统的状态变量。**

## 9 系统的模型

有时我们希望研究一个系统，以理解其组成部分之间的关系，或预测该系统在新政策下将如何运行。研究系统时，有时可以直接对系统本身做实验。但这并不总是可行的。一个新系统可能尚不存在，它可能只处于假想状态或设计阶段。即便系统已经存在，对其做实验也可能不切实际。就银行而言，为了研究减少柜台员人数对排队长度的影响而削减人员，可能会激怒顾客，以致他们把账户转往竞争对手。因此，对系统的研究往往要借助系统的模型来完成。

我们曾承担过一项咨询业务：为西澳大利亚州一个重新设计的港口做仿真。对于一个造价 3 亿美元的装卸泊位而言，投入如此巨资后再发现该泊位不适合承担任务，是不明智的。

**模型**（model）被定义为：为了研究某系统而对该系统所作的表示。对于大多数研究而言，只需考虑系统中那些影响所研究问题的方面。这些方面就体现在系统的模型中；模型按其定义就是对系统的简化。另一方面，模型又应足够详细，以便能对真实系统得出有效的结论。随着研究目的的变化，同一系统可能需要不同的模型。

正如系统的组成要素包括实体、属性和活动一样，模型也由这些要素来表示。不过，模型中只包含与研究相关的那些组成要素。

## 10 模型的类型

模型可以分为数学模型和物理模型。**数学模型**（mathematical model）使用符号记法和数学方程来表示系统。**仿真模型**（simulation model）是系统的一类特定数学模型。**物理模型**（physical model）是某个实物放大或缩小后的版本，例如放大的原子模型或缩小版的太阳系模型。

仿真模型还可以进一步分类为静态或动态、确定性或随机、离散或连续。**静态仿真模型**（static simulation model）有时也称为蒙特卡罗仿真（Monte Carlo simulation），表示系统在某一特定时间点的状态。**动态仿真模型**（dynamic simulation model）表示系统随时间的变化。例如，对银行从上午 9:00 到下午 4:00 的仿真就是一个动态仿真的例子。

不含随机变量的仿真模型被称为**确定性**（deterministic）的。确定性模型有一组已知的输入，从而产生一组唯一确定的输出。如果牙科诊所的所有病人都按预约时间准时到达，那么到达就是确定性的。**随机仿真模型**（stochastic simulation model）则含有一个或多个随机变量作为输入。随机输入导致随机输出。由于输出是随机的，因此只能被看作模型真实特性的估计值。对银行的仿真通常涉及随机的到达间隔时间和随机的服务时间。因此，在随机仿真中，输出度量——平均等待人数、顾客平均等待时间——必须被当作系统真实特性的统计估计来处理。

离散系统与连续系统已在第 7 节中定义。离散模型与连续模型的定义方式与此类似。然而，离散仿真模型并不总是用来模拟离散系统，连续仿真模型也不总是用来模拟连续系统。储罐和管道尽管我们知道流体流动是连续的，也可能被离散地建模。此外，仿真模型可以是混合型的，同时兼具离散与连续成分。究竟采用离散、连续（或者离散与连续兼有）的仿真模型，取决于系统的特征和研究目标。因此，如果每条消息的特征和移动都显得重要，通信信道就可以离散地建模；反之，若关注的是消息在信道上的总流量，那么用连续仿真来建模该系统可能更合适。本书所重点讨论的模型是动态的、随机的和离散的。

## 11 离散事件系统仿真

本书讨论的是离散事件系统仿真（discrete-event system simulation）。离散事件系统仿真是对状态变量仅在一组离散时间点上发生变化的系统进行建模。仿真模型采用数值方法而非解析方法进行分析。**解析方法**（analytical method）运用数学的演绎推理来"求解"模型。例如，可以使用微分学计算某些库存模型的最小成本策略。**数值方法**（numerical method）则运用计算过程来"求解"数学模型。对于采用数值方法的仿真模型而言，模型是被"运行"而非被"求解"的——也就是说，依据模型假设生成系统的一段人造历史，并收集观察值以供分析，从而估计真实系统的性能度量。真实世界的仿真模型相当庞大，所存储和操作的数据量巨大，因此这类运行通常要借助计算机来完成。

概括地说，本书讨论的是离散事件系统仿真，其中所关注的模型采用数值方法进行分析，通常借助计算机完成。

## 12 仿真研究的步骤

图 3 给出了一组步骤，用以指导建模者开展周密而可靠的仿真研究。其他文献中也有类似的图示与关于步骤的讨论 [Shannon, 1975; Gordon, 1978; Law, 2007]。图 3 中各符号旁的编号对应正文中更为详细的讨论。仿真研究的步骤如下：

![图 3 仿真研究的步骤](img/ch01/fig3_simulation_steps.jpg)

**图 3 仿真研究的步骤。**

### 1. 问题表述（Problem formulation）

每项研究都应当以问题的陈述开始。如果问题陈述由决策者或遇到问题的人给出，分析人员必须确保对所描述的问题有清晰的理解。如果问题陈述由分析人员拟定，那么让决策者理解并认可这一表述就很重要。尽管图 3 中未予显示，但有时随着研究的推进，问题必须重新表述。在许多情形下，决策者和分析人员早在问题的性质尚未明确之前，就已意识到问题的存在。

### 2. 确定目标与总体项目计划（Setting of objectives and overall project plan）

目标指明仿真要回答的问题。在这一点上，应当判断：对于所表述的问题和所陈述的目标而言，仿真是否为恰当的方法学。假定已确定仿真是恰当的，那么总体项目计划应当包括对待考察备选系统的说明，以及评估这些备选系统有效性的方法。它还应当包括研究计划：涉及人员数量、研究成本、完成各阶段工作所需的天数，以及每一阶段结束时期望得到的结果。

### 3. 模型概念化（Model conceptualization）

构建系统模型大概是艺术与科学的结合。Pritsker [1998] 对这一步做了详尽的讨论。"尽管不可能给出一套指令，以确保在每一种情况下都能构建出成功而恰当的模型，但仍有一些可以遵循的一般性准则" [Morris, 1967]。建模艺术因以下能力而提升：抽象问题的本质特征，选择并修正刻画系统的基本假设，然后丰富和细化模型，直至得到一个有用的近似。因此，最好从一个简单的模型开始，逐步构建到更高的复杂度。不过，模型的复杂度不必超过达成模型既定目的所需的程度。违反这一原则只会增加建模和计算机方面的开销。模型与真实系统之间并不需要一一对应，只需要真实系统的精髓即可。

建议让模型使用方参与模型概念化工作。让模型使用方参与，既能提升所建模型的质量，也能增强模型使用方对模型应用的信心。（不过，只有对真实系统——而非教科书习题——的亲身经验，才能"教会"人们建模的艺术。）

### 4. 数据收集（Data collection）

模型的构建与所需输入数据的收集之间始终存在相互影响 [Shannon, 1975]。随着模型复杂度发生变化，所需的数据元素也会随之变化。此外，由于数据收集在完成一次仿真所需的总时间中占有很大比重，因此必须尽早开始，通常要与建模的早期阶段同步进行。

研究目标在很大程度上决定了要收集哪些数据。例如在银行研究中，若希望了解柜台员人数变化时排队长度的变化，那么所需的数据类型包括：到达间隔时间的分布（按一天中不同时段分别统计）、柜台员的服务时间分布，以及不同条件下排队长度的历史分布。最后一类数据将用于验证仿真模型。（参见 Henderson [2003] 的精彩讨论。）

### 5. 模型翻译（Model translation）

大多数真实世界的系统所导出的模型都需要大量的信息存储和计算，因此必须把模型录入计算机可识别的格式中。我们使用"程序"这一术语，尽管在许多情形下，或许几乎不需要真正的编码就能达成预期结果。建模者必须决定是用仿真语言（如 GPSS/H™）为模型编写程序，还是使用专用的仿真软件。在制造和物料搬运领域，有 AnyLogic®、Arena®、AutoMod™、Enterprise Dynamics®、Extend™、Flexsim、ProModel® 和 SIMUL8® 等软件。仿真语言强大而灵活。然而，若问题可用仿真软件解决，模型开发时间将大幅缩短。此外，多数仿真软件包都增加了增强其灵活性的功能，尽管灵活性的差异很大。

### 6. 验证了吗？（Verified?）

验证（verification）针对的是为仿真模型所编制的计算机程序。计算机程序的运行是否正确？对于复杂模型，要在不做大量调试的情况下完整成功地翻译模型是困难的，甚至几乎不可能；如果模型的输入参数和逻辑结构在计算机中得到了正确表示，验证即告完成。就大部分情况而言，完成这一步所依据的是常识。（Sargent [2007] 对此有专门讨论。）

### 7. 确认了吗？（Validated?）

确认（validation）通常通过模型的校准（calibration）来实现——这是一个迭代过程：把模型与实际系统行为作比较，利用两者之间的差异以及由此获得的见解来改进模型。反复进行这一过程，直到模型精度被认为可以接受。在前面提到的银行例子中，我们收集了当前条件下排队长度的数据。仿真模型能否复现这一系统度量？这是确认的一种手段。（Sargent [2007] 对此有专门讨论。）

### 8. 实验设计（Experimental design）

必须确定要仿真的备选方案。通常，关于仿真哪些备选方案的决策，会取决于已完成并分析过的运行结果。对每一个被仿真的系统设计，都需要就以下事项作出决策：初始化期的长度、仿真运行的长度，以及每次运行所要做的重复次数。（Sanchez [2007] 对此有非常详尽的讨论。）

### 9. 生产性运行与分析（Production runs and analysis）

生产性运行及其后续分析，用于估计被仿真系统设计的性能度量。（可辅助完成这一步的软件包括 AutoStat（在 AutoMod 中）、OptQuest（在若干仿真软件中）以及 SimRunner（在 ProModel 中）。）

### 10. 还需要更多运行吗？（More runs?）

在分析了已完成的运行之后，分析人员据此判断是否需要追加运行，以及这些追加实验应遵循何种设计。

### 11. 文档与报告（Documentation and reporting）

文档分为两类：程序文档与进展文档。**程序文档**（program documentation）的必要性体现在许多方面。如果该程序将由同一批或不同的分析人员再次使用，那么理解程序如何运行可能是必要的。这将建立对程序的信心，使模型使用方和决策者能够基于分析结果作出决策。同样，如果程序将由同一名或另一名分析人员修改，充分的文档会极大地方便这一工作。分析人员一次因文档不充分而吃了苦头，通常就足以让分析人员确信这一重要步骤的必要性。为程序编写文档还有一个理由：模型使用方可以随时更改参数，从而了解输入参数与输出性能度量之间的关系，或发现能"优化"某项输出性能度量的输入参数。

Musselman [1998] 讨论了进展报告（progress report），它提供仿真项目重要的书面历史。项目报告给出已完成工作和已作决策的时间脉络，这极有助于使项目保持在正确轨道上。Musselman 建议频繁出具报告（至少每月一次），使得即便那些未参与日常工作的人也能及时了解情况。他人的这种了解常常能促进项目的成功完成，因为能及早暴露误解，而此时问题尚易解决。Musselman 还建议维护一份项目日志（project log），以全面记录工作成果、变更请求、关键决策以及其他重要事项。

在交付物方面，Musselman 建议频繁产出阶段性成果。这些成果未必都是重大成就的产物。他的座右铭是："与其只有一个绝对的截止期限，宁可设置许多中间里程碑。"最终报告之前的可能产出包括模型说明书、原型演示、动画、培训结果、中期分析、程序文档、进展报告和演示汇报。他建议在项目生命周期内对这些交付物作出合理的时间安排。

所有分析结果都应当在最终报告中清楚而简洁地报告。这将使模型使用方（此时即决策者）能够复核最终的问题表述、所涉及的备选系统、比较这些备选系统所依据的准则、实验结果，以及针对该问题所推荐的解决方案。此外，如果决策需要在更高层级上得到论证，最终报告还应当为模型使用方／决策者提供一种认证载体，并提升模型及建模过程的可信度。

### 12. 实施（Implementation）

实施阶段能否成功，取决于前十一个步骤执行得如何好，也取决于分析人员在整个仿真过程中让最终模型使用方参与的充分程度。如果模型使用方在整个建模过程中都参与其中，并且理解模型及其输出的性质，那么实施有力推进的可能性就会增大 [Pritsker, 1995]。反之，如果模型及其背后的假设没有得到恰当的沟通，那么无论仿真模型本身是否有效，实施都可能受到影响。

图 3 所示的仿真建模过程可以分解为四个阶段。第一阶段包括步骤 1（问题表述）和步骤 2（确定目标与总体设计），是一段发现或定向时期。最初的问题陈述通常相当"模糊"，最初的目标通常不得不重新设定，最初的项目计划通常也必须微调。这些重新校准与澄清可能发生在本阶段内，也可能在另一个阶段之后或进行之中发生（例如，分析人员可能不得不重新启动整个过程）。

第二阶段与模型构建和数据收集相关，包括步骤 3（模型概念化）、步骤 4（数据收集）、步骤 5（模型翻译）、步骤 6（验证）和步骤 7（确认）。各步骤之间需要持续相互配合。在此阶段将模型使用方排除在外，可能会在实施时带来严重后果。

第三阶段涉及模型的运行，包括步骤 8（实验设计）、步骤 9（生产性运行与分析）和步骤 10（是否需要更多运行）。本阶段必须针对仿真模型制定一个周密的实验计划。事实上，离散事件随机仿真就是一次统计实验。输出变量是含有随机误差的估计值，因此需要进行恰当的统计分析。这种思想与那种只做一次运行、就从这一个数据点得出推断的分析人员形成了鲜明对照。

第四阶段即实施阶段，涉及步骤 11（文档与报告）和步骤 12（实施）。能否成功实施取决于模型使用方的持续参与，以及流程中每一步的顺利完成。整个流程中也许最关键的一点是步骤 7（确认），因为一个未通过确认的模型将导致错误的结果，而这些结果一旦付诸实施，可能既危险又昂贵，甚至两者兼有。

## 参考文献

BANKS, J. [2008], "Some Burning Questions about Simulation." *ICS Newsletter*, INFORMS Computing Society, Spring.

BANKS, J., and R. R. GIBSON [1997], "Don't Simulate When: 10 Rules for Determining when Simulation Is Not Appropriate," *IIE Solutions*, September.

GORDON, G. [1978], *System Simulation*, 2d ed., Prentice-Hall, Englewood Cliffs, NJ.

HENDERSON, S. G. [2003], "Input Model Uncertainty: Why Do We Care and What Should We Do About It?" in *Proceedings of the Winter Simulation Conference*, eds. S. Chick, P. J. Sánchez, D. Ferrin, and D. J. Morrice, New Orleans, LA, Dec. 7–10, pp. 90–100.

KLEIJNEN, J. P. C. [1998], "Experimental Design for Sensitivity Analysis, Optimization, and Validation of Simulation Models," in *Handbook of Simulation*, ed. J. Banks, John Wiley, New York.

LAW, A. M. [2007], *Simulation Modeling and Analysis*, 4th ed., McGraw–Hill, New York.

MORRIS, W. T. [1967], "On the Art of Modeling," *Management Science*, Vol. 13, No. 12.

MUSSELMAN, K. J. [1998], "Guidelines for Success," in *Handbook of Simulation*, ed. J. Banks, John Wiley, New York.

NAYLOR, T. H., J. L. BALINTFY, D. S. BURDICK, and K. CHU [1966], *Computer Simulation Techniques*, Wiley, New York.

PEGDEN, C. D., R. E. SHANNON, and R. P. SADOWSKI [1995], *Introduction to Simulation Using SIMAN*, 2d ed., McGraw–Hill, New York.

PRITSKER, A. A. B. [1995], *Introduction to Simulation and SLAM II*, 4th ed., Wiley & Sons, New York.

PRITSKER, A. A. B. [1998], "Principles of Simulation Modeling," in *Handbook of Simulation*, ed. J. Banks, John Wiley, New York.

SANCHEZ, S.R. [2007], "Work Smarter, Not Harder: Guidelines for Designing Simulation Experiments," in *Proceedings of the 2007 Winter Simulation Conference*, eds. S. G. Henderson, B. Biller, M.-H. Hsieh, J. Shortle, J. D. Tew, and R. R. Barton, Washington, DC, Dec. 9–12, pp. 84–94.

SARGENT, R.G. [2007], "Verification and Validation of Simulation Models," in *Proceedings of the 2007 Winter Simulation Conference*, eds. S. G. Henderson, B. Biller, M.-H. Hsieh, J. Shortle, J. D. Tew, and R. R. Barton, Washington, DC, Dec. 9–12, pp. 124–137.

SHANNON, R. E. [1975], *Systems Simulation: The Art and Science*, Prentice-Hall, Englewood Cliffs, NJ.

SHANNON, R. E. [1998], "Introduction to the Art and Science of Simulation," in *Proceedings of the Winter Simulation Conference*, eds. D. J. Medeiros, E. F. Watson, J. S. Carson, and M. S. Manivannan, Washington, DC, Dec. 13–16, pp. 7–14.

## 习题

1. 为下列系统各列举若干实体、属性、活动、事件和状态变量：
   - (a) 一家自助餐厅
   - (b) 一家杂货店
   - (c) 一家自助洗衣店
   - (d) 一家快餐店
   - (e) 一家医院急诊室
   - (f) 一家拥有 10 辆出租车的出租车公司
   - (g) 一条汽车装配线

2. 考虑图 3 所示的仿真过程。
   - (a) 通过合并相似的活动，至少减少两个步骤。请给出理由。
   - (b) 通过拆分现有步骤或对现有步骤加以细化，至少增加两个步骤。请给出理由。

3. 拟对某大型交通路口进行仿真，目的是改善当前的交通流。请针对图 3 仿真过程中的步骤 1 和步骤 2，按复杂度递增的顺序给出三个迭代版本。

4. 拟对烹制一顿意大利面进行仿真，以确定一个人应当在什么时间开始动手，才能在晚上 7:00 前把饭菜端上餐桌。请从网上下载一份意大利面的食谱（或向朋友或亲戚索取食谱）。尽可能地追踪你认为在图 3 仿真过程的数据收集阶段所需要进行的内容，以便完成一次包含食谱中每个步骤的仿真。该系统中的事件、活动和状态变量分别是什么？

5. 使用你的支票簿所涉及的事件和活动有哪些？

6. 第 1 节中给出了大量使用仿真的理由。但可能还有其他理由。请查阅当届 WSC 论文集中的应用，看能否发现其他理由。（WSC 论文集见 www.informs-cs.org/wscpapers.html）

7. 在 www.informs-cs.org/wscpapers.html 可获取的当届 WSC 论文集中，选取一篇与你所学专业或兴趣领域相关的仿真应用文章，撰写报告，说明作者是如何完成图 3 所列各步骤的。

8. 从习题 7 的网址获取一份近期的 WSC 论文集，就你感兴趣的领域，报告其中讨论的不同应用。

9. 从习题 7 的网址获取一份近期的 WSC 论文集，报告你所发现的最不寻常的应用。

10. 找出第 12 节中的某一个案例，描述其所采用的方法。

11. 访问冬季仿真会议网站 www.wintersim.org，回答下列问题：
    - (a) 上一届 WSC 提供了哪些高阶教程，或下一届 WSC 计划提供哪些高阶教程？
    - (b) 下一届 WSC 将于何时何地举办？

12. 访问冬季仿真会议网站 www.wintersim.org，回答下列问题：
    - (a) 迄今规模最大（按参会人数计）的一届 WSC 是哪一届，共有多少人参加？
    - (b) 自 WSC 创办以来，哪一个公历年份没有召开会议？
    - (c) 自 WSC 创办以来，两次会议之间最长的时间间隔是多久？
    - (d) 从第 25 届 WSC 开始，你能否看出会议举办地点的某种规律？

13. 向 WSC 提交论文的流程是怎样的？

14. 将近期 WSC 的参展商名单按"软件供应商"和"其他"两类进行划分。

15. WSC 基金会的宗旨与历史是什么？

16. 使用你常用的搜索引擎，在网上搜索 'discrete event simulation output analysis'，并就搜索结果撰写报告。

17. 使用你常用的搜索引擎，在网上搜索 'supply chain simulation'，并就搜索结果撰写报告。

18. 使用你常用的搜索引擎，在网上搜索 'web based simulation'，并就搜索结果撰写报告。
