高等院校物流管理与工程类专业创新应用型人才培养立体化系列教材 物流系统仿真实验 主编:周敏 清华大学出版社 北京 内 容 简 介 本书立足高等学校物流教育的实际需要,牢牢把握本科物流管理专业人才培养的目标,旨在比较全面、系统地介绍物流系统仿真的主要内容和发展动态,从理论与实践相结合的视角,全面分析系统仿真的底层技术和仿真应用。本书从物流系统仿真概述、Arena软件概貌、仿真输入与输出数据分析、Arena仿真建模流程四个方面由浅入深详细描述相关基本理论;通过10个具体实验的介绍,详细阐述了利用Arena软件对实际物流运营系统建模的思路和操作步骤;通过10个配套练习,实现对课程内容的系统化回顾和应用,达到学以致用的目的。读者通过学习本书内容,可以对现实中的物流系统进行建模仿真。 本书可作为物流管理、供应链管理等相关专业本科生和硕士研究生物流系统仿真课程的教材或教学参考书,也可作为有关工程技术人员的自学参考书。 本书封面贴有清华大学出版社防伪标签,无标签者不得销售。 版权所有,侵权必究。举报:010-62782989,beiqinquan@tup.tsinghua.edu.cn。 图书在版编目(CIP)数据 物流系统仿真实验/周敏主编.—北京: 清华大学出版社,2022.6 高等院校物流管理与工程类专业创新应用型人才培养立体化系列教材 ISBN 978-7-302-60625-3 Ⅰ.①物…Ⅱ.①周…Ⅲ.①物流-系统仿真-高等学校-教材Ⅳ.①F253.9 中国版本图书馆CIP数据核字(2022)第064526号 责任编辑: 吴梦佳 封面设计: 常雪影 责任校对: 李梅 责任印制: 丛怀宇 出版发行: 清华大学出版社 网址: http://www.tup.com.cn, http://www.wqbook.com 地址: 北京清华大学学研大厦A座 邮编: 100084 社总机: 010-83470000邮购: 010-62786544 投稿与读者服务: 010-62776969, c-service@tup.tsinghua.edu.cn 质量反馈: 010-62772015, zhiliang@tup.tsinghua.edu.cn 课件下载: http://www.tup.com.cn,010-83470410 印装者: 北京国马印刷厂 经销: 全国新华书店 开本: 185mm×260mm印张: 15.25字数: 347千字 版次: 2022年6月第1版印次: 2022年6月第1次印刷 定价: 45.00元 产品编号: 095054-01 物流系统仿真实验 前言 随着互联网的快速发展,大规模存储设备和智能手机等移动终端设备的普及带动了云计算、物联网、大数据等新技术的兴起,从而给企业物流管理带来了巨大的变革。在现代大生产的格局中,企业在全球范围内开拓市场,物流也将获得进一步发展的更大空间。仿真是以系统理论、形式化理论、随机过程理论、统计理论以及优化理论为基础,借助计算机和仿真软件对实际系统行为进行动态实验研究的方法。通俗来讲,仿真是基于一定的知识或假设,对实际系统进行模拟,从而更加深入地了解整个系统,并且对系统做出科学的调整、改善和优化,为辅助决策提供依据。仿真、线性规划和网络技术一起被称为运筹学在应用领域中的三大支柱,在工业生产、交通运输、能源供应、医疗卫生、航空航天、军事作战、制造过程以及社会服务等领域发挥着重要作用,展现出美好的前景。Arena 是美国 Rockwell Software 公司开发的通用仿真软件,具有功能强大、使用方便、界面直观、动画显示等优点。 为满足大数据时代企业物流管理发展对物流人才的需求,我们在高校人才培养模式、教育教学改革、课程体系建设等方面进行了积极尝试,本书即为湖南工商大学教学改革成果之一。本书得到教研教改项目——湖南省普通高校青年骨干教师培养项目的经费支持。 本书由三部分组成:第1~4章为理论部分,重点阐述仿真基本理念、模型构建思路、软件基本操作等内容;第5~14章为实验部分,通过重点分析10个场景的物流系统仿真实验,提升读者对物流系统仿真建模的理解;第15章为模拟习题,所有实验部分都设置了对应的模拟习题,帮助读者通过实践训练提升分析问题和仿真建模的能力。另外,本书所对应的“Arena仿真优化实验”课程被评为湖南省线上线下混合式一流课程,并建设了完整的在线课程网站,可以作为广大读者学习本书内容的有益补充。 本书具有以下三个特点。 (1) 理论与实践相结合,让读者“做中学”。本书以具体企业的物流管理实践为原型,采用理论讲述和实践案例相结合的方法,旨在帮助读者全面了解Arena软件的使用及实际物流运营系统的建模仿真,并通过以大量实际案例为基础的实验项目,提升读者的实际操作能力。 (2) 结构合理,逻辑体系完整,具有系统性特色。本书以物流运营系统及服务流程为主线,逻辑体系完整,形成一个有机系统。 (3) 内容丰富,体现科学性特色。本书内容丰富,不仅对Arena软件的使用及建模操作进行了阐述,更重要的是分析了系统建模的思路及仿真设计,使读者对企业物流管理内在规律有更深刻的体会。为方便读者学习,我们将涉及的内容制作成PPT、仿真模型等资料,供读者课外阅读。 本书是全体研究人员共同努力的成果。特别感谢湖南工商大学隆飘、伍可欣、占佳颖、黄劲龙等研究生在本书编写过程中进行的资料整理、实验案例测试等工作。在本书的研究与撰写过程中,我们学习借鉴了不少学者的研究成果,得到了清华大学出版社的大力支持与帮助,在此表示衷心的感谢。 本书可作为相关专业本科生和硕士研究生的教材或教学参考书,也可供有关工程技术人员自学参考。 现代物流运营系统的仿真优化是不断发展的过程,软件更新换代迅速,需要不断地研究与探索。因水平有限,书中难免存在不足之处,恳请大家批评指正。 2022年1月 目录 第1篇理 论 部 分 第1章物流系统仿真概述 第2章Arena软件概貌 第3章仿真输入与输出数据分析 第4章Arena仿真建模流程 第2篇实 验 部 分 第5章卸货平台手工仿真实验 第6章制造物流系统基础实验 第7章制造物流系统仿真实验 第8章概率板仿真实验 第9章码头卸货仿真实验 第10章多队列的物流系统仿真实验 第11章物流服务资源调度仿真实验 第12章快餐配送中心调度实验 第13章仓库布置优化仿真实验 第14章库存控制优化仿真实验 第3篇仿 真 习 题 第15章仿真实验习题 参考文献 物流系统仿真实验 第1篇理 论 部 分 第1章物流系统仿真概述 第1章 物流系统仿真概述 学习目标 (1) 掌握物流系统的特点。 (2) 熟悉物流系统仿真的基本概念和要求。 (3) 掌握手工仿真的基本原理与方法。 1.1物流系统概述 1.1.1系统的概念 英文中系统(system)一词来源于古代希腊文,意为部分组成的整体。系统的定义应该包含一切系统所共有的特性。一般系统论创始人贝塔朗菲定义:“系统是相互联系、相互作用的诸元素的综合体。”这个定义强调元素间的相互作用以及系统对元素的整合作用。如果对象集S满足下列两个条件:①S中至少包含两个不同元素;②S中的元素按一定方式相互联系,则称S为一个系统,S的元素为系统的组分。 这个定义指出了系统的三个特性。 (1) 多元性,系统是多样性的统一、差异性的统一。 (2) 相关性,系统不存在孤立元素组分,所有元素组分相互依存、相互作用、相互制约。 (3) 整体性,系统是所有元素构成的复合统一整体。 这个定义说明了一般系统的基本特征,将系统与非系统区别开来,但对于定义复杂系统有着局限性。另外,严格意义上,现实世界的“非系统”是不存在的,构成整体的而没有联系性的多元集是不存在的。对于一些群体中元素间联系微弱,从而可以忽略这种联系,可把它视为二类非系统。 1.1.2物流系统的结构 物流系统和一般系统一样,具有输入、转换、输出三要素。通过输入和输出使系统与社会环境进行交换,使系统和环境相依存,如图1-1所示。 图1-1物流系统的一般结构 物流系统是一个由许多不同层次结构的子系统组成的人工大系统,物流系统的各个层次在地位与作用、结构与功能上表现出不同的等级秩序。大多数管理系统都属于随机系统。对于这类系统,当其复杂性超过一定限度时,运用数学解析方法建立系统模型并求解往往是很困难的,甚至是不可能的。在这种情况下,系统仿真法就显示出其优越性。 1.1.3物流系统的特性 物流系统是由物流各要素组成的,要素之间存在着有机联系并使物流总体功能合理化。物流系统的目的是实现物资在时间和空间上的最大效益,在保证社会再生产顺利进行的前提下,实现各种物流环节的合理衔接,并使经济效益最大化。物流系统是社会经济大系统的一个子系统。 物流系统除了具有一般系统所共有的整体性、相关性、目的性和环境适应性外,同时具有规模庞大、结构复杂、目标众多等大系统所具有的特征。其中,系统的整体性主要体现在系统的整体功能上,这个整体功能是指各组成要素通过整合使整体功能大于各部分功能之和;相关性是指各组成要素间相互作用、相互影响,从而使系统保持稳定;目的性是指系统具有能使各要素集合在一起的共同目的;环境适应性要求系统能够经常与外部环境保持最佳的适应状态。物流系统的特性体现在以下几个方面。 (1) 物流系统是一个大跨度系统。物流系统在时间和空间上的跨度都很大。大跨度系统使其在管理上比较困难,而且对信息的依赖度也较高。 (2) 物流系统是一个可分系统。随着人们对物流的认识和研究的不断深入,物流系统的子系统得以不断扩充,然后可以分解成若干个相互联系、相互影响的子系统。 (3) 物流系统是一个动态系统。物流系统内部各要素及系统的运行状况经常发生变化,物流受到社会生产和需求的广泛制约。多变的社会环境要求人们必须对物流系统的各组成部分不断地进行修改、完善,物流系统也必须具有足够的灵活性与可变性。 (4) 物流系统是一个复杂的系统。在整个物流活动过程中,贯穿着大量的信息,物流系统要通过这些信息把各子系统有机地联系起来。 (5) 物流系统是一个多目标函数系统。物流系统的总目标是实现宏观和微观的经济效益。为了使物流系统满足人们的要求,必须建立物流多目标函数,在多目标中获得最佳效果。 1.2仿 真 概 述 1.2.1仿真的定义 仿真是以系统理论、形式化理论、随机过程理论、统计理论以及优化理论为基础,借助计算机和仿真软件对实际系统行为进行动态实验研究的方法。通俗地讲,仿真是基于一定的知识或假设,对实际系统进行模拟,从而更加深入地了解整个系统,并且对系统做出科学的调整、改善和优化,为辅助决策提供依据。 对于包含多种随机因素的复杂系统,通常难以用数学模型或解析方法精确地描述和求解时,可以根据系统内部的逻辑关系和数学关系,面向系统的实际过程和行为来构造仿真模型,在很少假设或不作假设的前提下,建立包括系统主要因素和具体细节的模型框架,并通过仿真实验运行,得到复杂系统的解。 1.2.2仿真的优越性 相比其他研究方法,仿真具有以下三个优势。 (1) 仿真可以将研制过程、运行过程和实施过程放在实验室中进行,具有良好的可控制性、无破坏性、可复现性和经济性等特点。 (2) 系统仿真在理论上体现了实验思考的方法论,用它可以探索高技术领域和复杂系统深层次的运动机理与规律性,给出人们直观逻辑推理不能预见的系统动态特征,具有科学的先验性。 (3) 系统仿真建模具有面向过程的特点,仿真模型与所研究系统的运行过程在形式和逻辑上存在对应性,避免了建立抽象数学模型的困难,显著简化了建模过程,具有很好的直观性。 仿真已成为人类认识和改造客观世界的重要方法,在一些关系到国家实力和安全的关键领域,如航空航天、信息、生物、材料、能源、先进制造、农业、教育、军事、交通和医学等,发挥着不可或缺的作用。仿真、线性规划和网络技术一起被称为运筹学在应用领域中的三大支柱,在工业生产、交通运输、能源供应、医疗卫生、航空航天、军事作战、制造过程以及社会服务等领域发挥着重要作用,展现出美好的前景。 1.2.3仿真科学的发展阶段 (1) 初级阶段。在第二次世界大战后期,火炮控制与飞行控制系统的研究孕育了仿真科学与技术。20世纪40—60年代,相继研制成功了通用电子模拟计算机和混合模拟计算机,属于模拟仿真阶段。 (2) 发展阶段。20世纪70年代,随着数字仿真机的诞生,仿真科学与技术不但在军事领域得到迅速发展,而且扩展到工业领域,相继出现了一些从事仿真设备和仿真系统生产的专业化公司,使仿真技术进入产业化阶段。 (3) 成熟阶段。20世纪90年代,为了更好地实现信息与仿真资源共享,促进仿真系统的交互操作和重用,以美国为代表的发达国家在聚合级仿真、分布式交互仿真、并行交互仿真的基础上形成了高层体系结构(high level architecture,HLA),网络化仿真成为典型特征,标志着仿真科学与技术进入成熟阶段。 (4) 新发展阶段。复杂系统仿真的新发展阶段是20世纪末和21世纪初,对广泛领域的复杂性问题进行科学研究的需求进一步推动仿真科学与技术的发展,仿真科学逐渐发展成具有广泛应用领域的新兴的交叉学科。仿真科学与技术在系统科学、控制科学、计算机科学交叉融合中实现了跨越和创新,极大地扩展了人类认知世界的能力。它可以不受时空限制,观察和研究发生或尚未发生的现象,以及在各种假想条件下发生和发展过程的现象;可以深入到一般科学及人类生理活动难以到达的宏观或微观世界去进行研究和探索,从而为人类认识世界和改造世界提供全新的方法与手段。经过近一个世纪的发展,仿真科学与技术已形成独立的知识体系,包括仿真建模理论、仿真系统理论和仿真应用。 1.2.4仿真的实际应用 仿真的实际用途体现在事前分析认证和事后分析改善两大方面,其最终目的是要辅助决策,降低成本,提高效益,其主要应用领域如下。 (1) 国防军事领域。新装备研制过程仿真、作战仿真等。 (2) 生产制造领域。生产线布局、设施规划、厂址选择、瓶颈分析、资源分配等。 (3) 供应链管理领域。物流规划、库存决策、运输规划等。 (4) 社会服务领域。系统性能分析、业务流程分析、投资决策分析(决策方案比较)等。 仿真应用的具体表现:提高设备利用率、减少排队等待、有效分配资源、减少缺货损失、减少资源故障带来的影响、确定最优批量问题、确定最优服务顺序问题、解决物料搬运问题、日常运作决策、实时监控、方案筛选等。国际上一致认为系统仿真是迄今为止最为有效、最经济的综合集成方法,是推动科技进步的战略技术。 1.2.5仿真模型的类别 仿真模型的类别包括离散系统仿真、连续系统仿真、混合系统仿真,如图1-2~图1-4所示。 在离散系统中,状态变量仅在随机的时点上发生瞬间的跃变,而在两个相邻的时间点之间,系统的状态保持不变。在连续系统中,系统输出连续变化,变化的时间间隔为无穷小量,且存在系统输入或输出的微分项。 图1-2离散系统仿真 图1-3连续系统仿真 图1-4混合系统仿真 1.2.6仿真研究的适用性 适合用仿真研究方法解决的问题如下。 1.复杂系统问题 复杂系统(complex system)是具有中等数目基于局部信息做出行动的智能性、自适应性主体的系统。复杂系统是相对牛顿时代以来构成科学事业焦点的简单系统而言的,二者具有根本性的不同。简单系统中的个体之间的相互作用比较弱,例如封闭的气体或遥远的星系,以至于人们能够应用简单的统计平均的方法来研究它们的行为。而复杂并不一定与系统的规模成正比,复杂系统要有一定的规模,复杂系统中的个体一般具有一定的智能性,如组织中的细胞、股市中的股民、城市交通系统中的司机,这些个体都可以根据自身所处的部分环境进行智能的判断或决策。 复杂系统是一个很难定义的系统,它存在于这个世界的各个角落。复杂系统不是简单系统,也不是随机系统;是一个复合的系统,而不是纷繁的系统(Its complex system,not complicated);是一个非线性系统;内部有很多子系统(subsystem),这些子系统之间又是相互依赖的(interdependence),子系统之间有许多协同作用,可以共同进化(coevolving)。在复杂系统中,子系统会分为很多层次,大小也各不相同。 2.虚拟现实系统问题 虚拟现实系统(virtual reality system,VR,又译作灵境、幻真)是近年来出现的图形图像领域的高新技术,也被称为灵境技术或人工环境。虚拟现实是利用计算机模拟产生一个三度空间的虚拟世界,给使用者提供关于视觉、听觉、触觉等感官的模拟,让使用者如同身临其境一般,可以及时、没有限制地观察三度空间内的事物。 不适合采用仿真方法来解决的问题:通过常识可以解决的问题;通过理论分析可以解决的问题;在现实系统中可以直接进行实验的问题;使用仿真研究成本(资金成本、时间成本、数据成本等)过高的问题;过于复杂而无法被准确定义的问题。 1.2.7仿真研究的基本过程 仿真研究不存在一个通用的套路,但通常要考虑以下几方面的问题。 (1) 理解系统。无论是针对已有系统还是待建系统,在研究之前一定要对系统如何运行先有一个直观和明确的理解。这需要对系统加以实地考察,以及系统运作人员的实际参与。 (2) 明确目标。“现实主义”是必须遵循的原则,不要承诺完成力所不能及的工作。要明确从研究中能够了解什么,不要面面俱到。规定好所观察、处理、变更与提交的具体内容是至关重要的。这些目标要自始至终地贯穿在仿真研究中,以使研究人员能将注意力充分集中到最重要的方面,即决定如何最好地(或至少是比较好地)运作该系统。 (3) 建立规范形式的模型。什么样的细节层次是合适的?哪些部分需要详细描述?哪些可以在高层次上粗略处理?从管理人员和决策者那里充分获取信息,制定有效的模型假设。 (4) 用计算机语言或软件实现模型。一旦模型假设得到确认,就可以用仿真软件来真实地表示这一模型。如果遇到困难,一定要以开放和诚实的态度来解决,决不能加以掩饰。要请懂得系统实际运行的人员积极参与。 (5) 验证所得到的计算机表示是否真实描述了概念模型。可以考察输入参数在各种极端情况取值下系统的行为,并利用能产生“直观明显”结果的输入数据来验证系统是否产生应有的输出,以及利用一些熟悉的数据按照模型逻辑过一遍,看是否能够得出预期结果。 (6) 模型确认。模型的输入分布与实地观察结果一致吗?模型的输出性能指标与实际情况一致吗?在此要做必要的统计检验,同时,许多经验和常识性的知识也是很有价值的。 (7) 实验设计。要策划出想要什么样的结果,以及如何通过仿真实验按一定的精度和效率得出这些结果。通常,经典的统计实验设计方法在此会很有帮助。 (8) 仿真实验运行。这一阶段的工作主要是计算机完成的。 (9) 分析结果。要想得到精确的结论表述,就要对结果进行正确的统计分析。显然,这又是与仿真实验设计密不可分的。 (10) 领悟本质。这一点说起来容易,实际做起来是很困难的。在目前的情况下,这些结果意味着什么?所有意义就在于此吗?其深层次的含义又是什么?通过这些结果能发现什么进一步的问题(需要进一步仿真)吗?所看到的是真正想要了解的系统性能指标吗? (11) 对所完成的工作建立文档。相关工作不可能永远做下去,所以要让后续人员能比较容易地理解已完成了什么,以便工作能持续进行下去。要让管理人员最后能采纳辛苦得出的精确而可信的建议,提供一个好的文档将起着至关重要的作用。 1.3物流系统仿真常见软件 1.3.1Arena Arena是美国 Rockwell Software 公司开发的通用仿真软件,具有功能强大、使用方便、界面直观、动画显示等优点,可以很容易地建立诸如生产系统、服务系统等仿真模型;可以根据实际需要设定仿真参数进行动态系统模拟,从而对实际的复杂系统进行有效分析和处理;内嵌的 Microsoft VBA(Microsoft Visual Basic for Application)工具使 Arena 能够根据用户特定需求进行定制,还可以方便地与其他软件集成,如 Microsoft Office 产品、SQL Server 数据库产品等,从而对其功能进行扩充;Arena 采用面向对象编程(Object-Oriented Programming,OOP)的思想,将其核心模块都以类的形式封装在 Arena 类库中,以动态链接库(Dynamic-Link Library,DLL)的形式表现,在任何开发环境中都可以引用这些动态链接库,继而使用 Arena 的所有模块来达到控制整个仿真模型和仿真运行过程的目的。各种仿真软件的使用比例如图1-5所示。 图1-5各种仿真软件的使用比例 Arena的特点如下。 (1) 学术性强。全面深入地体现了系统仿真的有关理论,在学术界应用较广。 (2) 简单易用。采用可视化建模和运行环境,这一点和多数仿真软件类似。 (3) 友好稳定。相对于 FlexSim、eM-Plant 等仿真软件,其友好性体现在数据输入、输出及模型调试等方面。由于软件很成熟,而且模型中不能直接使用指针,所以系统更加稳定。Arena 提供二维图形制作功能和录制仿真动画功能。 (4) 应用方案模板。Arena 将一些常用的仿真逻辑封装在 Block(模块)中,相关的 Block 集成在 Template(模板)中(应用方案模板,AST)。模板有不同的级别,越高级的模板,功能越丰富,构建模型的效率也越高,但是越不灵活;越低级的模板,功能越单一,构建模型的效率也越低,但是越灵活。有些高级 Block 可以通过低级 Block 组合而成。一般应用高级模板即可方便快捷地构建仿真模型,对于非常复杂的仿真模型才需要用到低级模板。 (5) 模板开发环境。Arena 提供了用户自定义模板的开发功能,用户可以根据需要自己定制 Block和 Template,从而解决仿真过程中相同或相似流程的重复建模问题,极大地增强了模板的可重用性和实用性。模板开发环境拉近了模型与实际系统之间的距离,使仿真模型更加直观和易理解,而且整个仿真模型的开发具有更高的可扩充性,为仿真大型、复杂系统提供了极为方便的手段。 (6) 面向仿真过程的开发。基于面向对象的思想和结构化的建模概念,将专用仿真语言的灵活性和仿真器的易用性很好地融合到一起,直接面向实际业务流程构建仿真模型,符合常规的思维习惯。 (7) 分层建模。Arena通过使用层次化的建模体系,以保证灵活地进行各个水平上的仿真建模。Arena建模体系的第一层是各种过程语言(如VB、C/C++),常用于复杂建模过程。第二层是基础模板,即SIMAN模板,包括Blocks模板和Elements模板。它们由SIMAN语言编写,继承了SIMAN语言灵活建模的特点。第三层是最新开发的通用模板,即Arena模板,包括Advanced Process模板、Advanced Transfer模板和Basic Process模板。第四层是应用方案模板(简称AST),应用这些模板可以使用户在特定领域进行更加合理的仿真建模。Arena建模体系的最高层是根据企业自身的需求进行用户自定义模板的开发。Arena正是通过可视化的仿真环境,将各层次的建模方法交替使用,获得不同的建模能力。由此可见,Arena提供了一个可以适用于各种建模水平的仿真环境,兼备易用性和灵活性两方面的优点。对于大型复杂系统,可以从宏观到微观、从抽象到具体,逐层建立相应的仿真子模型,然后再组合成一个完整的仿真模型。这给大型复杂系统的建模带来了极大的方便。 (8) 输入分析器、过程分析器和输出分析器。输入分析器(Input Analyzer)用来进行输入数据概率分布函数的拟合,可以使输入数据的分析变得简捷方便。过程分析器(Process Analyzer)主要用于比较不同模型中具体参数或者同一模型中的多次仿真中具体参数的值,并以各种图表的形式提供比较的结果。输出分析器(Output Analyzer)包括对输出数据的多样显示功能和强大的数理统计分析,以确保输出分析的准确性和可靠性。 1.3.2AnyLogic AnyLogic是一款独创的仿真软件,它以最新的复杂系统设计方法论为基础,是第一个将UML语言引入模型仿真领域的工具,也是唯一支持混合状态机这种能有效描述离散和连续行为的语言的商业化软件。AnyLogic是一款应用广泛的,对离散、系统动力学、多智能体及混合系统建模和仿真的工具。它的应用领域包括物流、供应链、制造生产业、行人交通仿真、行人疏散、城市规划建筑设计、Petri网、城市发展及生态环境、经济学、业务流程、服务系统、应急管理、GIS信息、公共政策、港口机场、疾病扩散等。 AnyLogic提供独特的仿真方法,即在任何Java支持的平台,或Web页上运行模型仿真。AnyLogic是唯一可以创建真实动态模型的可视化工具,即带有动态发展结构及组件间互相联络的动态模型。使用AnyLogic,用户并不需要另外再学习什么语言或图形语言。AnyLogic所有的建模技术都是以UML-RT、Java和微分方程(若用户想要为连续行为建模)为基础的,这些也是目前大多数用户所熟悉的技术。如果比较喜欢快速的“拖—拉式”建模,AnyLogic也提供一系列针对不同领域的专业库。AnyLogic的动态仿真具有独创的结构,用户可以通过模型的层次结构,以模块化的方式快速地构建复杂交互式动态仿真。AnyLogic的动态仿真是100% Java的,因此可以通过Internet访问并在Web页上显示。AnyLogic独特的核心技术和领先的用户接口使其成为设计大型复杂系统的理想工具,因为构建物理原型进行实验代价高昂,耗时太长,有时还不一定成功。 AnyLogic强大而灵活,并提供多种建模方法:基于UML语言的面向对象的建模方法;基于方图的流程图建模方法;Statecharts(状态机),分为普通的和混合的微分和代数方程;用Java建模。AnyLogic的建模语言是UML-RT的扩展。UML-RT在许多复杂大系统的建模设计中被证明是一组最佳设计方法的集合。构建AnyLogic模型的主要方图是活动对象。活动对象有其内部结构和行为,可以任意向下封装其他对象。设计AnyLogic模型,实际上就是设计活动对象的类并定义它们之间的关系。运行时模型可看作活动对象瞬间展开的层次。活动对象通过边界对象与周围交互作用,如端口(用于离散交流)或变量(用于连续交流)。 1.3.3FlexSim FlexSim是美国FlexSim 公司开发的,迄今为止世界上第一个在图形环境中集成了C++IDE 和编译器的仿真软件。在这个软件中,C++不但能够直接用来定义模型,而且不会在编译中出现任何问题。这样,就不再需要传统的动态链接库和用户定义变量的复杂链接。FlexSim应用深层开发对象,这些对象代表着一定的活动和排序过程。要应用模板中的某个对象,只需要用鼠标把该对象从库里拖出来放在模型视窗即可。每一个对象都有一个坐标(x,y,z)、速度(x,y,z)、旋转以及动态行为(时间)。对象可以创建、删除,而且可以彼此嵌套移动,它们都有自己的功能或继承来自其他对象的功能。这些对象的参数可以把任何制造业、物料处理和业务流程快速、轻易、高效地描述出来。同时FlexSim的资料、图像和结果都可以与其他软件公用(这是其他仿真软件不能做到的),而且它可以从Excel 表读取资料和输出资料(或任何ODBC DATABASE),可以从生产线上读取现时资料用于分析功能。FlexSim也允许用户建立自己的实体对象(objects)来满足用户自己的要求。在FlexSim7以上版本已经开发出64位版本,可以更好地调用计算机的内存。 FlexSim采用经过高度开发的部件(object)来建模。部件表示商业过程中的活动、行列,即代表着时间、空间等信息。建立模型时,只需要将相应的部件从部件库拖放到模型视图(view)中,各个部件具有位置(x,y,z)、速度(x,y,z)、旋转角度(rx,ry,rz)和动态的活动(时间)等属性,如图1-6所示。 图1-6FlexSim模型 部件可以被制造、被消灭,也可以移到另一个部件中,部件的参数是简单、快速、有效地建立生产、物流和商务过程模型的主要机能,可以对几乎所有的物流现象进行模型化。如机械手、操作人员、队列、输送机、叉车、仓库、交通信号、货柜、箱子等全都可以用FlexSim来建立模型,信息情报等“软”的部分也可以很容易地使用FlexSim功能强大的部件库来建模。 1.3.4Witness Witness是英国Lanner集团集数十年系统仿真经验开发出的面向工业系统、商业系统流程的动态系统建模与仿真软件平台,是世界上该领域内的主流仿真软件。Lanner集团总部位于英国奥克斯,在欧洲、美洲、亚洲等许多国家拥有分支机构与合作伙伴。在全球范围内,其核心产品Witness有超过3 500家企业用户,如AENA、Airbus、法国航空、BAA、BAE系统公司、维珍航空等。 Witness是该集团集数十年经验开发的生产系统规划与运营仿真平台,广泛应用于生产和物流系统运营管理与优化、流程改进、工厂物流模拟与规划、供应链建模与优化等。在现代工业工程领域,计算机仿真一直是不可缺少的决策支持工具,它在大型工程项目的前期规划、投资平衡分析、生产物流的运行控制、供应链与库存管理、作业排序、资源分配、流程再造等众多方面发挥了巨大作用。Witness是世界上该领域内的主流仿真软件。运用Witness进行仿真模拟可评估装备与流程设计的多种可能性,提高工厂与资源的运行效率,减少库存,缩短产品上市时间,提高生产线产量和优化资本投资等。 1.4离散仿真系统举例 1.4.1简单的例子 King in the hole Long long ago,there lived a king.He loved horses.One day,he rode outing.Unfortunately,he fell into a hole.The hole has three doors.Three doors look the same.However,three doors leading to a different place。 First door is leading to a death sentence.If opened,the king will die. Second door is leading to freedom.If opened,the king will be free. Third door is leading to back road.If opened,the king will return to this hole again. Problem:the probability of Kings freedom? 国王在山洞 很久以前,有一位国王。他爱马。有一天,他骑着马去郊游。不幸的是,他掉进了一个山洞。这个山洞有三扇门。三扇门看起来是一样的。然而,三扇门通向三个不同的地方。 第一扇门通往死路。如果开了,国王将会死。 第二扇门通往自由。如果开了,国王获得自由。 第三扇门是通往来路。如果开了,国王将再次回到这个山洞。 问题:国王自由的概率是多少? 不同的人,给出了不同的答案。 答案a:0.33。考虑国王出来的选择,有1/3的概率能够获得自由,所以是0.33。 答案b:0.5。不考虑返回的门,那么获得自由的概率是1/2,所以是0.5。 哪个才是正确的解答?还有没有其他的解答思路?例如,仿真实验重复10 000次实验,看国王的选择。 1.建立模型01-01 建立模型,如图1-7所示。 图1-7Arena仿真模型 2.仿真运行10 000次 运行结果如下: Counter CountValue Dead way5 072.00 Free way4 929.00 由此判断,国王自由的概率约为0.5。 1.4.2仿真情景 由于大量仿真模型中都会包含等待线或队列(queue),因此本书将从这样一个非常简单的模型出发。该模型表示了物流服务系统的一部分:“货车”到达物流处理中心,在仅有的单路站台卸货,然后离开,如图1-8所示。如果货车到达时卸货平台是空闲的,则立刻开始服务;否则,将进入一个“先进先出”(FIFO)的队列等待。此即模型的逻辑(logical)结构。 图1-8货车卸货服务系统 对模型给定一些数值(numerical)成分,包括仿真是如何开始和结束的。首先,要确定最为基础的基准时间单位:本书将全部用分钟来计量时间。采用什么时间单位在逻辑上是无关紧要的,所以可针对待研究的系统的特点选取最合适、熟悉和方便的时间单位选择基准时间单位时,不仅要注意时间本身(例如,对于一个要仿真20年的问题,就不能用秒作为基准单位;而对于一个仿真两分钟的问题,就不能用天作为基准单位),而且要注意避免在同一模型中出现极大和极小的时间值,因为即便使用Arena的双精度计算,计算机在处理舍入误差时也还是可能出现问题。。虽然可根据需要或方便使用不同的单位表示模型的输入时间量,如用分钟表示平均服务时间,用小时表示卸货机器平均无故障时间,但在计算时,所有的时间都要转换为基准单位。Arena允许用不同的单位表示输入时间,但必须设定基准时间单位,在仿真过程中各种时间单位会被转换为基准时间单位,而在输出报告中,仍显示各自的时间单位。 系统在第0分钟时开始运行,开始时系统中没有货车,而且卸货平台是空闲的。如果每天早上系统都重新开始,这种“空且闲”(empty-and-idle)假设是符合实际的,但对有初始状态且不断运行的系统来说,可能就不合适。 仿真中所用的各种时间量如表1-1所示。第一列是货车编号(顺序号),第二列是货车到达时间,第三列给出了前后两个货车到达的间隔时间,称为到达间隔(inter arrival time),服务时间(仅指在卸货平台上的服务时间,不包括在队列中的等待时间)位于最后一列。 仿真恰好在第20分钟时结束。如果届时在系统中仍有货车(正在服务或在队列中等待),那它们也只能完不成服务了。 表1-1货车的到达、间隔和服务时间单位:分钟 货车编号 到达时间 到达间隔 服务时间 1 0.00 1.73 2.90 2 1.73 1.35 1.76 3 3.08 0.71 3.39 4 3.79 0.62 4.52 5 4.41 14.28 4.46 6 18.69 0.70 4.36 7 19.39 15.52 2.07 8 34.91 3.15 3.36 9 38.06 1.76 2.37 10 39.82 1.00 5.38 11 40.82 — —     1.4.3研究目标分析 给出以上逻辑/数值模型后,接下来就要确定收集系统的哪些输出性能指标。以下就是本例所要计算的指标。 (1) 在20分钟服务过程中的总服务数(total service,在卸货平台完成服务并离开的货车数)。其数值应越大越好。 (2) 仿真过程中开始在卸货平台接受服务的货车的平均排队等待时间(average waiting time in queue)。这个时间记录的仅仅是货车在队列中的等待时间,而不包括任何在卸货平台上的服务时间。如果WQi表示第i个货车在队列中的等待时间,且在20分钟的仿真运行中有N个货车离开队列,则其均值为 ∑Ni=1WQiN 注意:由于货车1在0时刻到达,此时卸货平台空闲,一定有WQ1=0且N≥1,因此不必担心可能会被0除。一般称这种形式的指标为离散时间(或离散参数)统计量,因为它所针对的数据(本例为等待时间WQ1,WQ2,…)具有自然的观察顺序,如第一个观测值、第二个观测值等。在Arena中,这类统计量被称为计数型(tally)统计量,这是因为它们每被观测到一次就累计记录一次(利用Arena的基础仿真语言SIMAN中Tally模块的特征)。从系统性能的角度来说,平均排队等待时间越小越好。 (3) 仿真过程中开始在卸货平台接受服务的货车的最大排队等待时间(maximum waiting time in queue)。这是用来度量最坏情况的指标,对于确定对顾客的服务水平保证应该会有所帮助。这个值越小越好。 (4) 排队等待的货车数对时间的平均值(time-average number of parts waiting in the queue,正在卸货平台上服务的货车不记入在内),即平均队长。“对时间平均”的含义是对各种可能的队长值(0,1,2,…)加权平均,其中权重为队长在该值上持续的时间占仿真运行时间的比例。令Q(t)为在任意时刻t队列中的货车数,平均队长就是Q(t)曲线下的面积除以仿真时间长度20,可用积分符号,即 ∫200Qtdt20 这种随时间离散变化(time-persistent)的统计量在仿真中很常见,表示的是队列在平均水平下有多长,在分配作业地空间时会有作用。 (5) 最大排队等待货车数(maximum number of parts that were ever waiting in the queue),即最大队长。事实上,如果希望自始至终在作业地都能保持合理空间,用这一指标来确定作业地空间比用平均队长更好。这是另一个度量最坏情况的指标,其值越小越好。 (6) 在卸货平台上完成服务并离开的货车的平均与最大系统逗留时间(average and maximum total time in the system),也称为流程时间(cycle time)。这是货车从到达到离开系统的时间间隔,所以它是排队等待时间和服务时间之和。这是一类周转时间,所以该值越小越好。 (7) 卸货平台的利用率(utilization),即卸货平台处于忙态的时间占仿真总时间的比例。这是另一个随时间离散变化的统计量,其随时间变化的函数为如下“忙态”函数。 B(t)=1如果卸货平台在t时刻忙 0如果卸货平台在t时刻闲 利用率,即为曲线B(t)下的面积除以仿真运行周期: ∫200B(t)dt20 资源利用率是很多仿真都会关注的一个指标,但很难说“希望”它高(接近1)还是低(接近0)。利用率高固然很好,因为这意味着很少的能力过剩;但也可能会很糟,因为可能会造成拥堵,形成很长的队列,并减慢吞吐速度。通常有许多可能的输出性能指标,在仿真中尽量多观测一些事物是一个好主意,因为可能会忽略已经观察到的事物,但永远也看不到没有观察过的事物,而且,有时还会发现意外惊喜。这样做唯一的弊病在于,大量收集那些关系不太密切的数据会减慢仿真运行速度。 1.5分 析 方 法 有了模型、定义了输入与输出以后,接下来就要确定如何根据模型逻辑从输入得到输出。本节将简要介绍几种处理方法。 1.5.1根据经验猜测 虽然人们并不热衷于猜测,但有时草草地粗算一下至少也能得到一点对系统的定量认识(不过有时也得不到)。当然,结果怎样将完全取决于具体的问题状况。 对于引例,可以先计算平均流入率和处理率。从表1-1可以看出,10个到达间隔的平均值为4.08分钟,而10个服务时间的平均值则为3.46分钟。这看起来还是很有希望的,因为服务速度比货车到的速度要快(至少在平均意义上),这意味着系统有机会在长时期内以稳定的方式运行而不会“爆炸”。如果这些平均值准确地出现在每一个货车身上(没有任何变化)那就肯定不会形成队列,即所有的等待时间都是0,这真是一个令人兴奋的结果。可惜,不管这个结果多么让人高兴,毕竟还是不太正确,因为很明显,每个货车的到达间隔和服务时间都是不一样的,因此有时会形成队列。例如,正好在处理需要较长服务时间的货车时,又有货车以较小的间隔到达。 假如换一种情况,表1-1中输入数据的平均值关系正好相反,即平均到达间隔比平均服务时间要小。如果这种情况持续下去,在平均意义上货车到的速度比完成服务的速度要快,这意味着会出现严重的拥堵(至少过一段时间后会出现,也许这段时间比计划的20分钟运行时间要长)。与很多其他情况一样,实际结果会界于所猜测的极端情况之间。显然,猜测是有很大局限性的。 1.5.2排队论方法 既然涉及队列,何不用排队论来解决?这一理论已经几乎有一个世纪的历史了,是一大批充满高度智慧的人通过辛勤工作所创建发展起来的。在一些情况下,应用这一理论能够得出简单的解析式,并能从中得到对问题的许多认识。 排队论研究的最简单和最多的也许就是M/M/1排队模型了。第一个“M”说明到达过程是马尔可夫过程(Markovian),即到达间隔独立且服从相同的指数概率分布。第二个“M”代表服务时间分布,此处也是指数分布。“1”表示只有一个服务台。至少在表面上这个模型很适合引例问题。更好的是,大多数输出性能指标可用简单的解析式表达。例如,平均排队等待时间(长时间运行下的期望值)可表示为 =λν(ν-λ),λ=1μA,ν=1μS 其中,μA是到达间隔分布的期望值,μS是服务时间分布的期望值(假定μA>μS,这样队列才不至于“爆炸”)。于是立刻就会想到,可以用观测数据来估计μA和μS,然后将估计值代入以上解析式,应用本例数据可得3.462/(4.08-3.46)=19.31(分钟)。 这种方法有时可以给出合理数量级上的近似结果,帮助进行粗略比较,但也存在一些问题。 (1) 估计值μA和μS是不精确的,因此结果也会有误差。 (2) 只有假设到达间隔和服务时间服从指数分布时才能得出上面的公式,但引例数据可能并不满足这一假设。这就带来了公式可用性的问题。尽管对更一般的排队模型也能得到一些更复杂的结果,但总是需要有一些相关假设,而在实际中可能得不到满足。 (3) 以上公式描述的是长期运行的性能,而不是所要的20分钟的情况。这是大多数(尽管不是全部)排队论模型的典型问题。 (4) 以上公式没有提供任何有关系统可变性的信息。这是分析的难点,而且有其固有的吸引力,如产出量会在多大范围变动(尽管有时也能找到其他公式来度量可变性)。 排队论在对问题进行粗略近似以获得一个大致了解,以及指导下一步应采用什么样的仿真比较合适等方面很有价值。读者应牢记以上问题,并能对具体情况做出相应的分析解释。 1.5.3机械仿真 “机械”的含义是各项操作(到达、在卸货平台上接受服务等)的发生情况与实际发生情况完全一样。仿真模型中,事物的运动和变化在正确的时间、以正确的顺序发生,对彼此产生正确的影响,并对统计累加器变量产生正确的作用效果。按照这种方式,仿真就是直接、“强制”地对模型加以处理。仿真如何工作没有任何神秘可言,只有一些基本思想,以及由软件(如Arena)完成的大量细节和数据记录。 1.6事件驱动的手工仿真 本节将给出一个手工仿真过程的详细描述。下面首先简要介绍各事件处理中需要完成的工作,以及如何跟踪各有关量值和未来事件表的变化。 1.6.1事件处理要点 (1) 到达:新货车进入系统。 ① 安排下一个新货车的适时到达,即将其到达事件记录插入未来事件表。 ② 更新随时间离散变化的各统计量(从上一事件发生到现在)。 ③ 把到达货车的到达时间(即仿真时钟的当前值)保存在一个属性中,用于在后面计算该货车的系统逗留时间和排队时间。 ④ 如果卸货平台空闲,则到达货车立即开始服务(其排队时间为0),将卸货平台状态置为“忙”,并安排该货车的离开事件,统计该货车的排队时间。 ⑤ 如果卸货平台正在服务其他货车,则将到达货车置于队列末尾,队长变量加1。 (2) 离开:货车在卸货平台上完成服务并准备离开。 ① “完工货车数”统计累加器加1。 ② 计算并记录离开货车的系统逗留时间,即用仿真时钟当前值减去该货车的到达时间(在处理到达事件时已将其保存在某一属性中)。 ③ 更新随时间离散变化的各统计量。 ④ 如果卸货平台前的队列不空,将排在第一位的货车取出,计算并记录其排队时间(此时该货车已完成排队)并开始服务该货车,并安排其离开事件(将事件记录插入未来事件表)。 ⑤ 如果队列为空,则将卸货平台状态置为“闲”。注意,此时没有离开事件需要安排。 (3) 终止:仿真过程结束。 ① 更新随时间离散变化的各统计量(到仿真终止)。 ② 计算最终的各输出性能指标值,并形成总结报告。 每一事件处理完毕后(终止事件除外),从未来事件表中移出顶端记录,表示下一事件将在相应时间发生,然后将仿真时钟推进到该事件的发生时间,并处理该事件。 1.6.2过程跟踪 表1-2给出了手工仿真的所有计算细节,给出了Q(t)与B(t)随时间变化的曲线。表1-2中每一行表示一个事件,其中相关的实体(货车)号位于第一列,发生时间位于第二列,其他各列给出了该事件处理完毕后系统的状态及实体属性,具体含义如下。 (1) 事件类型:指出所发生事件的类型,ARR表示到达事件,DEP表示离开事件。 (2) 变量:给出队长变量Q(t)和机器状态变量B(t)的当前值。 (3) 统计累加器:统计累加器在仿真开始时需要初始化,并在仿真过程中不断更新。统计累加器包括: P=迄今为止服务完的货车数; N=迄今为止完成排队的货车数; ∑WQ=迄今为止完成排队货车的排队时间之和; WQ*=迄今为止观察到的最长排队时间; ∑TS=迄今为止完成服务货车的系统逗留时间之和; TS*=迄今为止观察到的最长系统逗留时间; ∫Q=迄今为止Q(t)曲线下的面积; Q*=迄今为止Q(t)的最大值; ∫B=迄今为止B(t)曲线下的面积。 (4) 未来事件表:在每个事件的发生时间,未来事件表的顶端记录将变成表1-2下一行左边的前三项(位于“刚完成事件”栏中)。 手工仿真系统的排队情况、装卸平台状别分别如图1-9和图1-10所示。 1.6.3仿真执行过程 下面简要描述仿真执行过程。 (1) t=0.00,初始化:模型初始化,所有的变量和统计累加器的初值设为0,队列设为空,卸货平台设为闲态,将第一个实体(货车)的到达事件(其发生时间为0)和仿真终止事件(其发生时间为20.00)放入未来事件表。然后检查下一个将要发生的事件,并从未来事件表中取出第一个记录——实体1在0.00时刻到达。 (2) t=0.00,实体1到达:安排下一个(第二个)实体的到达事件,即生成第二个货车(实体2),令其到达时间为当前时间(0)加上实体1与2的到达间隔时间(1.73,表1-2),并将该事件插入未来事件表。同时,实体1的到达使卸货平台由闲变忙,将实体1的到达时间存入其属性。此时队列仍为空,因为卸货平台可以立即开始服务该货车(故“属性” 图1-9手工仿真系统的排队情况 图1-10手工仿真系统的装卸平台状态 栏中括号内表示队列中实体到达时间的位置为空)。由于实体1经过了队列(即完成了排队过程,其排队时间为0),故N值加1,在累加器∑WQ中增加实体1的排队时间(0),并检查是否出现新的最大排队时间(此时没有)。由于没有货车完成服务,因此P仍保持为0,货车的系统逗留时间之和∑TS以及最大系统逗留时间TS*也没有发生变化。随时间离散变化的统计量∫Q、Q*和∫B也保持不变,因为还没有出现时间跨度。根据表1-1中的数据,货车1的服务时间为2.90分钟,将货车1的离开事件插入未来事件表(发生时间为第2.90分钟)。将未来事件表的顶端记录取出,即下一个事件是实体2在t=1.73时刻到达系统。 (3) t=1.73,实体2到达:安排下一个(第三个)实体的到达事件,即生成第三个货车(实体3),令其到达时间为当前时间(1.73)加上实体2与3的到达间隔时间(1.35,见表1-2),并将该事件插入未来事件表(该事件的发生时间为1.73+1.35=3.08)。同时,实体2到达时发现卸货平台处于忙态(正在服务实体1),于是进入队列。此时,机器状态变量B(t)仍然为1,但队长Q(t)由0增至1。将实体2的到达时间存入其属性,由于实体2目前排在队列中,故在表1-2“属性”栏中将其到达时间值表示在括号内。由于实体1的服务过程仍在继续,因此实体2的到达事件没能产生新的完工离开事件,而且实体2的排队时间也无法确定,故P、N、∑WQ、WQ*、∑TS和TS*均未发生变化。∫Q的增加量为0×(1.73-0.00)=0,∫B的增加量为1×(1.73-0.00)=1.73。由于Q(t)的新值为1,比先前的Q*=0大,故令新的最大队长Q*=1。实体2的离开事件将在实体1离开系统时安排。下一个事件即为实体1在t=2.90时刻离开系统。 (4) t=2.90,实体1离开:由于这是一个离开事件,故无须安排新的到达事件(实体3的到达事件已经安排过了,将在t=3.08时到达系统)。现在货车1在卸货平台上已完成服务并离开。因为队列不空,所以卸货平台继续处于忙态,也即B(t)仍然为1,但队长Q(t)由1减至0,变空(因为货车2离开队列开始服务)。货车2的排队等待时间可以算出,为2.90-1.73=1.17,将其累加到∑WQ中,并令N加1。由于1.17是新的最大排队等待时间,故令WQ*=1.17。货车1已完成服务,令P加1,算出货车1的系统逗留时间为2.90-0.00=2.90,将其累加到∑TS中,此外,由于2.90是新的最大系统逗留时间,故令TS*=2.90。∫Q与∫B的增加量均为1×(2.90-1.73)=1.17。由于没有出现新的最大队长,故Q*没有发生变化,仍为1。从表1-2可以发现,货车2的服务时间为1.76,因此可以得出货车2的离开时间为2.90+1.76=4.66,将货车2的离开事件插入未来事件表。按事件发生的先后顺序,下一个事件为实体3在t=3.08时刻到达系统。 (5) t=3.08,实体3到达:安排下一个(第四个)实体的到达事件,即生成第四个货车(实体4),令其到达时间为3.08+0.71=3.79(0.71为实体3与4的到达间隔时间,见表1-2),并将该事件插入未来事件表。同时,实体3到达时发现卸货平台处于忙态(正在服务货车2),于是进入队列。此时,卸货平台仍然处于忙态,故B(t)仍然为1,但队长Q(t)由0增至1。将实体3的到达时间(3.08)存入其属性。由于实体2的服务过程仍在继续,因此实体3的到达事件没能产生新的完工离开事件,而且实体3的排队时间也无法确定,故P、N、∑WQ、WQ*、∑TS和TS*均未发生变化。∫Q的增加量为0×(3.08-2.90)=0,∫B的增加量为1×(3.08-2.90)=0.18。Q(t)的新值为1,没有超过先前的Q*=1,故最大队长Q*=1保持不变。实体3的离开事件将在实体2离开系统时安排。下一个事件将是实体4在t=3.79时刻到达系统。 (6) t=3.79,实体4到达:安排下一个(第五个)实体的到达事件,令其到达时间为3.79+0.62=4.41,并将该事件插入未来事件表。由于此时卸货平台处于忙态,于是实体4进入队列;B(t)仍然保持为1,但队长Q(t)由1增至2。将实体4的到达时间(3.79)存入其属性,并将实体4排在队列末端(排队规则为FIFO,即“先进先出”)。由于实体2的服务过程仍在继续,因此实体4的到达事件没能产生新的完工离开事件,而且实体4的排队时间也无法确定,故P、N、∑WQ、WQ*、∑TS和TS*均保持不变。∫Q的增加量为1×(3.79-3.08)=0.71,∫B的增加量为1×(3.79-3.08)=0.71。Q(t)的新值为2,超过了先前的Q*=1,故更新最大队长变量Q*=2。与前面类似,此时还不能安排实体4的离开事件(该事件将在实体3离开系统时安排)。下一个事件将是实体5在t=4.41时刻到达系统。 (7) t=4.41,实体5到达:安排下一个(第六个)实体的到达事件,其到达时间为4.41+14.28=18.69,并将该事件插入未来事件表。实体5到达后排在队列尾部,B(t)仍然保持为1,队长Q(t)由2增至3。将实体5的到达时间(4.41)存入其属性。由于实体2的服务过程仍未结束,因此实体5的到达事件不能产生新的完工离开事件,而且实体5的排队时间也无法确定,故P、N、∑WQ、WQ*、∑TS和TS*仍保持不变。∫Q的增加量为2×(4.41-3.79)=1.24,∫B的增加量为1×(4.41-3.79)=0.62。由于Q(t)增至3,故更新最大队长变量Q*=3。与前面类似,此时还不能安排实体5的离开事件。下一个事件将是实体2在t=4.66时刻离开系统。 (8) t=4.66,实体2离开:现在货车2已完成服务并离开。因为队列不空,所以卸货平台继续处于忙态,也即B(t)仍然为1,但队长Q(t)由3减至2。队列中的第一个货车(实体3,在t=3.08时进入系统)离开队列开始服务,其排队等待时间为4.66-3.08=1.58。将实体3的排队等待时间累加到∑WQ中,并令N加1。由于1.58是新得到的最大排队等待时间,故令WQ*=1.58。由于有新货车完成服务,令P加1(增至2),算出货车2的系统逗留时间4.66-1.73=2.93,将其累加到∑TS中;由于这是新的最大系统逗留时间,故将TS*更新为2.93。∫Q的增加量为3×(4.66-4.41)=0.75,∫B的增加量为1×(4.66-4.41)=0.25。由于没有出现新的最大队长,故Q*保持不变。由于实体3已经开始服务,故可安排其离开事件,其离开时间为4.66+3.39=8.05,将实体3的离开事件插入未来事件表。根据未来事件表,下一个事件即为实体3在t=8.05时刻离开系统。 (9) t=8.05,实体3离开:货车3完成服务并离开系统,队列中的第一个货车实体4离开队列开始服务,将其排队等待时间8.05-3.79=4.26(新的最大排队等待时间)累加入∑WQ,令N加1;B(t)仍保持为1,队长Q(t)由2减至1。计算货车3的系统逗留时间为8.05-3.08=4.97(新的最大系统逗留时间),将其累加到∑TS中,令P加1(增至3)。∫Q的增加量为2×(8.05-4.66)=6.78,∫B的增加量为1×(8.05-4.66)=3.39,Q*保持不变。安排实体4的离开事件,其离开时间为8.05+4.52=12.57,将实体4的离开事件插入未来事件表。根据未来事件表,下一个事件即为实体4在t=12.57时刻离开系统。 (10) t=12.57,实体4离开:货车4完成服务并离开系统,货车5离开队列开始服务,将其排队等待时间12.57-4.41=8.16(新的最大排队等待时间)累加入∑WQ,令N加1;B(t)仍保持为1,队长Q(t)由1减至0(队列变空)。算出货车4的系统逗留时间为12.57-3.79=8.78(新的最大系统逗留时间),并将其累加到∑TS中,令P加1。∫Q与∫B的增加量均为1×(12.57-8.05)=4.52,Q*保持不变。安排实体5的离开事件,其离开时间为12.57+4.46=17.03,将实体5的离开事件插入未来事件表。根据未来事件表,下一个事件即为实体5在t=17.03时刻离开系统。 (11) t=17.03,实体5离开:货车5完成服务并离开系统。由于队列为空,卸货平台变为闲态[令B(t)=0]。因为没有新的排队等待时间,故N、∑WQ、WQ*保持不变。算出货车5的系统逗留时间为17.03-4.41=12.62(新的最大系统逗留时间),并将其累加到∑TS中,令P加1。∫Q的增加量为0×(17.03-12.57)=0,∫B的增加量为1×(17.03-12.57)=4.46,Q*保持不变。由于此时卸货平台上没有货车服务,故没有新的离开事件需要安排。下一个事件即为实体6在t=18.69时刻到达系统。 (12) t=18.69,实体6到达:货车6到达系统,此时系统中没有其他货车,卸货平台处于空闲状态,此时的情形与货车1在0时刻进入系统的情况是相同的。的确,货车6的“经历”与货车1也几乎是一样的。首先安排下一个实体(实体7)的到达事件,其到达时间为18.69+0.70=19.39,将该事件插入未来事件表。同时,货车6的到达使卸货平台由闲变忙,但队列仍然为空,因为货车到达时卸货平台是空闲的,因而可以立即开始服务该货车。货车6的排队时间为0,N值加1变为6,∑WQ的增量为0,当然不会出现新的最大排队等待时间。由于没有货车离开系统,因此P、∑TS以及TS*不会发生变化。因为上一个事件到这一事件之间Q(t)与B(t)的值均为0,故∫Q、∫B和Q*均保持不变。将货车6的离开事件插入未来事件表,其发生时间为18.69+4.36=23.05(从未来事件表中可看出,由于这一时间超出了仿真终止时间,故该事件将不会发生)。下一个事件是实体7在t=19.39时刻到达系统。 (13) t=19.39,实体7到达:安排下一个(第8个)实体的到达事件,其到达时间为19.39+15.52=34.91,超出了仿真终止时间(20),故不会发生。实体7进入队列,B(t)保持为1,队长Q(t)由0增至1(没有超过已有的最大队长)。由于不能得出新的排队时间,N、∑WQ以及WQ*均没有发生变化;而且由于没有货车离开系统,P、∑TS和TS*也不会发生变化。∫Q的增加量为0×(19.39-18.69)=0,∫B的增加量为1×(19.39-18.69)=0.70。下一个事件为仿真在t=20时刻终止。 (14) t=20,仿真终止:此时唯一的任务就是将∫Q与∫B更新至仿真终止,也即均增加1×(20-19.39)=0.61。 表1-2的最后一行给出了仿真终止时的情形,包括各统计累加器的最终值。 仿真结束时可计算出所有输出性能指标值。 (1) 平均排队等待时间为 ∑WQ/N=15.17/6=2.53(分钟/货车)。 (2) 平均系统逗留时间为 ∑TS/P =32.20/5=6.44(分钟/货车)。 (3) 平均队长为∫Q/t =15.78/20=0.79(个货车)(t为仿真时钟的终值20)。 (4) 卸货平台的利用率为 ∫B/t =18.34/20=0.92。 表1-3汇总给出了所有输出性能指标的终值。 表1-3手工仿真最终的输出性能指标值 性能指标 结果 产出量 5个货车 平均排队等待时间 2.53分钟/货车(共6个货车) 最大排队等待时间 8.16分钟 平均系统逗留时间 6.44分钟/货车(共5个货车) 最大系统逗留时间 12.62分钟 平均队长 0.79个货车 最大队长 3个货车 卸货平台利用率 0.92(无单位的比例) 在20分钟的仿真中,共服务完5个货车,排队等待时间、系统逗留时间以及队长似乎也不算太差,卸货平台利用率达到了92%。这些结果与预先猜测的结果或由简化的排队模型所得出的结论有着相当大的差异。 1.7面向事件与面向过程的仿真 手工仿真采用的是面向事件的仿真(event orientation)方式,这是因为建模与计算工作是以事件为中心的,无论发生时间还是相应的处理都是围绕事件进行的。这使人们能够控制仿真中的一切,具有完全的灵活性来处理属性、变量与逻辑流程,而且可以在任何时刻了解系统中的所有状态。此外,仿真过程可以用任何一种程序设计语言编程实现(甚至可以使用电子数据表格中的宏来实现一些简单的模型)。事实上,有很多仿真就是这样实现的。采用这种用户编程、面向事件的仿真形式,其计算速度是非常快的。尽管面向事件的仿真形式在原理上相当简单(当然手工实现起来很枯燥),而且有很多优点,但可以想象,对于具有大量不同事件、实体和资源的大型模型来说,其实现过程是非常复杂的。 一种更加自然的仿真方式是让实体以其实际服务过程的形式通过模型,而不是像面向事件的仿真那样去无所不能地控制和跟踪各种事件、实体、属性、变量以及统计累加器。这种仿真方式围绕实体所经历的各种处理过程进行,因而被称为面向过程的仿真(process orientation)。这极其类似于另一种通用的建模工具——绘制流程图。按这种方式,引例的仿真模型可按以下形式构件(想象自己处于货车实体的位置)。 (1) 把自己创建出来,进入系统(一个新实体到达)。 (2) 把当前时间(到达时间)写在一个属性中,用于在后面计算排队等待时间和系统逗留时间。 (3) 排到队列末尾。 (4) 在队列中等待,直到卸货平台空闲下来提供服务(如果幸运,一进入系统卸货平台时卸货平台刚好处于空闲状态,因而可以马上提供服务,此时等待时间为0)。 (5) 占用卸货平台,接受服务(离开队列)。 (6) 计算排队等待时间。 (7) 停留在卸货平台上接受服务(或向后推延一段时间),所推延(delay)的时间正好等于所需的服务时间。 (8) 释放卸货平台(这样其他实体可继续占用卸货平台接受服务)。 (9) 在产出量累加记录表上加1(该记录表贴在墙上),并计算你的系统逗留时间。 (10) 离开系统,把自己清除掉。 以上过程实际上就是用面向过程的仿真语言(如SIMAN)所编写的一种程序,也是Arena处理问题的通常方式。事实上,Arena是将其所建立的流程图形式的模型翻译成SIMAN模型再加以运行。这是一种自然得多的建模方式,而且更重要的是,在建立大型模型时不会像面向事件的建模过程那样复杂。当然,这种建模方式需要更多的幕后支持,如时间推进、统计累加器的跟踪、输出报告的生成等。像Arena这类仿真软件不仅提供了这些幕后支持,而且提供了丰富而功能强大的建模构件,使用户能够相当快捷、可靠地建立复杂模型。 绝大多数离散事件仿真尽管其建模过程是按照面向过程的方式进行的,但实际上都是按照面向事件的方式执行的,只不过事件处理被隐藏起来了而已。如果用户想直接在模型中控制某些特定的元素,Arena所具有的多层次建模特征允许直接使用面向事件的方式建模,在这种情况下用户可以像处理引例中的手工仿真那样按面向事件的逻辑建模和编程。 1.8仿真中的随机性 本节将讨论如何在仿真模型的输入中引入随机性,为什么要引入随机性,以及对仿真输出的影响。在此需要一些概率和统计的知识,读者最好对相关的基本概念、术语和符号有一个回顾。 1.8.1随机输入与随机输出 仿真使用了表1-1中的数据来驱动仿真过程(记录在表1-2中),所得到的仿真输出性能指标值列在表1-3中。这一过程所描述的可能是某个特定的星期一早上从8:00到8:20这段时间中某个车间所发生的事情,假如仅仅只对此感兴趣,那就可以到此为止了。但感兴趣的往往比这要多,例如通常希望知道一个“典型”的早上会发生什么事,以及每天的情况会有什么不同。由于货车在另外一天的到达间隔和服务时间可能与表1-1中的数据不一样,表1-2中的活动跟踪情况当然也会相应地发生变化,因此所得到的输出性能指标值也可能和表1-3不同。所以,对引例仅作一次仿真运行是没有什么用的,因为无法从中知道“典型”的结果是什么,以及结果具有多大的可变性。按统计的术语,从单次仿真运行中得到的结果是一个样本量为1的样本(sample of size one),没有多大价值,过多地相信它是不明智的,很少仅仅依据它来做出重要决策。如果掷出一个骰子,正好朝上的面是4,难道能就此得出结论所有的面都是4吗? 随机输入就像梦魇,但又无法摆脱,因为现实就是这样充满了不确定性,只有引入随机输入才能有效地描述实际情况。在表示随机输入时,并不是像在引例中那样把所有输入值预先做成一个表,而是采用特定的概率分布(probability distribution)来生成(或抽取、抽样)各个观测值,并用它们来驱动仿真。4.4节将讨论如何用Arena的输入分析器来确定输入数据服从什么样的概率分布。当给定了输入分布后,Arena将自动生成服从这些分布的数据。这不仅能使模型更贴近实际,而且能在仿真中使用比所观测到的更多的数据,并能够探索实际中可能没有观测到的一些情况。既然生成随机观测值和处理仿真逻辑是一件非常枯燥乏味的事,就让Arena来完成它们吧。 1.8.2对引例的重复仿真运行 现在可以承认了,表1-1中的数据实际上是Arena以一定的概率分布生成的。到达间隔时间来自于均值为5(分钟)的指数分布,而服务时间则来自于三角分布,其最小值为1,模为3,最大值为6(单位均为分钟)。 现在就可以不仅仅只作单次20分钟仿真运行了,而是可以用相同分布的输入数据作多次(此处为5次)独立的20分钟仿真运行,然后研究每次运行的结果有何不同(这显示了实际中每天早上所发生的不同情况)。每次仿真运行的初始条件与终止准则相同,而且使用相同的输入参数设置(即在统计上是相同的),但使用不同的随机数取值(即统计上是独立的)来生成实际的到达间隔时间和服务时间用以驱动仿真。这些仿真被称为重复仿真运行(replications),借助Arena可以很容易地实现重复仿真运行,只需在相应对话框中输入想要重复的次数即可。考虑作了5次重复仿真,每次使用类似于表1-1的输入数据,生成表1-2形式的仿真记录,得到表1-3形式的结果。 5次重复仿真的结果列在表1-4中。表中第一列数值是第一次仿真的结果,与表1-3中的结果是相同的,但不难看出,每次重复仿真得到的结果有很大的差异,就好像工厂每天发生的情况各不相同一样。 表1-45次重复仿真运行得到的输出性能指标值 性能指标 重复仿真序号 1 2 3 4 5 样本 均值 标准差 95% 置信区间半长 总服务数 5 3 6 2 3 3.80 1.64 2.04 平均排队等待时间 2.53 1.19 1.03 1.62 0.00 1.27 0.92 1.14 最大排队等待时间 8.16 3.56 2.97 3.24 0.00 3.59* 2.93* 3.63* 平均系统逗留时间 6.44 5.10 4.16 6.71 4.26 5.33 1.19 1.48 最大系统逗留时间 12.62 6.63 6.27 7.71 4.96 7.64* 2.95* 3.67* 平均队长 0.79 0.18 0.36 0.16 0.05 0.31 0.29 0.36 最大队长 3 1 2 1 1 1.60* 0.89* 1.11* 卸货平台利用率 0.92 0.59 0.90 0.51 0.70 0.72 0.18 0.23 注:*对“最大值”类性能指标求取均值与标准差似乎值得商榷。“最大值的均值”代表什么含义不够明确,所以有时用各次重复仿真得到的此类性能指标的最大值会更好(如果想了解极值情况)。 表1-4给出了各次独立重复运行输出结果的样本均值与样本标准差(见附录C)。与每次独立运行的结果相比,样本均值提供了对各性能指标更为稳定的估计,而样本标准差则描述了各独立运行结果之间的差异。 因为各次独立重复仿真结果是独立同分布的,可以得到真实期望性能指标μ的置信区间如下(μ可以看作是无穷多次独立重复仿真结果的样本均值): ±tn-1,1-α/2sn 其中,为样本均值,s为样本标准差,n为重复仿真次数(此处n=5),tn-1,1-α/2为自由度为n-1的t分布的1-α/2上临界点。例如,可算出总服务数的95%置信区间(α=0.05)为 3.80±2.7761.645 或3.80±2.04。表1-4的最后一列给出了所有性能指标期望值的95%置信区间半长。上式含义为,通过5次独立重复仿真运行得到的以上置信区间将以95%的可能性覆盖或包含真实性能指标(未知的)期望值。读者可能会注意到,上面得出的置信区间半长(2.04)相对于区间中心(3.80)来说实在是太大了,这表明估计的精度太低了。弥补的办法是增加重复仿真运行次数,因为5次仿真还不足以了解有关输出性能指标期望值的更精确的信息。通过仿真来收集数据的一大好处,就是总能够通过简单地增加重复仿真次数来得到更多信息。 1.8.3备选方案的比较 大多数仿真研究的目的并不仅仅是要建立或设计一个单独的系统就结束了。人们往往想要了解当设计、参数(实际中可控或不可控)或操作发生改变时,系统性能会有什么样的变化。为了让大家看到在比较过程中随机性会产生多大的影响,对以上引例作适当修改后加以重新运行(也是重复运行仿真5次)。所做的修改仅仅是对到达率加倍,也即平均到达间隔时间由5分钟变为2.5分钟。到达间隔时间仍服从指数分布,且仿真中其他各项均保持不变。另有一个批次的货车需要在这一装卸平台上服务,其服务过程与现有任务的服务过程混合进行。由于服务能力的限制,很难判断总服务数是否由于到达率加倍就有显著的增加。但明显可以看出的是,排队时间、系统逗留时间以及卸货平台利用率都随到达率变大有增加的趋势,尽管由于随机因素干扰,但不是每次仿真结果都增加。此外,尽管存在一定的重叠,当到达率加倍时,平均队长基本上也有一定程度的增加。最后说明,仅依赖于单独一次仿真的结果有可能会导致错误的结论。例如,根据第一次仿真得出的平均排队时间可判断,到达率加倍后平均排队等待时间大幅增加,但再观察一下其他各次仿真的结果可以看出,两种情况下的差异并非如此显著。由此可知,当制定重要决策时,仅依赖于单独一次仿真是非常危险的。