文章目录

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



学习、参考链接:Anylogic入门基础课程

一、Agent类的概念

anylogic仿真软件可以使用与Java的结合 anylogic入门仿真案例_仿真建模

二、行人疏散仿真

2.1 仿真模型示意图

anylogic仿真软件可以使用与Java的结合 anylogic入门仿真案例_仿真建模_02

2.2 具体实现步骤

首先,新建模型

anylogic仿真软件可以使用与Java的结合 anylogic入门仿真案例_AnyLogic_03


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

anylogic仿真软件可以使用与Java的结合 anylogic入门仿真案例_多层建筑_04


anylogic仿真软件可以使用与Java的结合 anylogic入门仿真案例_人工智能_05


anylogic仿真软件可以使用与Java的结合 anylogic入门仿真案例_疏散仿真_06


anylogic仿真软件可以使用与Java的结合 anylogic入门仿真案例_疏散仿真_07


创建矩形墙,并放到原点

anylogic仿真软件可以使用与Java的结合 anylogic入门仿真案例_仿真建模_08


建立如下的模型,需要注意的是:

  • 服务的延迟时间、PedWait的延迟时间的单位都设置为分钟
  • PedSource、PedGoTo和PedWait都设置在矩形范围

anylogic仿真软件可以使用与Java的结合 anylogic入门仿真案例_AnyLogic_09


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

anylogic仿真软件可以使用与Java的结合 anylogic入门仿真案例_疏散仿真_10


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

anylogic仿真软件可以使用与Java的结合 anylogic入门仿真案例_疏散仿真_11

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

anylogic仿真软件可以使用与Java的结合 anylogic入门仿真案例_人工智能_12


放置视角区域和三维窗口

anylogic仿真软件可以使用与Java的结合 anylogic入门仿真案例_人工智能_13


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

anylogic仿真软件可以使用与Java的结合 anylogic入门仿真案例_疏散仿真_14


运行,查看效果

anylogic仿真软件可以使用与Java的结合 anylogic入门仿真案例_AnyLogic_15

好像服务的延迟时间太长了,可以调小一点,设置为uniform(0.5, 1.0)

把等待时间设置长一点,设置为uniform(1.5, 2.0)

接下来,我们让行人可以成功撤离

anylogic仿真软件可以使用与Java的结合 anylogic入门仿真案例_疏散仿真_16

根据上述逻辑,布局如下

anylogic仿真软件可以使用与Java的结合 anylogic入门仿真案例_多层建筑_17


anylogic仿真软件可以使用与Java的结合 anylogic入门仿真案例_AnyLogic_18


anylogic仿真软件可以使用与Java的结合 anylogic入门仿真案例_AnyLogic_19

进行连线

anylogic仿真软件可以使用与Java的结合 anylogic入门仿真案例_疏散仿真_20

新增两个目标线和两个墙

anylogic仿真软件可以使用与Java的结合 anylogic入门仿真案例_疏散仿真_21

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

anylogic仿真软件可以使用与Java的结合 anylogic入门仿真案例_仿真建模_22


为按钮加上单击事件

myFloor1.pedService.cancelAll();
myFloor1.pedGoTo.cancelAll();
myFloor1.pedWait.cancelAll();

anylogic仿真软件可以使用与Java的结合 anylogic入门仿真案例_疏散仿真_23

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

anylogic仿真软件可以使用与Java的结合 anylogic入门仿真案例_疏散仿真_24

修改集合的相关属性

anylogic仿真软件可以使用与Java的结合 anylogic入门仿真案例_多层建筑_25

打开行动图

anylogic仿真软件可以使用与Java的结合 anylogic入门仿真案例_仿真建模_26

拖拽一个行动图出来

anylogic仿真软件可以使用与Java的结合 anylogic入门仿真案例_仿真建模_27


anylogic仿真软件可以使用与Java的结合 anylogic入门仿真案例_仿真建模_28


anylogic仿真软件可以使用与Java的结合 anylogic入门仿真案例_人工智能_29


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

anylogic仿真软件可以使用与Java的结合 anylogic入门仿真案例_AnyLogic_30

拖拽出一个for循环

anylogic仿真软件可以使用与Java的结合 anylogic入门仿真案例_AnyLogic_31


获取人离当前遍历到的出口的距离

ped.distanceTo(colOut.get(i).getX(),colOut.get(i).getY())

