OMSCS-SIM课程笔记01-Whirlwind Tour of Simulation

 

这个系列是Gatech OMSCS 仿真和建模课程(ISYE 6644: Simulation and Modeling for Engineering and Science)的同步课程笔记。课程内容涉及计算机模拟在统计分析和建模中的应用,本节主要介绍计算机模拟的基本概念。

Models

目前计算机仿真在各行各业都有大量的应用,要进行计算机仿真我们需要一个模型(model)。所谓”模型”是对客观现实世界某个过程的抽象,根据过程的特点我们可以把模型分为离散和连续模型(discrete vs. continuous)、随机和确定模型(stochastic vs. deterministic)以及动态和静态模型(dynamic vs. static)。在本课程中我们会重点关注离散、随机而且动态的模型。

同时要求解一个模型可以考虑使用解析解(analytic methods)数值解(numerical methods)或是仿真解(simulation methods)等不同方法。对于确定性的模型,解析解和数值解都有非常多的应用。但对于有随机性的模型则只能通过仿真的方式进行求解。

Simulation

计算机仿真是对现实世界某个过程进行模拟,对于动态的系统还往往需要生成人工的历史数据才能进行后面的推断。目前计算机仿真在工业工程、运筹学、管理科学等领域都有着重要的应用。研究者和管理人员会通过计算机仿真来求解复杂系统下的各种问题。

和传统方法相比,计算机仿真更便于去回答各种”如果”问题,因此它在系统设计和优化中有着大量的应用。当然计算机仿真也具有一些缺陷,比如说对系统进行建模往往不是那么的容易,而且仿真过程一般会比较费时,更重要的是仿真的结果都具有随机性,如何去理解和解释仿真的结果对于解答生产生活中的问题是十分重要的。

Applications

计算机仿真在现实生活中已经有着大量的应用,其中最常见的是解决各种“排队”问题(queueing problems)。实际上像餐厅的供应、交通堵塞、医疗资源的分配等问题都可以建模成一个排队问题,通过计算机仿真来求解排队问题对于企业资源分配以及策略制定都有着可观的现实意义。

供应链是计算机仿真的另一个重要应用领域。大型现代企业的供应链非常复杂,在生产中的每一环都会和前一节以及后一节形成网络状的连接形式,因此几乎无法通过解析的形式进行计算。而计算机仿真对于分析和预测供应链中的各种问题提供了有效的计算方法,因此它也是解决现代供应链问题的主要工具。

Generating Randomness

本节课还介绍了一些产生随机性的方法。在进行仿真时我们需要生成各种各样的随机数,其中最基本的任务是生成(0, 1)区间上的均匀分布随机数。我们可以通过一个确定性的算法来完成这种任务:

  1. 选取一个随机种子作为初始值$X(0)$
  2. 进行递推$X(i) = a X(i-1) \% m$
  3. 计算随机数$U(i) = X(i) / m$

不难发现上述算法的效果取决于随机种子以及参数$a$和$m$的取值。实际上这些参数需要经过仔细的挑选才能够获得比较好的随机数。一个现实的例子是:

  1. $X(i) = 16807 X(i-1) \% (2^{31}-1)$
  2. $U(i) = X(i) / (2^{31}-1)$

在均匀分布的基础上我们可以构造出其它分布的随机数。比如说对于参数为$\lambda$的指数分布,随机数可以构造为:

\[\text{Exp} (\lambda) \sim -\frac{1}{\lambda} \ln (U(i))\]

实际上上式是基于逆变换的随机数转换方法。对于其它类型的随机变量还有更加复杂的生成算法,这些算法会在后面陆续介绍。

Simulation Output Analysis

在计算机仿真中由于模型具有随机性我们获得的仿真结果也是随机变量,而且仿真的结果也不一定满足相互独立的,这就导致我们可能无法通过常用的统计量来解释和分析仿真的结果。

一般来说我们可以把仿真分成两种类型:关注模型短期行为的terminating simulation以及关注模型长期行为的steady-state simulation。对于terminating simulation我们可以利用独立重复试验来进行分析,即通过大量相互独立的试验获得相应的仿真结果,然后再结合各种统计量进行分析;而对于steady-state simulation则需要关注初始化的问题,即收集样本前我们需要首先让模型运行一段时间达到稳态,否则收集到的样本可能不能代表模型的长期性质,在此基础上还有各种各样的技术去分析收集到的数据。