• 【仿真建模】第三课:AntLogic入门基础课程 - 多层建筑行人疏散仿真讲解



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

    一、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

    在这里插入图片描述

    运行查看最终效果

    全部疏散的效果
    在这里插入图片描述

    先疏散一楼再疏散二楼

    在这里插入图片描述

    先疏散二楼再疏散一楼

    在这里插入图片描述

  • 相关阅读:
    java毕业设计疫情网课管理系统Mybatis+系统+数据库+调试部署
    欣赏绍兴的美景,感受OLED透明拼接屏带来的视觉盛宴
    预估市场过万亿,“即时零售”到底是什么来头?
    激光雷达反射率标定可提高自动驾驶道路安全
    VUE3照本宣科——应用实例API与setup
    C 语言简单入门
    docker 和k8s 入门
    asp.net阅查卷管理系统VS开发sqlserver数据库web结构c#编程Microsoft Visual Studio
    RocketMQ源码解析-topic创建机制
    [C++数据结构](22)哈希表与unordered_set,unordered_map实现
  • 原文地址:https://blog.csdn.net/weixin_51545953/article/details/127996763