anylogic仿真软件可以使用与Java的结合 anylogic入门仿真案例_疏散仿真_32

加入逻辑判断

anylogic仿真软件可以使用与Java的结合 anylogic入门仿真案例_多层建筑_33

k = i;
minDistance = curDistance;

anylogic仿真软件可以使用与Java的结合 anylogic入门仿真案例_AnyLogic_34


定义返回值

anylogic仿真软件可以使用与Java的结合 anylogic入门仿真案例_仿真建模_35


设置pedGoTo1的目的地

colOut.get(actionChart(ped));

anylogic仿真软件可以使用与Java的结合 anylogic入门仿真案例_AnyLogic_36


运行查看效果

接下来我们创建二楼

首先复制MyFloor1

anylogic仿真软件可以使用与Java的结合 anylogic入门仿真案例_人工智能_37


anylogic仿真软件可以使用与Java的结合 anylogic入门仿真案例_人工智能_38


anylogic仿真软件可以使用与Java的结合 anylogic入门仿真案例_多层建筑_39


删除部分组件

anylogic仿真软件可以使用与Java的结合 anylogic入门仿真案例_人工智能_40


anylogic仿真软件可以使用与Java的结合 anylogic入门仿真案例_多层建筑_41


anylogic仿真软件可以使用与Java的结合 anylogic入门仿真案例_人工智能_42


删掉这两个目标线

anylogic仿真软件可以使用与Java的结合 anylogic入门仿真案例_AnyLogic_43


anylogic仿真软件可以使用与Java的结合 anylogic入门仿真案例_AnyLogic_44

创建一个行人类型

anylogic仿真软件可以使用与Java的结合 anylogic入门仿真案例_多层建筑_45


anylogic仿真软件可以使用与Java的结合 anylogic入门仿真案例_AnyLogic_46


anylogic仿真软件可以使用与Java的结合 anylogic入门仿真案例_AnyLogic_47


在Ped中加入变量

anylogic仿真软件可以使用与Java的结合 anylogic入门仿真案例_AnyLogic_48


修改变量类型和名称

anylogic仿真软件可以使用与Java的结合 anylogic入门仿真案例_疏散仿真_49


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

anylogic仿真软件可以使用与Java的结合 anylogic入门仿真案例_疏散仿真_50


设置MyFloor2中的pedGoTo

进入时执行代码:ped.stairIndex=actionChart(ped);

anylogic仿真软件可以使用与Java的结合 anylogic入门仿真案例_人工智能_51

修改疏散按钮的点击事件为

myFloor1.pedService.cancelAll();
 myFloor1.pedGoTo.cancelAll();
 myFloor1.pedWait.cancelAll();
 myFloor2.pedService.cancelAll();
 myFloor2.pedGoTo.cancelAll();
 myFloor2.pedWait.cancelAll();

anylogic仿真软件可以使用与Java的结合 anylogic入门仿真案例_人工智能_52

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

anylogic仿真软件可以使用与Java的结合 anylogic入门仿真案例_仿真建模_53


修改colOut1的属性

anylogic仿真软件可以使用与Java的结合 anylogic入门仿真案例_仿真建模_54


设置pedEnter的目标线:

colIn.get(ped.stairIndex);

anylogic仿真软件可以使用与Java的结合 anylogic入门仿真案例_疏散仿真_55

在Main中,把MyFloor2拖拽出来

anylogic仿真软件可以使用与Java的结合 anylogic入门仿真案例_AnyLogic_56

到MyFloor2中,设置exit离开时执行代码:

main.myFloor1.enter.take(agent);

anylogic仿真软件可以使用与Java的结合 anylogic入门仿真案例_人工智能_57

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

anylogic仿真软件可以使用与Java的结合 anylogic入门仿真案例_仿真建模_58


anylogic仿真软件可以使用与Java的结合 anylogic入门仿真案例_疏散仿真_59


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

anylogic仿真软件可以使用与Java的结合 anylogic入门仿真案例_仿真建模_60

运行查看最终效果

全部疏散的效果

anylogic仿真软件可以使用与Java的结合 anylogic入门仿真案例_疏散仿真_61

先疏散一楼再疏散二楼

anylogic仿真软件可以使用与Java的结合 anylogic入门仿真案例_多层建筑_62

先疏散二楼再疏散一楼

anylogic仿真软件可以使用与Java的结合 anylogic入门仿真案例_多层建筑_63