第1章系统仿真基础 1.1系统仿真的基本概念 1.1.1系统与模型 在现实生活中,人们往往要对一些系统加以研究,如生产制造系统、物流系统、服务系统等,以评估或改进系统的性能。这里的系统是指为了完成某一目标而由一些相互作用的元素组成的整体(Schmidt and Tayor,1970)。例如,一个制造工厂系统,含有机器、操作员、运输小车、传送带以及存储空间等元素,这些元素相互作用,最终目标是产出产品。 许多情况下,难以直接对实际系统本身加以实验研究。例如,对一个运营中的集装箱码头,要对其不同的布局进行实验研究,以找出最优布局方案,是不可能真的在实际系统上进行研究的(成本过于昂贵)。而对一些计划建造的设施,由于实际设施尚不存在,也无法对实际系统进行研究。这时,只能建立一个实际系统的模型作为替代品来研究有关的系统。 模型是系统各元素交互关系的简化表示,这些关系包括因果关系、流程关系以及空间关系等。模型可以分类为物理模型和逻辑模型(凯尔顿等,2007),而逻辑模型又可以进一步分类为符号模型、解析模型和仿真模型,如图1-1所示。 图1-1模型分类 物理模型是实际系统的物理复制品或按比例缩放的实物模型,也称实体模型。例如,有人在仓库中建立了一个同比例的快餐店实物模型,用于对各种服务程序进行实验研究。人们还建立了物料搬运系统的实物模型,实际上就是各种设施的微缩版,可用于研究设施布局、车辆路径以及运输装置等各种不同方案对系统性能的影响。尽管物理模型在许多领域都有重要应用,但不是本书的讨论主题。 逻辑模型是指以图符、数学方程式或计算机程序等表达的反映现实系统要素间逻辑关系的模型。逻辑模型可以进一步分类为符号模型、解析模型和仿真模型。 (1) 符号模型是利用一些图形符号,诸如矩形、箭头等,来描述一系列活动或要素间相互关系的模型。常见的符号模型有流程图、设施布置图等。符号模型的优点是容易制作、易于理解。符号模型的缺点是无法利用它们对系统性能进行量化分析,另外,符号模型也无法把握系统动态行为。 (2) 解析模型(又称分析性模型)是一种利用数学方程式(含不等式)表达系统要素间关系的模型。它可以是简单的方程式,也可以是复杂的数学规划模型(由一个目标函数和一组约束方程组成)。解析模型的优点是形式规范,通常能够求得确定的最优解; 但也有缺点,如解析模型通常只能解决静态的、规范性的、确定性的或简单机率性的问题,难以解决复杂动态随机系统问题。 (3) 仿真模型指利用计算机系统建立的模拟真实系统运行的模型。仿真模型可以模拟和研究复杂动态随机系统。通过仿真模型进行实验通常比用实际系统进行实验成本低得多。 1.1.2仿真及其分类 仿真(计算机仿真、系统仿真)就是建立计算机仿真模型模拟现实的动态系统,在仿真模型上执行各种实验,以评估和改善系统性能。仿真可以根据所模拟的系统特性分类为连续系统仿真、离散事件系统仿真和混合系统仿真。 (1) 连续系统仿真: 在这种仿真中,反应系统状态的状态变量取值随时间连续变化。如温控系统的温度是连续变化的,它是一个连续系统,对其进行的仿真即为连续系统仿真。 (2) 离散事件系统仿真: 在这种仿真中,反应系统状态的状态变量取值随一个个离散事件的发生而在特定的时间点离散变化,系统的状态变化是由(往往是随机发生的)事件驱动的。例如,银行排队系统中状态变量有顾客排队长度、服务台忙闲状态等,它们都是随顾客到达、顾客服务完成离开等事件离散变化的,因此,银行排队系统是离散系统,对其进行的仿真即为离散事件系统仿真,或简称离散事件仿真、离散系统仿真。 在上面的定义中,系统状态是指与研究目的相关的刻画系统特征的状态变量取值集合。图1-2展示了连续系统和离散系统状态变量取值是如何随时间变化的。 图1-2离散系统和连续系统 (3) 混合系统仿真: 所模拟的系统既有连续的部分,也有离散的部分。 由于绝大多数服务系统、物流系统、生产制造系统都是离散系统,所以本书主要研究离散事件系统仿真。 1.2可视化仿真软件包 1.2.1仿真使用的软件工具 可以采用多种软件工具建立仿真模型,这些工具总结如下。 (1) 通用程序设计语言: VB,C,C++,Fortran等; (2) 通用仿真语言: GPSS,SIMSCRIPT,SLAM,SIMAN等; (3) 电子表格及其插件: Excel,@Risk(Excel插件),Crystal Ball(Excel插件)等; (4) 可视化仿真软件包: Flexsim,AutoMod,Plant Simulation,Extendsim,Arena,Simio,ProModel,Simul8,Witness,Anylogic等。 最初,人们使用C,Fortran等通用语言开发仿真模型,工作量非常大,而且非常烦琐。之后,出现了专用的仿真语言,采用这种语言开发仿真模型大大降低了开发难度和工作量,但是仍然比较烦琐。随着电子表格软件统计功能的发展,电子表格成为很好的仿真平台,可以利用它及其插件较为方便地开发一些仿真模型。 而使得仿真走向广泛应用和普及的应该是可视化仿真软件包的出现,利用这些软件包,可以非常方便地利用图标以可视化方式构件仿真模型,大大提高了建模效率,降低了建模难度。 1.2.2常见可视化仿真软件包 现代可视化仿真软件包通常具有友好的图形化用户界面、利用形象的模块搭积木式地建模、支持2D和(或)3D动画,另外还提供输入数据分布拟合工具、结果输出等模块,这些功能支持大大简化了建模过程。 目前,市场上已有大量商品化的可视化仿真软件包,它们面向制造系统、物流系统、服务系统等领域,成为提高系统性能、提升企业竞争力的有效工具。下面简要介绍几种常用仿真软件(按字母顺序)。 1. Arena Arena是美国Rockwell Automation公司的通用仿真软件产品,它提供可视化、交互式的集成仿真环境,可以与通用编程语言(如Visual Basic,Fortran和C/C++等)编写的程序连接运行。Arena提供内嵌Visual Basic编程环境Visual Basic for Application(VBA),用户可以利用Visual Basic Editor编写VB代码,灵活定制各种复杂逻辑。图1-3所示为Arena仿真软件的界面。 图1-3Arena仿真软件的界面 2. AutoMod AutoMod是Brooks Automation公司(该公司现已被Applied Materials公司收购)的产品。它由仿真模块(AutoMod)、试验及分析模块(AutoStat)、三维动画模块(AutoView)等部分组成,3D动画功能较强,适合于大规模复杂系统的计划、决策及其控制试验。 AutoMod采用内置模板技术,提供物流及制造系统中常见的建模元素,如运载工具(vehicle)、传送带(conveyor)、自动化存取系统(automated storage and retrieval system,AS/RS)、桥式起重机(bridge crane)、仓库(warehouse)、堆垛机(lift truck)、自动引导小车(automated guided vehicle,AGV)、货车(truck)、小汽车(car)等,AutoMod软件的主要应用对象是制造系统以及物料搬运系统,图1-4所示为AutoMod仿真软件的界面。 图1-4AutoMod仿真软件的界面 3. ExtendSim ExtendSim是美国Imagine That公司的产品,它采用C语言开发,可以对离散事件系统和连续系统进行仿真,且具有较高的灵活性和可扩展性。ExtendSim不仅能够对实体流动进行可视化建模,而且对数据流动和控制结构也可以进行可视化建模而无需编写程序,这使得ExtendSim非常容易学习,对初学者的编程能力要求不高,其界面如图1-5所示。 图1-5ExtendSim仿真软件的界面 4. Flexsim Flexsim是美国Flexsim公司的产品,它采用C++语言开发,采用面向对象编程和Open GL技术,提供三维图形化建模环境,可以直接建立三维仿真模型,支持离散系统和连续流体系统建模。 Flexsim提供了众多的对象类型,如操作员、传送带、叉车、仓库、储罐、货架等,通过设置对象参数,可以快速高效地构建制造、物料搬运、服务等系统模型。图1-6所示为Flexsim仿真软件的界面。 图1-6Flexsim仿真软件的界面 Flexsim可以直接导入3D Studio、VRML、DXF、STL和SKP(仅Flexsim 5.0及以上版本支持SKP文件导入)等3D图形文件。Flexsim还内置虚拟现实的浏览窗口,让用户添加光源、雾以及虚拟现实立体技术。 5. ProModel ProModel是由美国PROMODEL公司开发的离散事件系统仿真软件,用于生产、物流和服务系统建模。ProModel提供二维图形化建模及动态仿真环境,并可以转化为三维场景。ProModel中的主要建模元素包括实体(entity)、位置(location)、资源(resource)、到达(arrivals)、加工处理(processing)、路由(routing)、班次(shift)、路径(path networks)等。ProModel仿真软件的界面如图1-7所示。 图1-7ProModel仿真软件的界面 6. Witness Witness是英国Lanner集团开发的通用仿真软件,支持离散事件系统和连续流体系统建模。Witness提供了丰富的模型单元,包括物理单元和逻辑单元。其中,物理单元用于描述系统中的工具、设备等,如工件(part)、缓存(buffer)、机器(machine)、传送带(conveyor)、操作工(labor)、处理器(processor)、容器(tank)、管道(pipe)等; 逻辑单元用于表示系统中对象的特性及其逻辑关系等,如属性(attribute)、变量(variable)、分布(distribution)、班次(shift)、文件(file)、函数(function)等。图1-8所示为Witness仿真软件的界面。 图1-8Witness仿真软件的界面 实际上,市场上的仿真软件非常多,Anylogic,Quest,eM-Plant(现已改名为Plant Simulation),Simul8等都是非常好的产品,读者可以根据需要进行选择。 1.3仿真项目研究主要步骤 仿真项目研究通常包含以下主要步骤。 (1) 定义仿真研究的目的。通过明确仿真研究的目的可以使未来进行系统调研和建模时抓住重点,而不是面面俱到、浪费时间,甚至偏离系统研究方向。 (2) 收集数据、建立概念模型。研究现有系统(或设计中的系统),收集相关数据,理解系统运作流程,在此基础上,建立系统的概念模型,概念模型通常以图形表示系统运作流程,便于理解和交流。 (3) 建立计算机仿真模型。一旦概念模型通过审核,就可以利用仿真软件根据概念模型建立计算机仿真模型。 (4) 模型校核(verification)与验证(validation)。模型校核是考查计算机仿真模型是否按照预先设想的情况运行,是否真实描述了概念模型。通俗地讲,就是找出模型中的各种语法及逻辑错误。可以考察输入参数在各种极端情况取值下的系统行为,并利用能产生“直观明显”结果的输入数据来检查系统是否产生应有的输出,以及利用一些熟悉的数据按照模型逻辑过一遍,看能否得出预期结果。 模型验证指考查仿真模型是否符合实际情况。模型的输入分布与实地观察结果一致吗?模型的输出性能指标与实际情况一致吗?在此要做必要的统计检验,同时,也需要许多经验和常识性判断。 (5) 实验运行和结果分析。运行仿真实验,得出输出数据并进行结果分析。具体来说,这一步可能包括仿真实验方案的设计,通过实验运行得到输出性能指标的统计,根据实验输出比较不同方案,或者进行敏感性分析以及最优化分析等。 1.4习题 (1) 请阐述系统和模型的概念及两者的关系。 (2) 模型可以分为哪几类?其各自的优缺点是什么? (3) 什么是仿真?举例说明仿真可以分为哪几类?各类仿真的特点是什么? (4) 什么是系统状态?请举例说明。 (5) 仿真使用的软件工具可以分为哪几类? (6) 现代可视化仿真软件包具有哪些特点? (7) 简述仿真项目的研究步骤。 第2章Flexsim仿真入门 第2章Flexsim仿真入门 本章通过几个简单排队系统的案例,介绍Flexsim仿真最基本的技术,引导读者学习Felxsim仿真必备的一些基础入门知识。本章还要介绍排队系统的一些基本概念以及离散系统仿真模型的组成要素。 2.1排队系统仿真 排队系统是由顾客和为顾客提供服务的服务台组成的系统,顾客先进入等待队列排队,然后接受服务台提供的服务。排队系统在服务业、物流业以及生产制造等行业有广泛的应用。如顾客到银行办理业务时先排队,然后在柜台(服务台)接受服务; 物流系统中车辆(顾客)在装卸点排队,然后接受装卸机械(服务台)的装卸服务; 生产系统中产品(顾客)在加工机器前排队,然后接受机器(服务台)的加工服务等。最简单的排队系统是单队列、单服务台系统,而多个队列、多个服务台通过串联、并联组合起来可以构成复杂的排队网络系统,现实系统往往是复杂的排队网络系统。下面我们通过几个小案例来介绍如何使用Flexsim建立排队系统模型(本章案例参考了Flexsim的用户手册)。 2.2案例: 带返工的产品制造模型 2.2.1模型描述 某工厂制造3种类型的产品,产品按随机的时间间隔从工厂其他部门到达。模型中有3台加工机器,每台机器加工一种特定类型的产品。产品完成加工后,必须在一个共享的检验设备中检验质量,如果质量合格,就被送到工厂的另一部门,离开仿真模型。如果发现制造缺陷,则必须返工,产品被送回到仿真模型的起始点,然后由对应的机器重新加工一遍。仿真的目的是找到瓶颈的所在。系统结构如图2-1所示。 图2-1带返工的产品制造系统结构 系统参数如下: 产品到达时间间隔服从均值为5秒的指数分布。到达产品类型服从1~3的整数均匀分布。3台机器的加工时间都服从均值为10秒的指数分布。检验时间4秒,80%的产品检验合格,20%的产品检验不合格。 通过这个模型学习基本的排队系统建模方法,同时也练习和熟悉Flexsim的基本操作和基本概念,请特别注意“提示”中的内容。在下面的操作中,涉及的Flexsim概念有: Flexsim对象分类、流动实体、端口、触发器等。 本模型见附书光盘的“bookModel\\fangong.fsm”,但读者最好按照以下操作步骤自己动手建立模型。 2.2.2建模步骤 1. 创建对象 Flexsim的基本界面如图2-2所示。首先,从对象库中用鼠标拖动一个发生器(Source)、两个队列(Queue)、4个处理器(Processor)和一个吸收器(Sink)对象到模型窗体中,按图2-2布置好对象位置,并按图重新命名各对象名字(可双击对象调出其属性窗体,在属性窗体顶部可修改对象名字)。 图2-2Flexsim基本界面