工具条提供快速访问用户常使用的命令。
当您把鼠标放在工具条按钮上时,会出现它的名称。 标准
New 创建新的 AnyLogic 元素。 给从下拉列表选择的元素类型命 名:它可以是 Model , Active Object Class, Java Class, Java Interface , Dimension , Experiment , 或者 Library .
Open model 打开一个存在的 AnyLogic 模型。
Save model 在当前选定的模型保存所有没有保存的变化。 Save all models 保存所有当前在工作空间展示的模型。 编辑
Undo 取消上一步操作
Redo 恢复上一步撤销的操作。
Cut 剪切当前选中的元素。
Copy 复制当前选中的元素。
Paste 粘贴剪切板中的内容。
Delete
删除当前选中的元素。
模型
Build model 构建当前选中的模型。
Build All 构建工作空间中所有打开的模型。
Debug 开始调试从下拉菜单选中的试验。
Run 运行从下拉菜单选中的试验。
Search... 根据指定的字符串在工作空间中进行查找。 图形化编辑器
Zoom Out 缩小在图形化编辑器打开的图表。
Zoom 展示在图形化编辑器打开的图表的比例。您可以通过从下 拉列表选择另一个值,或者使用这个控件边缘的 Zoom In和 Zoom Out工具条按钮 来改变当前的比例。
Zoom In 放大在图形化编辑器打开的图表。
View Areas 打开视图区域列表。用户可以从下拉列表选择任何一个, 而且在图形化编辑器当前打开的图表将会显示选中的视图 区域。
Enable/Disable
支持 /不支持图形化编辑器的栅格。
栅格
Bring to Front 在堆起命令下 — 也就是把它放到前边, 改变选中演示图形 的位置。
Bring Forward 在堆起命令下 — 也就是把它向前移, 改变选中演示图形的 位置。
Send to Back 在堆起命令下 — 也就是把它放到后边,改变选中演示图形 的位置。
Send Backward 在堆起命令下 — 也就是把它向后移,改变选中演示图形的 位置。
帮助
Get Support 打开 Get Support对话框使用户可以通过邮件向 AnyLogic Technical Support Team问任何问题。
AnyLogic 状态条
状态条被放置在 AnyLogic 窗口的下边部分。它展示与当前操作和工作文本 相关的信息。
状态条包含为不同类信息的设计的几个部分。
堆大小
对齐左部,堆大小 显示 Java 记忆(Java 堆大小)的
大小。在上边的例子中,您可以看到当前分配的 29M 中的 19M 被使用。在这部 分上边晃动鼠标来得到更多详细的信息。
右侧的 Run Garbage Collector
按钮使用户可以运行 Java Garbage
Collector ,它明确地破坏所有未使用的目前没有由 AnyLogic 参考的 Java 对象。 当可用的记忆数量变少而且用户需要明确地增加,但是不等待 Garbage Collector 的自动调用时,这个选择很重要。
堆大小部分可能被隐藏。如果您希望关于堆情况的信息被展示,在 改变相应的设置。状态条的这个部分的可视性 由选框 Show heap status (Restart the application to apply option)控制。 按照 控件的名称,您需要重新开始 AnyLogic 来申请与这个选择有关的变动。 状态条的以下部分是文本敏感的, 而且展示与当前选定的视图或编辑器相关 的信息。
在以上的例子中,用户正在图形化编辑器中用 ResourcePool 类型的 resourcePool 对象。
所以在状态条我们可以看到这个对象的名称和类型:
ResourcePool—ResourcePool
当前操作的类型:
Selection
最重要的事情:在图形化编辑器中的鼠标的当前坐标:
X=91, Y=10
anylogic实验报告(1)
《物流系统建模与仿真》 AnyLogic 排队系统仿真实验报告 2013-2014学年第 1学期
姓名 古菊陵
学号
班级 11级物流管理
成绩
2013年 11月 30日
一、实验目的
通过学习操作 Anylogic 仿真软件,学会使用 Anylogic 对单 线排队系统进行仿真的实验, 了解该仿真系统的运行流程, 熟悉 对其的基本操作, 了解排队方案中存在的不足, 并知道如何借助 Anylogic 对仿真结果的优化, 改进排队方案, 达到时间和效率上 的最,结合实际情况解决实际问题。
二、实验时间和地点
时间:2013-2014学年第 1学期
地点:管理系学生宿舍
三、实验内容
借助 Anylogic 仿真软件建立一个简单的离散事件系统—— 单线排队系统, 并在仿真的过程中, 认识包括实体、 属性、 事件、 活动和进程等功能要素,运用 Anylogic 仿真软件模拟实际生活 中的排队现象,并对排队现象进行仿真分析及结果优化。
四、 实验原理
1、轻变换抽象层次和视点直到它完美地适用于需要解决的问 题;
2、如果认为系统动态学的抽象层对解决问题绰绰有余,使用整 合聚集表;
3、如果系统能以流程(操作顺序、实体、资源)的形式显示出 来,使用离散事件建模;
4、如果对具体的对象行为更感兴趣,使用基于主体的建模;
5、可以将不同的方法用于一种模型。 五、实验步骤
六、实验结果与优化
七、思考与实验体会
第一次做这个实验的时候, 从下载软件到安装就已经感觉到
了实验的困难程度, 明显感觉到了很大的压力。 在一切安装完毕 之后不知道如何下手, 从哪一步做起。 然后就翻看老师给的材料、 ppt 文档看了半天也不知道怎么弄,寝室人也不知道怎么做,后 来想起来老师说的朱立建同学做好了,我们有问题可以找他帮 忙,于是,我就开始询问朱立建,在朱立建同学的热心帮助下, 给我耐心认真的讲解, 每一步都很详细, 看他给我掩饰实验步骤, 一步步的看明白,慢慢的 明白了实验的大致过程,然后自己根 据朱立建的讲解把前面的程序做了一下, 建立排队模型, 设定时 间, 插入旁边的功能图标, 设定参数等, 根据老师发的排队照片, 一步步地进行,最后点击运行,发现有一些错误,然后根据错误 指示慢慢的找出了错误的地方, 然后重新设置参数。 最后优化完 毕之后在点击运行, 这下就可以了, 就这样一步步地弄终于弄好 了,虽然用了整整一下午的时间,但是最后还是终于弄好了,最 后把分析图数据什么的记录下来, 最终完成了实验的优化。 通过 这次实验掌握了一些 Anylogic 系统仿真软件的操作方法,了解 了其一些运行流程。并通过 Anylogic 系统仿真软件仿真了实际 中的排队现象, 使我对排队现象又有了更加深入的认识, 基本掌 握了运用 Anylogic 系统仿真软件仿真排队现象。
anylogic 方便的操作功能
代码提示功能
AnyLogic 支持代码提示功能。有了这项功能,您在输入函数、变量以及参 数的时候就不用输入它们的全名了, 从而大大减轻了代码输入的工作量。 您可以 使用代码提示向导输入变量名或者函数名。
代码提示向导看起来就像一个下拉列表, 其中包含了变量、 参数和函数名称, 并且按照字母顺序排列, 您只需从这个列表中选择您想输入的名字, 它就会被自 动插入到代码中了。
利用代码提示插入名称
1. 把光标移动到将要插入名称的位置。
2. 同时按下 Ctrl + space(Mac OS:Alt-space)。代码提示向导将会弹出,其中 列出了模型中的所有变量和函数。
代码提示向导
3. 移动滑块,找到您想插入的名称,或者输入名称的前几个字母,直到该 名称位于代码提示向导列表中的最顶部。
4. 点击想要插入的名称。代码提示向导将会在弹出的文本框中显示该名称 对应对象的细节描述。
5. 双击该名称即可将需要的代码插入到表达式中。
可以选择的,您可以改变密钥连接,这个密钥连接在密钥页面,在 AnyLogic 引起代码完成。
使用代码帮助的一些提示
·您可以使用鼠标或者键盘(Up Arrow,Down Arrow, Page Up, Page Down, Home, End, Enter)来从列表航行或选择直线。
·如果您在文本帮助列表选定了一条线, 您可以向右侧打开的窗口里看到线 的 Javadoc 描述。
·在列表里选定的线上点击或者按下 Enter 来插入选项到编辑器。
·您可以在 Javadoc 注释里访问特殊内容的帮助特征。
撤销与重复
您可以撤销上一步执行的操作。
撤销上一步执行的操作
1. 点击工具栏上的 Undo 按钮,或者在主菜单中选择 Edit | Undo,或者
同时按下 Ctrl+Z(Mac OS:Cmd+Z)。
重复上一步执行的操作
1. 点击工具栏上的 Redo
按钮,或者在主菜单中选择 Edit | Redo,或者
同时按下 Ctrl+Y(Mac OS:Cmd+Y)。
如果您希望一次取消所有没有保存的改变,使用 revert 选项。颠倒模型,您在模 型里撤销所有变化,因为它在最后一次时保存。
颠倒模型
1. 在工程视图右击模型,并从弹出的菜单选择 Revert .
2. Revert 对话框会弹出,提示您在选定模型中所有没有保存的变化都会丢 失。点击 Yes 完成颠倒。
文本检索
AnyLogic 支持在工作台内进行文本检索。
文本检索
1. 点击工具栏中的 按钮,打开检索窗口。
检索对话框
2. 在 Containing Text文本编辑框中输入您想要检索的字符串。 在下拉菜单 中,您可以选择最近执行过的检索,或者对其进行调整。在检索窗口中 输入字符串表达式时,您还可以使用通配符:
“*” :代替任意长度的字符串,包括空字符串。
“?” :代替一个字符。
“\” :转意字符,如果在您的检索表达式中本身包含了星号、问号或者反 斜线,您需要在这些字符前输入一个转意字符,以表示这些字符不作为 通配符使用。
3. 如果在检索时需要区分大小写,您可以选中 Case Sensitive选项。
4. 如果在检索时需要指定模式面,您可以选中 Regular Expression选项。 模式面用于限制值的词汇空间 (表示值的字符串所组成的集合) , 从而限 制了值空间。模式的值称为正则表达式。关于模式语法的更多信息,可 以参照 java.util.regex.Pattern 类的相关文档。
5. 使用 Scope 单选按钮指定检索范围。这个范围可以是整个工作空间 (Workspace 选项) ,也可以是当前选中的模型元素(Selection 选项) 。 如果选中了 Selection 选项,则 AnyLogic 将会在当前选中元素的所有分 支中进行检索。
6. 点击 Search 按钮,检索完成后,检索结果将会出现在检索视图 ( ) 中。
复制,移动和删除图形
您可以复制,移动和删除图形。
在剪切板上复制选中的图形
1. 从主菜单选择 Edit|Copy , 或者右击选中的图形并从弹出的菜单选择
Copy ,或者按下
Ctrl+C(Mac OS:Cmd+C).
剪切选中的图形
1. 从主菜单选择 Edit|Cut ,或者右击选中的图形并从弹出的菜单选择 Cut ,或者按下 Ctrl+X(Mac OS:Cmd+X).
2. 在图形上拖动选中的矩形。
粘贴剪切板上的内容
1. 从主菜单选择 Edit|Paste ,或者右击图表的空白区域并从弹出的菜单选 择 Paste ,或者按下 Ctrl+V(Mac OS:Cmd+V).
2. 移动粘贴的图形到理想的位置。
复制选中的图形
1. 按下 Ctrl 同时拖拽选中的图形 (Mac OS:Cmd-drag).
移动选中的图形
1. 拖拽选中的图形或者使用箭头密钥。
删除选中的图形
1. 从主菜单选择 Edit|Delete , 或者右击选中的图形并从弹出的菜单选择 Delete ,或者按下 Del 键。
多种模拟
如果我们考虑为事业应用仿真模拟, 我们将会找到模型开发的三种主要方法 论:System Dynamics (SD), Process-centric (“ 离散事件 ”, DE)模拟, 和 Agent Based模拟 (AB).当前两个在 1950s 和 1960s 被提倡时,基于智能体的模拟在 2000年之 后由仿真实习者采用, 但是从那之后就被大量累积。 系统动态和离散事件模拟使 用事情上的系统层(高 — 低)视图,同时基于智能体的方法是底 — 高:这里模拟 者关注单一对象的行为。
系统动态方法假设高抽象层而且主要被应用在重要层问题。进程 — 中心 (“DE”) 模拟主要被用在操作和战术层上。 基于智能体的模型被用在所有层:智能 体可以用来竞争公司,消费者,工程,构想或者车辆,步行者,机器人等等。 我怎样从访问不同模拟方法中获益?
模拟基于抽象, 简单化, 定量和分析。 但是为什么使您的工具指定这开始两 个步骤?
通过系统动态模拟自治实体是可能的, 但是如果基于智能体的工具可用, 为 什么介绍这个附加的抽象和伴随的假设?
相反的,当 SD 方法就在手边时,为什么使用分离方法来模拟连续变量? 而且如果您正在模拟的环境足够复杂, 为什么研讨在抽象的哪个集合上离当 一个工具可以提供它们所有时的现实最近。
AnyLogic 是相当灵活的方针软件,而且为您提供开发模型的各种方法。 ?如果有一个单一的数据,使用基于智能体的方法。
?如果只有关于全局依赖的信息,使用系统动态。
?如果系统可以很容易被描述为一个进程,我们建议离散事件方法。 ?如果系统足够复杂,它可能有所有那些方面,那么您可以考虑混合方法。 用 AnyLogic 您永远不会被一种特定的仿真方法局限,您总是可以选择最有 效的一个,或者混合的,来解决问题。
基于智能体的模拟
虽然您可以在文献中找出基于智能体的模拟的各种定义的数量, 从实际应用 的观点, 基于智能体的模拟可以被简单定义为重要地分散, 单独 — 中心的 (相对 系统层)方法来模拟设计。当设计一个基于智能体模型,模拟者识别活动实体, 智能体(它可以是人,公司,工程,资产,交通工具,城市,动物,轮船,产品 等等) ,定义它们的行为(主要驾驶员,反应,历史, … )把它们放在一个特定 环境,可能建立连接并运行仿真。全局(系统层)行为然后显现为几个单一行为 的相互作用的一个结果。 AnyLogic 提供基于智能体的模拟(也可以是
和 ) ,并允许您用其它方法有效地编辑它。 基于智能体的模拟是查看您机构的一个新方法
传统的模拟方法把公司雇员,工程,产品,消费者,搭档等等视为总计平均 数量或者一个进程里的被动的实体 /资源。比如,系统动态模型被充满假设,比 如“我们在 R&D有 120个雇员,他们一年可以设计大概 20个新的产品” ,或者 “我们有一个 1200辆卡车的车队,他们可以在一个月移动很多货物,而且他们 中的 5%每年需要被替换” 。 在进程 — 中心的 (也可以被看成离散事件) 方法,您 会视您的组织为一个进程的数量,比如“一个消费者呼叫中心,它用类型 A 的 操作首先被处理,这大概用平均 2分钟时间,然后呼叫的 20%需要被继续” 。那 些方法实际上比“基于电子表格的模拟”更有能力,它们可以占用团体动态,非 线性,但是它们忽视所有那些人,产品,工程,设备部分,资产等等都不相同的 事实,有它们的历史,目的,愿望,单独属性和复杂的关系。比如,人根据他们 的收入和职业可能有不同的期望, 可以在不同的团队有相当不同的生产力, R&D
工程相互影响并竞争, 而且可能一个依赖另一个, 飞机有它们的独特的和不变的 维护和时间表, 它们的编辑可能导致机群可用性的问题, 一个消费者可能在做购 买决定之前咨询他的家庭成员等等。 基于智能体的方法对那些限制是自由的, 因 为它的行为和它们的交流。 基于智能体的模型实际上是一个相互作用的活动对象 的集合, 这些活动对象反应实质世界的对象和关系, 所以是一个走向了解和管理 今天业务和社会系统的复杂性。
基于智能体的模拟可以使您的(当前没有使用的)数据为您工作
现在公司和政府组织已经在他们的没有充分使用的 CRM, ERP, HR资料库里 积累很多重要数据。基于智能体的模拟是改变数据并使它们工作的自然的方法。 只要基于智能体的模拟本质上是单独基于的, 它们可以用属性是真实的智能体被 移动,而且可以从一个 CRM 系统(如果我们正在模拟市场)或者从 ERP/HR资 料库(如果我们正在组织里模拟人力资源的动态)来直接读取。这为您提供 (a)容易, (b)非常准确和 (c)目前总是模拟,预言,比较脚本和优化战略。
应用基于智能体的模拟
一个应用 ABM 的很好的例子是消费者市场。在高动态,竞争的复杂的市场 环境(电信,保险,租赁,健康等等) ,消费者的选择本质上依赖单独特性的数 量,消费者的内在动态,交易的网络,外部影响,这些可能在基于智能体的模拟 范例内被最好地占有,本质上从 CRM (消费者关系管理)系统得到单独中心的 数据的高可用性,这可以被直接用做智能体的参数化。
另一个传统的例子可能很流行。 这里智能体是人, 他们可以是容易受到影响 的,有传染的,恢复的,有免疫力的等等。 ABM 允许明确地占用社会网络,在 人和他们的多样性之间交流,所以得到疾病范围的更好的预测。
您不可以认为 ABM 是只对大量人类团体适用的分析方法。 在制造业, 后勤, 供应链或者 ABM 比其它任何事物工作更好的事业进程有问题。比如,一个复杂 的有内部状态, 固有时间, 在不同模式下有不同的反应等等计算机的行为可能由 一个分离对象(智能体)被有效地模拟,这里用一个状态流图,它与制造业进程 的工作流链接。供应链的参与者(公司 — 生产商,整个销售,零售商)有他们自 己的目的和规则, 并且可以天然地被描绘成智能体。 在有内部状态和动态, 为公 司资源竞争的公司内,智能体甚至可以是工程或者产品。
AnyLogic 为基于智能体的模拟提供
再决定使用基于智能体的方法之前, 您应该调查问题并证实传统的方法是否 可以使用。 比如, 如果您正在模拟的系统与进程流样式符合地很好 (也就是可以 在本质消极的实体上被描述成一个操作序列) ,使用 AnyLogic Enterprise Library对象而不是确定那些实体的单独行为会很有意义。 简单地, 如果您系统里的实体 没有独立性(没有独立的历史,时间等等) ,应用系统动态方法不是很好。 在实践中使用的基于智能体的模型是多种多样的, 而且它实际上可能开发普 遍的 “基于智能体的库” 并减少建模者的工作到操作数量是不可能的。 但是有一 些可以重新使用的“设计样式” ,它们确定基于智能体的模型的开发并由 AnyLogic 直接支持。这些样式在:
?模型建筑
?智能体同步 ( )(
?空间 (连续 () 或者离散 () 或者 ), 流动性和空间动画
?智能体连接 () (网络 (), 比如社会网络 ) 和交流
()
?智能体的动态的创建和破坏 ()
从建筑观点看,一个典型的 AnyLogic 基于智能体的模型可以有至少两个活 动对象类:为顶层的智能体可以被包含的对象的 Main 类和智能体的一个类,比 如 Person. 在更多情况下, Person 类可以被声明为代理 (Agent )— 这是活动对象 () 类的一个特殊子类,它拓展对基于智能体的模拟有用的服务的后 者。 很多智能体可以被嵌入到 Main 对象, 如典型 Person 的复制的对象 (replicated ) 人。一个或者更多的环境 () 的构建可能在 Main 层被定义来确 定被智能体分享的属性。 您在您的基于智能体的模型中定义其它等级制度是自由 的,比如,您可以有公司 --智能体,它们包含雇员 — 智能体和消费者 — 智能体之 间的交流。
动力系统模拟
动力系统模拟实际上是系统动态模拟方法的原型。 它作为设计进程的一个标 准部分被应用在机电一体化, 电学, 化学和其它技术工程训练。 一个动力系统的 根本的数学模型可能包含很多状态变量和这些变量上的各种形式的代数差分方 程。 与系统动态比较, 这里整体的变量有 “物理上” 的意义:位置, 速度, 加速, 压强,专注等等,它们是固有连续的,而且不聚集一些实体。
与系统动态 (System Dynamics), 离散事件 (Discrete Event) 和基于智能体的 () 模拟方法一起, AnyLogic 提供动力系统方法的方便的工具:
?AnyLogic 为定义微分方程和微分方程提供动态变量:
— 为微分方程
— 为公式
?AnyLogic 为解决序数的微分方程,代数微分方程或者代数方程提供大量 方法 () 的一个集合。 AnyLogic 在运行期间选择大量解算 器, 这与系统的行为一致。 当解序数的微分方程时, 它用混合步骤以向前 顺序的 Runge—Kutta 方法开始。否则, AnyLogic 在其它解算器塞住 —Newton 方法。这个方法改变结合的步骤来达到给定的精确性。
?AnyLogic 使用 Finite Element方法 提供模拟物理系统(您可以在这里找到 方法描述:http://en.wikipedia.org/wiki/Finite_element). 这种情况下,数组 () 和排列 () 类型的维数可以被广泛地使用, 而且您可以参考方程 里的下一个和以前的数组元素。
模型样本 :Vibrating String
?而且, AnyLogic 是唯一存在的工具,这里连续和分散的行为是同一种语 言的两个部分, 被定义在一起而且可以自然地相互操作。 您可以使您通过 添加离散事件使您的模型混合, 这将会影响模型的连续行为, 比如, 您可 以添加一个条件事件, 这个条件事件管理连续变量并当某个变量到达定义 的门槛时进行某个行为或时间, 这改变一个方程的参数, 所以影响正在模 拟的动力系统。
?您可以显露变量到活动对象的接口并用其它活动对象的接口变量连接它 们 (connect them with intertface variables of other active objects). 连接的变 量在任一时刻会有相同的值, 也就是说, 这个办法为连续时间对象提供相 互作用。 这使用户可以创建与在块图表最常使用的块等价的块 — 控制引擎 使用的典型的图形化模拟语言。
模型样本 :Population
ADS中直流仿真案例
ADS 中直流仿真案例
通过 ADS2009自带的两个案例了解如何创 立和运行直流仿真的过程
【案例一】 BJT 仿真。
(1)运行 ADS2009,待软件启动完毕,进入软件主界面窗口。
(2) 在 ADS2009主界面窗口单击工具栏按钮, 可以看到系统已 经创建名称为“ Tutorial/SimModels_prj”的工程,双击打开该工 程如图所示:
(3)在工程 “ Project View” 选项卡目录中选择设计 DC1.dsn , 双击打开,如下图:
(4)执行菜单命令【 Simulate 】 /【 simulate 】或单击仿真按 钮,得到如下图所示的数据。该数据以列表的形式给出,其 中三极管基极电压为 678.8mV , 集电极电压为 3.000V , 即将三 极管看作是一个反相器,其输入电压极性与输出电压极性相 反。
(5)在原理图设计窗口,执行菜单栏命令【 Simulate 】 /【 Annotate DC Solution】 , 可以看到电路图中各个节点标出了
当前的电压值或电流值,如下图所示:
【案例二】 带参数扫描的直流仿真。
(1)运行 ADS2009,待软件启动完毕,进入软件主界面窗口。
(2) 在 ADS2009主界面窗口单击工具栏按钮, 可以看到系统已 经创建名称为“ Tutorial/SimModels_prj”的工程,双击打开该工
程如图所示:
在工程“ Project View”选项卡目录中选择设计 DC2.dsn ,双击 打开,如图所示:
(3)在原理图窗口中查看 PARAMETER SWEEP控件的参 数,并设置如下:
● Sweep Var=“ Vgg1” ,表示 Vgg1为一个扫描变量
● SimInstanceName 【 1】 =“ DC1” ,参数扫描仿真实例名为 “ DC1”直流仿真器
● Start=2, Vggl 参数扫描的起始值为 2
● Stop=3, Vggl 参数扫描的终值为 3
● Step=0.25, Vggl 参数扫描间隔为 0.25
(4)直流仿真器 DC 参数设置如下:
● SweepVar=“ Vdd1” , Vdd1为另一个扫描变量
● Start=0, Vdd1参数扫描起始值为 0
● Stop=6, Vdd1参数扫描终值为 6
● Step=0.1, Vdd1参数扫描间隔为 0.1
(5)变量控件 V AR 中参数设置如下:
● cells=28,变量 cells 的默认值为 28
● Vdd1=4,变量 Vgg1的默认值为 4
● Vgg1=2.5,变量 Vgg1的默认值为 2.5
(6) 执行菜单命令【 Simulate 】 /【 simulate
】或单击仿真按钮, 得到如图所示的参数扫描曲线:
物流仿真,系统仿真,ED仿真软件案例二超市系统
案例2—超市系统
背景
在我们当地的超市,有八个结账通道可用。周六,研究开始进行,收银台从9 点到17点开放。由于试验的目的,我们忽略了17点以后发生的任何事。在这 样基本的一天内,有平均有1400购物者到达。 ? ? ? 当顾客们选择完商品后,他们会去结账,选择一个队列进行排队。 有时候,如果其它队列前进速度更快,则客户会另外选择队列。这就是所谓 的“争夺”,这可以减少队列长度并使结账工作人员的工作压力更为平均。 虽然在现实中,顾客排队秩序会因为“争夺”而发生轻微的改变,在我们的模型 中,我们最初选择了顾客接受服务的队列秩序为基于先进先出的。此外,我 们假设所有的结账工作人员的工作效率是相同的(相同柜台)。 顾客们已经开始抱怨在柜台的等待时间,管理者想要详细的研究这个问题。 他认为对这个问题进行彻底的检查还将有助于解决在其他生意中遇到的类似 问题。研究将集中于不同的排队策略对顾客的排队时间和队列长度的影响。
?
背景
? 策略1(固定的人员,服务时间与商品数目无关) 在这种情况下,所有柜台均开启,每一位顾客接受服务的时间为平均2.5分钟 的负指数分布。 策略2(固定的人员,服务时间决定于商品数目) 这是第一种策略的一种变异,不同之处在于服务时间取决于购买商品的数目。 我们假设每个条目的扫描时间为6秒,付款时间为30秒。 测试表明下页的经验概率分布可用于货物数目的估计。 战略3(固定人员,服务时间取决于商品数目和顾客类型的区别。) 在这个战略中,首先是快速结账通道:只有十件商品以下的顾客才可以使用 这个通道。在这个情况下,我们假设此类所有的顾客都会使用这个通道。 战略4(固定人员,服务时间取决于商品数目,优先服务商品最少的顾客。) 这个方法是从资本流动的角度来研究,但是会导致超市出现重大问题。修改 第二个模型使得商品最少的顾客最先得到服务。 ? ? 策略5(可变人员,服务时间取决于等待的人数。) 柜台开启的数量现在取决于队列中顾客的数量:如果是0-3个顾客在等待,则 再打开柜台2,4-6柜台2开启,以此类推,最高到22个顾客时开启8个柜台。 当排队顾客数量下降时,关闭相应数量的柜台。
? ?
?
? ?
背景
任务
? ? ?
1.准确的分析每一种策略。在利用率(理论的)的基础上,尽量分析出哪 一个系统运行最有效。 2.为每一种策略建立模型并分析每种策略下的平均排队时间和队列长度。 (在策略3下两种顾客类型都要分析) 3.你会推荐哪一个系统?他们可以互相进行比较吗?还有没有其
他更好的 选择?
任务分析
平均客流是每天1400名顾客。每次服务时间平均需要150秒。则一个 柜台的服务容量为3600/150=24位每小时。在策略1中,总共的服务 容量为8*24=192位每小时。在一个8小时工作日中,代表着1536位顾 客,所以利用率为1400/1536=0.91. ? 策略2:由顾客购买商品数量离散分布图可以得到所有顾客平均购买 量为20.5.所以顾客平均服务时间为30+6*20.5=153s。所以一天内可 接待 顾客最大量为1506,服务台占用率为0.93. ? 策略3中总体柜台的利用率是不变的,但是由于增加了快速结账通 道,所以快速通道的利用率有所下降81%,因此有所进步。 ? 策略4的利用率跟策略2中是相同的。策略5意味着缩小的容量,因此 会有较长的队列。 ?
任务分析
? 当顾客结束了选择商品之后,他们就到达柜台,当到达柜台的时候顾 客选择一个队列。通常,顾客会选择最短的队列,并且当某个其他队 列速度更加快的时候,顾客会选择更换队列。队列的服务规则是先进 先出规则。结账后,顾客就离开系统。 上述规则适用于策略2,策略2还额外增加了服务时间根据商品数目而 有区别。相对于策略2,先进先出规则在策略4中则不适用,客户是排 序,但是购买数量少的顾客将会排在最前面。在策略3中,两种顾客 类型被加以区分,每一种都有自己的队列。 最后,策略5与策略2非常相似,除了柜台的开放数目是根据当前队列 长度而定之外。 模型的时间单位是秒。一个工作日包括8个小时,从9点开始到17点。 现实中,超市在17点之后会仍然开门,但是在模型中不会考虑这段时 间。
?
? ?
任务分析
最重要的模型数据是: ? 到达间隔。1400顾客每天,意味着到达间隔是20.6秒,指数参数分布。 ? 缓冲区 模型中将会有1个或者两个队列,代表顾客的队列,容量为100. ? 进程时间分布 模型中唯一的进程就是结账。在策略1中,时间是平均为 150秒的指数分布。对于其他的策略,可以应用以下公式:进程时间 = 6 x 商品数目 +30。因此,一个商品数目必须在之前就分配给每位顾客。例 如,商品数目可以在顾客按照规定的经验分布到达的时候随机分配给顾 客。
建模过程
策略1、2、4、5的模型框架图相同,如下所示:
建模过程
策略1:customers(source原子):生成顾客
建模过程
策略1:Queue2(queue原子)柜台前的队列。
建模过程
策略1 :Checkout 1 to 8
:柜台
建模过程
策略1 :实验设置
建模过程
策略2:在本模型中,会用到一个经验分布原子。用来生成经验分布。该原子
有一个表格,可以在里面编辑经验分布的概率以及相关的数值。如下图所示:
在这个模型中,我们
需要50行来进行编辑该分布。通过对该原子命名为 groceries,我们可以在4DScript语句编辑时直接引用该分布中的数据。
建模过程
策略2:Checkout 1 to 8 :柜台
建模过程
策略3:在这个策略下,两个队列被用到。一个用于快速结账通道,一个用于
普通通道。模型图如下所示:
建模过程
策略3:Customers: 增加标签来记录购买数目
Send to: 8. By label value (conditional): if the value on the label named items of the 1st atom in the queue is
建模过程
策略3:Checkout 1 to 8: 柜台
Cycletime: 6*Label([items], first(c)) + 30 查询顾客所携带的标签,得到标签 值,并进行公式运算得出所需服务 时间。
建模过程
策略4:Queue2: 排队规则改变为4选项
Queue discipline: 4. Sort by Label Ascending: The atoms with the lowest value of the label named items are put in front. 根据标签值来区分,标签[items]的值 最小的原子放在最前面。
建模过程
策略5:由于柜台开放数目根据当前队列长度而定,所以每次一个顾客到达或
者离开的时候,进行一次判定。 Trigger on entry: Label([maxoc], c) := 1 + trunc((Content(c)-1)/3) Trigger on exit: 与进入触发器相同。 Send to: max(1,indexmatch(Label([maxoc],c),1, ocready(count,c)))
建模过程
函数说明: Trunc(c):取整函数,返回值为括号内数值取整后的值。 Content(c):返回当前原子内所包含原子的数目。 OCReady(1, c):如果当前原子的输出通道可以打开则返回1,否则返回0.
实验结果
转载请注明出处范文大全网 » anylogic工具条