Anylogic建模实例.docx
- 文档编号:8699406
- 上传时间:2023-02-01
- 格式:DOCX
- 页数:9
- 大小:614.50KB
Anylogic建模实例.docx
《Anylogic建模实例.docx》由会员分享,可在线阅读,更多相关《Anylogic建模实例.docx(9页珍藏版)》请在冰豆网上搜索。
Anylogic建模实例
CallCenter
到达联络中心需要处理的有两种电话。
电话的达到服从一个泊松分布,分布的到达率分别为ArrivalRate1和ArrivalRate2。
对于每种电话都有一个队列,而且有些来电在经过一段服从指数分布的时间后会被放弃而离开队列,指数分布的期望分别是AbandonmentTime1和AbandonmentTime2。
有两个代理组,第一个组被培训处理第一种电话,服务时间的期望是ServiceTime1;第二个组被培训来处理第二种电话,服务时间的期望是ServiceTime2。
然而,这些代理也要被交叉培训以便第一组的成员也能处理第二种电话,服务时间的期望是ServiceTime12,第二组的成员也可以处理第一种电话,服务时间的期望是ServiceTime21。
理所应当,交叉培训的代理在他们不擅长的岗位的绩效是相对较低的。
安排电话的逻辑是可以多种多样的。
在本模型中,当一个电话正在被处理时,如果有空闲的代理,它就被安排到相对应的代理上,否则就安排的旁边组的代理上,重复这个过程如果后者是空闲的。
本模型的输出标准是两种电话的队长和服务水平。
服务水平的概念指的是在20秒之内处理完毕的来电所占的比例。
第一步:
创建新模型(同模型一)
第二步:
建立流程逻辑模型
1.点击General,拖入12个Parameter,分别命名为ArrivalRate1、AbandonmentTime1、ServiceTime1、ServiceTime12、NAgents1、allowRouting12、ArrivalRate2、AbandonmentTime2、ServiceTime2、ServiceTime21、NAgents2和ServiceTimeDeviation。
其中NAgents1和NAgents2在Type处选择int型,分别代表处理两种电话代理人数,allowRouting12在Type选择boolean型,用来判断第一种电话能否被第二种代理处理,其他则选择double型,代表服务时间,到达率等。
该12个Parameter的defaultvalue分别为1、100、100、200、100、true、1、100、100、200、100、150。
2.点击General,拖入7个PlainVariable,分别命名为nOK1、nLate1、nAbandoned1、nAbandoned2、nLate2、nOK2、nRouted12,并全部选择int类型。
3.点击EnterpriseLibrary,拖入两个Source,分别命名为source1和source2,代表两种电话的到达,如下图所示:
4.再从EnterpriseLibrary中拖入两个Queue,分别命名为queue1和queue2,之后利用Presentation中的Polyline和RoundedRectangle画出如下图的图形:
5.从EnterpriseLibrary中拖入两个Enter,分别命名为enter1和enter2,再拖入两个Service,分别命名为service1和service2,之后拖入两个ResourcePool,分别命名为agents1和agents2,最后再在EnterpriseLibrary中拖入一个Sink,并将其一一连接起来,如下图:
第三步:
设置流程逻辑模型参数
1.创建JavaClass(步骤如BillingDepartment)。
命名为Bill,其具体的代码如下:
2.点击General,从中拖入三个Function,分别命名为setCallParameters、callAnswered、serviceTime,分别用来设置不同call的参数、统计在20秒内处理完毕电话的数量、设置电话的服务时间。
其中setCallParameters在Returntype里面选择void,Functionargument中写入两个参数:
Call类型的call和int类型的type。
Code里面写入:
callAnswered的Returntype选择void,Functionarguments写入Call类型的call。
在Code里面写入:
serviceTime的Returntype选择double,Functionargument选择Call类型的call,int类型的agentType,Code中写入:
3.点击source1,在Entityclass处写Call,Arrivalsdefinedby选择Rate,Arrivalrate填写ArrivalRate1,Entitiesperarrival填写1,Newentity填写newCall(),Onexit填写setCallParameters(entity,1);在source2处在以上各处分别填写ArrivalRate2、1、newCall()、setCallParameters(entity,2)。
4.点击queue1,在Entityclass处写Call,Capacity选择Integer.MAX_VALUE,Onenter填写routingLogic(),并勾中Enableexitontimeout,Timeout填写entity.abandonmentTime,Onexit(timeout)填写nAbandoned1++;queue2的参数与queue1基本相同,只有在Onexit(timeout)处填写nAbandoned2++。
5.点击service1,在Entityclass出填写Call,Resourcequantity填写1,Delaytime写serviceTime(entity,1),ResourcePoolobject为null,Onenterdelay填写callAnswered(entity);,Onexit填写routingLogic();,Queuecapacity为100。
点击agents1,Resourceunitsare选择Individualobjects,Capacitydefined选择Directly,Capacity填写NAgents1。
service2与service1设置基本相同,在上述各处分别填写Call、1、serviceTime(entity,2)、null、callAnswered(entity);、routingLogic();、100。
agents2与agents1设置基本相同,各处分别为Individualobjects、Directly和NAgents2
6.从General中拖入一个Function,命名为resetStats,返回类型选择void,Code中写入:
7.从Analysis拖入两个Histogramdata,分别命名为histWait1和histWait2。
二者设置相同,Numberofintervals填写为20,Valuesrange选择fixed,minimum为0,Maximum为100。
第四步:
建立安排逻辑
1.点击Actionchart,通过其下面的部件创建如下逻辑图:
2.设置参数。
在idleAgents1处,Type选择int,Initialvalue为agents1.idle(),idleAgents2与idleAgents1类似,只不过在initialvalue处填写agents2.idle()。
在第一个while循环处的条件是idleAgents1>0&&queue1.size()>0,在该循环里面的code为enter1.take(queue1.removeFirst());idleAgents1--;。
第二个while循环处的条件是idleAgents2>0&&queue2.size()>0,里面的code为enter2.take(queue2.removeFirst());idleAgents2--;之后的Decision处的判断条件是allowRouting12。
如果条件为true则进入第三个循环,条件为idleAgents2>0&&queue1.size()>0,循环里的Code为enter2.take(queue1.removeFirst());idleAgents2--;nRouted12++;。
最后进入返回。
第五步:
创建界面
界面总体的布局截图如下:
1.选取另一块区域,点击EnterpriseLibrary,从中有、拖入一个Clock,命名为clock,其Backgroundcolor、Bordercolor、Hourmarkcolor、Textcolor、Hourandminutehandcolor、Secondhandcolor分别为ghostWhite、steelBlue、lightSteelBlue、steelBlue、black、fireBrick。
2.在Controls中拖入八个Slider,其中四个控制第一类电话的参数,另外四个为控制第二类电话的参数。
控制到达率的勾中Linkto,填写ArrivalRate1,minimumvalue为0,Maximumvalue为3;控制代理数目的勾中Linkto,填写NAgents1,minimumvalue为50,Maximumvalue为200;控制专类服务时间的勾中Linkto,填写ServiceTime1,minimumvalue为30,Maximumvalue为300;控制非专类服务时间的勾中Linkto,填写ServiceTime12,minimumvalue为30,Maximumvalue为300。
另外四个Slider的参数与之前的四个相同,只是在Linkto处分别填写ArrivalRate2、NAgents2、ServiceTime2、ServiceTime21。
具体位置如下:
3.
4.在Controls中拖入一个CheckBox,勾中Linkto,填写allowRouting12,Action中填写resetStats()。
用来控制第二类代理能否处理第一类的电话。
5.在Controls中拖入一个Button,Action处填写resetStats()。
6.在Presentation中利用Polyline、Rectangle、line、Text等创建如上图所示界面。
7.在八个Slider上方的Arrival旁的123的Dynamic中的Text中填写format(ArrivalRate1)和format(ArrivalRate2),Number旁的123的Dynamic中的Text中填写format(NAgents1)和format(NAgents2),ServiceTime1旁的123的Dynamic的Text处填写format(ServiceTime1),ServiceTime2旁的123的Dynamic的Text处填写format(ServiceTime2),ServiceTime12旁的123的Dynamic的Text处填写format(ServiceTime12),ServiceTime21旁的123的Dynamic的Text处填写format(ServiceTime21)。
8.中间界面处的123的Dynamic的Text处从上到下分别填写format(nAbandoned1)、format(nOK1)、format(nRouted12)、format(nLate2)、format(nOK2)、format(nAbandoned2)。
9.点击Analysis,拖入两个TimePlot,在Value,并分别填写queue1.size()和queue2.size()。
二者的TimeWindow填写10000,verticalscale选择fixed,from0to200。
之后再拖入两个Histogram,选择showPDF,Histogram分别填写histWait1和histWait2。
最后再拖入两个PieChart,点击第一个PieChart后,点击additem,Value处填写nOK1,再点击additem,value处填写nLate1,再点击additem,value处填写nAbandoned1。
在另一个PieChart重复该步骤,在填写处分别填写nOK2、nLate2和nAbandoned2。
10.设置跳转。
该步骤与BillingDepartment中的第五步的第四个部分相同。
在Presentation处拖入三个ViewArea,分别命名为AnimationAndOutput、ProcessLogic和RoutingLogic,分别放于相对应的三个区域左上角处。
并在三个区域内的右上角创建如下图的Text:
并在表示其他区域的Text下的Dynamic中的Onclick处填写代码,如:
ProcessLogic.navigateTo();
至此,CallCenter的基本模型已经创建好了,运行后的截图如下:
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Anylogic 建模 实例
![提示](https://static.bdocx.com/images/bang_tan.gif)