Anylogic建模实例

更新时间:2023-10-28 22:07:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

Call Center

到达联络中心需要处理的有两种电话。电话的达到服从一个泊松分布,分布

的到达率分别为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的default value分别为1、100、100、200、100、true、1、100、100、200、100、150。

2. 点击General,拖入7个Plain Variable,分别命名为nOK1、nLate1、

nAbandoned1、nAbandoned2、nLate2、nOK2、nRouted12,并全部选择int类型。

3. 点击Enterprise Library,拖入两个Source,分别命名为source1和source2,

代表两种电话的到达,如下图所示:

4. 再从Enterprise Library中拖入两个Queue,分别命名为queue1和queue2,

之后利用Presentation中的Polyline和Rounded Rectangle画出如下图的图形:

5. 从Enterprise Library中拖入两个Enter,分别命名为enter1和enter2,再

拖入两个Service,分别命名为service1和service2,之后拖入两个ResourcePool,分别命名为agents1和agents2,最后再在Enterprise Library中拖入一个Sink,并将其一一连接起来,如下图:

第三步:设置流程逻辑模型参数

1. 创建Java Class(步骤如Billing Department)。命名为Bill,其具体的代码

如下:

2. 点击General,从中拖入三个Function,分别命名为setCallParameters、

callAnswered、serviceTime,分别用来设置不同call的参数、统计在20秒内处理完毕电话的数量、设置电话的服务时间。

其中setCallParameters在Return type里面选择void,Function argument中写入两个参数:Call类型的call和int类型的type。Code里面写入:

callAnswered的Return type选择void,Function arguments写入Call类型的call。在Code里面写入:

serviceTime的Return type选择double,Function argument选择Call类型的call,int类型的agentType,Code中写入:

3. 点击source1,在Entity class处写Call,Arrivals defined by选择Rate,Arrival

rate填写ArrivalRate1,Entities per arrival填写1,New entity填写new Call(),On exit填写setCallParameters( entity, 1 );在source2处在以上各处分别填写ArrivalRate2、1、new Call()、setCallParameters( entity, 2 )。

4. 点击queue1,在Entity class处写Call,Capacity选择Integer.MAX_VALUE,

On enter填写routingLogic(),并勾中Enable exit on timeout,Timeout填写entity.abandonmentTime,On exit(timeout)填写nAbandoned1++; queue2的参数与queue1基本相同,只有在On exit(timeout)处填写nAbandoned2++。

5. 点击service1,在Entity class出填写Call,Resource quantity填写1,Delay

time写 serviceTime( entity, 1 ),ResourcePool object为null,On enter delay填写callAnswered( entity );,On exit填写routingLogic();,Queue capacity为100。点击agents1,Resource units are选择Individual objects,Capacity defined选择Directly,Capacity填写NAgents1。service2与service1设置基本相同,在上述各处分别填写Call、1、serviceTime( entity, 2 )、null、callAnswered( entity );、routingLogic();、100。agents2与agents1设置基本相同,各处分别为Individual objects、Directly和NAgents2

6. 从General中拖入一个Function,命名为resetStats,返回类型选择void,

Code中写入:

7. 从Analysis拖入两个Histogram data,分别命名为histWait1和histWait2。

二者设置相同,Number of intervals填写为20,Values range选择fixed,minimum为0,Maximum为100。

第四步:建立安排逻辑

1. 点击Actionchart,通过其下面的部件创建如下逻辑图:

2. 设置参数。在idleAgents1处,Type选择int,Initial value为agents1.idle(),

idleAgents2与idleAgents1类似,只不过在initial value处填写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. 选取另一块区域,点击Enterprise Library,从中有、拖入一个Clock,命名

为clock,其Background color、Border color、Hour mark color、Text color、Hour and minute hand color、Second hand color分别为ghostWhite、steelBlue、lightSteelBlue、steelBlue、black、fireBrick。

2. 在Controls中拖入八个Slider,其中四个控制第一类电话的参数,另外四

个为控制第二类电话的参数。控制到达率的勾中Link to,填写ArrivalRate1,minimum value为0,Maximum value为3;控制代理数目的勾中Link to,填写NAgents1,minimum value为50,Maximum value为200;控制专类服务时间的勾中Link to,填写ServiceTime1,minimum value为30,Maximum value为300;控制非专类服务时间的勾中Link to,填写ServiceTime12,minimum value为30,Maximum value为300。另外四个

Slider的参数与之前的四个相同,只是在Link to处分别填写ArrivalRate2、NAgents2、ServiceTime2、ServiceTime21。具体位置如下:

3. 在Controls中拖入一个Check Box,勾中Link to,填写allowRouting12,

Action中填写resetStats()。用来控制第二类代理能否处理第一类的电话。 4. 在Controls中拖入一个Button,Action处填写resetStats()。

5. 在Presentation中利用Polyline、Rectangle、line、Text等创建如上图所示

界面。

6. 在八个Slider上方的Arrival旁的123的Dynamic中的Text中填写

format( ArrivalRate1 )和format( ArrivalRate2 ),Number旁的123的Dynamic中的Text中填写format( NAgents1 )和format( NAgents2 ),Service Time1旁的123的Dynamic的Text处填写format( ServiceTime1 ),Service Time2旁的123的Dynamic的Text处填写format( ServiceTime2 ),Service Time12旁的123的Dynamic的Text处填写format( ServiceTime12 ),Service Time21旁的123的Dynamic的Text处填写format( ServiceTime21 )。 7. 中间界面处的123的Dynamic的Text处从上到下分别填写

format( nAbandoned1 )、format( nOK1 )、format( nRouted12 )、format( nLate2 )、format( nOK2 )、format( nAbandoned2 )。

8. 点击Analysis,拖入两个Time Plot,在Value,并分别填写queue1.size()

和queue2.size()。二者的Time Window填写10000,vertical scale选择fixed,

from 0 to 200。之后再拖入两个Histogram,选择show PDF,Histogram分别填写histWait1和histWait2。最后再拖入两个Pie Chart,点击第一个Pie Chart后,点击add item,Value处填写nOK1,再点击add item,value处填写nLate1,再点击add item,value处填写nAbandoned1。在另一个Pie Chart重复该步骤,在填写处分别填写nOK2、nLate2和nAbandoned2。 9. 设置跳转。该步骤与Billing Department中的第五步的第四个部分相同。

在Presentation处拖入三个View Area,分别命名为AnimationAndOutput、ProcessLogic和RoutingLogic,分别放于相对应的三个区域左上角处。并在三个区域内的右上角创建如下图的Text:

并在表示其他区域的Text下的Dynamic中的On click处填写代码,如:ProcessLogic.navigateTo();

至此,Call Center的基本模型已经创建好了,运行后的截图如下:

本文来源:https://www.bwwdw.com/article/jd42.html

Top