anylogic第三课—多层建筑行人疏散仿真讲解

1.本节主要的讲解

  1. Agent类的概念
  2. Collection集合概念
  3. 疏散逻辑的实现
  4. 行人仿真统计
  5. actionChart(行动图)的使用

2.新建项目之后,新建一个新的Agent—MyFloor1。

在MyFloor中拖拉Rectangular Area,Service with Lines

pedSource —pedService—pedGoTo—pedWait

在启动的时候,希望楼层有100个人:在pedSource中Arrive according to:Calls of inject() function,然后在main主窗口设置pedSource.inject(100);

正常中断过程:疏散

       当一个行人块的cancel()函数被调用,行人快速地被引导从出口离开,此后他们将服从一个你用行人快定义的过程

3.一楼疏散的过程书写

当疏散的时候,行人需要从二楼到一楼,所以需要enter—pedEnter这两个模块

anylogic第三课—多层建筑行人疏散仿真讲解_第1张图片

在main主窗口拖拉一个button按钮,是一个“火警”的按钮,

在action属性中myFloor1.pedService.cancelAll(),myFloor1.pedGoTo.cancelAll(),myFloor1.pedWait.cancelAll(),

疏散的时候,不知道选择哪个出口出去。可以选择selectOutput或者pedSelectOutput两个模块。

今天使用Agent中的collection,改变属性Name:colOut,Collection class:ArrayList,Elements class:other ,TargetLine,Initial contents:targeLine,targeLine1,这是选择两个出口

遍历两个集合:

actionChart——设置属性Return type:int  ,有个参数名称是ped,类型是Agent。

定义两个变量:返回值k,,一个判断值var,类型是double,初始值设置为99999

再定义一个for循环,for(int i=0;i

   再加一个逻辑判断ped.distanceTo(colOut.get(i).getX(),colOut.get(i).getY())

   如果为true的话,var= ped.distanceTo(colOut.get(i).getX(),colOut.get(i).getY());  k=i;

    最后循环完成之后,返回,设置Return属性:k

最后一步在pedGoTo1的属性中,Targetline的属性中设置:colOut.get(actionChart(ped))

4.第二次楼层的创建一个新的agent名字为Floor2

  • 可以直接复制MyFloor1,直接在Floor2粘贴即可。
  • 可以在Floor2中的属性Advanced中设置Extends other agent:选择MyFloor1即可,在Initial location的属性中设置Place  agent:In the specialfied point;Z:40(设置楼层的高度),里面的模块不能修改。

5.二楼疏散过程的书写

anylogic第三课—多层建筑行人疏散仿真讲解_第2张图片

在main主窗口设置一个变量variable,设置初始值是50,在MyFloor2中设置变量var,在MyFloor2的Agent actions中的On startup:pedSource.inject(20);var=main.variable; 即可获取当前的值。

增加一个新的agent行人:Ped,再设置一个新的变量stairindex,来存放二楼下来的行人走哪个楼梯。

在MyFloor2的面板中选择pedGoTo1,在Actions属性中的On enter:ped.stairIndx=actionChart(ped);

在MyFloor1中拖拉一个集合名称为colIn,collection class:ArrayList,来存放二楼下来的楼梯。在pedEnter模块的Target line属性中,设置动态值:colIn.get(ped.statirIndex);

在main主窗口的“火警”按钮action属性中myFloor1.pedService.cancelAll(),myFloor1.pedGoTo.cancelAll(),myFloor1.pedWait.cancelAll(),myFloor2.pedService.cancelAll(),myFloor2.pedGoTo.cancelAll(),myFloor2.pedWait.cancelAll()。

在MyFloor中的exit模块的Actions属性中:main.myFloor1.enter.take(agent);

可以在main窗口再设置一个button按钮,名称为“二楼火警”,action与一楼一样。

可以在main窗口设计一个时间event,倒计时结束实现行人疏散。

记录楼层的人数:一楼拖拉一个Function模块,名称为funCount,在Function body属性下,设置为:int i=0;
i=(int)(enter.out.count()+pedSource.out.count()-pedSink.in.count());
return i;

二楼为:funCount函数

int i=0;
i=(int)(pedSource.out.count()-exit.in.count());
return i;

再拖拉一个时间折线图,可以清楚反应每个楼层当前的人数:value设置为myFloor1.funCount(),myFloor2.funCount();

anylogic第三课—多层建筑行人疏散仿真讲解_第3张图片

你可能感兴趣的:(anylogic学习,java,anylogic)