文章目录
- 一、Agent类的概念
- 二、行人疏散仿真
- 2.1 仿真模型示意图
- 2.2 具体实现步骤
一、Agent类的概念

二、行人疏散仿真
2.1 仿真模型示意图

2.2 具体实现步骤
首先,新建模型

新建一个MyFloor1对象,代表第一个楼层




创建矩形墙,并放到原点

建立如下的模型,需要注意的是:
- 服务的延迟时间、PedWait的延迟时间的单位都设置为分钟
- PedSource、PedGoTo和PedWait都设置在矩形范围

修改PedSource到达根据为inject()函数调用

在启动时执行命令【作用是一次性生成20个人】:pedSource.inject(20);

回到Main窗口,将MyFloor1拖拽出来

放置视角区域和三维窗口

启动时执行命令:viewArea.navigateTo();

运行,查看效果

好像服务的延迟时间太长了,可以调小一点,设置为uniform(0.5, 1.0)
把等待时间设置长一点,设置为uniform(1.5, 2.0)
接下来,我们让行人可以成功撤离

根据上述逻辑,布局如下



进行连线

新增两个目标线和两个墙

回到Main窗口,往布局中加入一个按钮

为按钮加上单击事件
myFloor1.pedService.cancelAll();
myFloor1.pedGoTo.cancelAll();
myFloor1.pedWait.cancelAll();

为了控制人们的逃生目的地,我们先拖拽一个集合出来

修改集合的相关属性

打开行动图

拖拽一个行动图出来



定义当前搜索到的最小距离

拖拽出一个for循环

获取人离当前遍历到的出口的距离
ped.distanceTo(colOut.get(i).getX(),colOut.get(i).getY())

加入逻辑判断

k = i;
minDistance = curDistance;

定义返回值

设置pedGoTo1的目的地
colOut.get(actionChart(ped));

运行查看效果

接下来我们创建二楼
首先复制MyFloor1



删除部分组件



删掉这两个目标线


创建一个行人类型



在Ped中加入变量

修改变量类型和名称

把所有enter和pedSource的智能体类型设置为Ped

设置MyFloor2中的pedGoTo
进入时执行代码:ped.stairIndex=actionChart(ped);

修改疏散按钮的点击事件为
myFloor1.pedService.cancelAll();
myFloor1.pedGoTo.cancelAll();
myFloor1.pedWait.cancelAll();
myFloor2.pedService.cancelAll();
myFloor2.pedGoTo.cancelAll();
myFloor2.pedWait.cancelAll();

在MyFloor1中,选择colOut,按照Ctrl键移动,复制一个colOut1出来

修改colOut1的属性

设置pedEnter的目标线:
colIn.get(ped.stairIndex);

在Main中,把MyFloor2拖拽出来

到MyFloor2中,设置exit离开时执行代码:
main.myFloor1.enter.take(agent);

为了实现对一楼和二楼不同的疏散时间,复制之前的按钮,创造两个新按钮分别对一楼和二楼进行控制


为了区分一楼和二楼,在Main中调整MyFloor2的高度为40

运行查看最终效果
全部疏散的效果

先疏散一楼再疏散二楼

先疏散二楼再疏散一楼



















