人群仿真软件:AnyLogic_(13).人群仿真案例研究

人群仿真案例研究

1. 案例背景

在人群仿真领域,AnyLogic 是一个功能强大的工具,可以用于模拟各种复杂的人群行为和场景。本节将通过一个具体的案例研究,展示如何在 AnyLogic 中进行人群仿真。我们将模拟一个机场的旅客流动,探讨如何设置仿真模型、定义人群行为,并分析仿真结果。

1.1 机场旅客流动仿真背景

机场是一个高度复杂的环境,旅客的行为模式多种多样,包括安检、登机、购物等。通过人群仿真,我们可以更好地理解旅客在不同时间段内的流动情况,优化机场的资源配置,提高旅客的满意度。本案例将模拟一个中型机场的旅客流动,重点探讨以下几个方面:

  • 旅客到达模式

  • 安检过程

  • 登机口排队

  • 购物行为

2. 模型设置

2.1 创建新的仿真项目

  1. 打开 AnyLogic 软件。

  2. 选择“New Project”。

  3. 在“New Project”对话框中,选择“Agent Based Modeling”模板,点击“Next”。

  4. 输入项目名称,例如“Airport Passenger Flow Simulation”,点击“Finish”。

2.2 定义仿真环境

  1. 创建机场布局

    • 在主窗口中,使用“Drawing”工具栏中的图形工具(如矩形、圆形、线条等)绘制机场的平面图。

    • 包括安检口、登机口、商店、休息区等关键区域。

  2. 设置仿真参数

    • 在“Simulation”选项卡中,设置仿真时间(例如 24 小时)。

    • 设置仿真步长(例如 1 分钟)。

2.3 定义人群代理

  1. 创建旅客代理

    • 在“Agents”选项卡中,创建一个新的代理类型,命名为“Passenger”。

    • 在“Passenger”代理中,定义旅客的各种属性,例如:

      • int passengerId:旅客的唯一标识。

      • double arrivalTime:旅客到达机场的时间。

      • int destinationGate:旅客的目的地登机口编号。

      • boolean hasShopped:旅客是否已经购物。

  2. 定义旅客行为

    • 使用“Statechart”工具定义旅客的各个行为状态,例如:

      • Arrival:旅客到达机场。

      • SecurityCheck:旅客进行安检。

      • GoToGate:旅客前往登机口。

      • Shopping:旅客购物。

      • Boarding:旅客登机。

// 定义旅客代理类publicclassPassengerextendsAgent{// 旅客属性privateintpassengerId;privatedoublearrivalTime;privateintdestinationGate;privatebooleanhasShopped;// 设置旅客属性publicvoidsetPassengerId(intpassengerId){this.passengerId=passengerId;}publicvoidsetArrivalTime(doublearrivalTime){this.arrivalTime=arrivalTime;}publicvoidsetDestinationGate(intdestinationGate){this.destinationGate=destinationGate;}publicvoidsetHasShopped(booleanhasShopped){this.hasShopped=hasShopped;}// 获取旅客属性publicintgetPassengerId(){returnpassengerId;}publicdoublegetArrivalTime(){returnarrivalTime;}publicintgetDestinationGate(){returndestinationGate;}publicbooleanhasShopped(){returnhasShopped;}// 定义旅客的行为状态@StatepublicclassArrivalextendsState<Passenger>{publicvoidonEntry(){// 设置到达时间setArrivalTime(time());// 进入安检状态transitionTo(newSecurityCheck());}}@StatepublicclassSecurityCheckextendsState<Passenger>{publicvoidonEntry(){// 模拟安检过程hold(10.0);// 假设安检需要 10 分钟// 完成安检后,随机决定是否购物if(randomTrue(0.3)){transitionTo(newShopping());}else{transitionTo(newGoToGate());}}}@StatepublicclassShoppingextendsState<Passenger>{publicvoidonEntry(){// 模拟购物过程hold(15.0);// 假设购物需要 15 分钟setHasShopped(true);// 购物完成后前往登机口transitionTo(newGoToGate());}}@StatepublicclassGoToGateextendsState<Passenger>{publicvoidonEntry(){// 模拟前往登机口的过程hold(5.0);// 假设前往登机口需要 5 分钟// 到达登机口transitionTo(newBoarding());}}@StatepublicclassBoardingextendsState<Passenger>{publicvoidonEntry(){// 模拟登机过程hold(10.0);// 假设登机需要 10 分钟// 登机完成后,旅客离开系统exit();}}}

2.4 创建仿真环境

  1. 定义机场布局

    • 在主窗口中,使用“Drawing”工具栏绘制机场的平面图。

    • 创建矩形代表安检口、登机口、商店等区域。

  2. 设置人流路径

    • 使用“Path”工具创建旅客的行走路径。

    • 确保路径连接所有关键区域,例如从安检口到登机口、从安检口到商店等。

// 定义机场环境类publicclassAirportextendsEnvironment{// 创建安检口、登机口、商店等区域privateRectanglesecurityCheckArea;privateRectangleboardingGateArea;privateRectangleshopArea;// 创建人流路径privatePathpathToSecurityCheck;privatePathpathToBoardingGate;privatePathpathToShop;publicvoidsetup(){// 设置安检口区域securityCheckArea=newRectangle(0,0,100,50);securityCheckArea.setFill(Color.LIGHTGRAY);add(securityCheckArea);// 设置登机口区域boardingGateArea=newRectangle(300,0,100,50);boardingGateArea.setFill(Color.LIGHTBLUE);add(boardingGateArea);// 设置商店区域shopArea=newRectangle(150,0,100,50);shopArea.setFill(Color.LIGHTGREEN);add(shopArea);// 设置人流路径pathToSecurityCheck=newPath(newPoint(0,50),newPoint(100,50));add(pathToSecurityCheck);pathToBoardingGate=newPath(newPoint(150,50),newPoint(300,50));add(pathToBoardingGate);pathToShop=newPath(newPoint(100,50),newPoint(150,50));add(pathToShop);}}

3. 仿真逻辑

3.1 旅客到达模式

  1. 设置旅客到达率

    • 使用“Source”工具设置旅客的到达模式。

    • 例如,每 5 分钟到达一个旅客。

  2. 生成旅客

    • 在“Source”中设置生成旅客的代码,初始化旅客的属性。
// 旅客到达源publicclassPassengerSourceextendsSource<Passenger>{publicPassengerSource(){// 设置每 5 分钟到达一个旅客setInterArrivalTime(5.0);}@OverrideprotectedPassengercreate(){// 创建新的旅客对象Passengerpassenger=newPassenger();// 设置旅客的唯一标识passenger.setPassengerId(getNextAgentId());// 随机选择目的地登机口passenger.setDestinationGate(randomInt(1,5));returnpassenger;}}

3.2 安检过程

  1. 设置安检队列

    • 使用“Queue”工具设置安检队列。

    • 设置队列的最大长度和等待时间。

  2. 定义安检过程

    • 使用“Service”工具定义安检过程。

    • 设置安检所需的时间和资源。

// 安检队列publicclassSecurityQueueextendsQueue<Passenger>{publicSecurityQueue(){// 设置队列的最大长度setCapacity(20);// 设置等待时间setWaitTime(10.0);}}// 安检服务publicclassSecurityServiceextendsService<Passenger>{publicSecurityService(){// 设置安检所需的时间setProcessingTime(10.0);// 设置安检所需的资源数量setResourceCapacity(3);}}

3.3 登机口排队

  1. 设置登机口队列

    • 使用“Queue”工具设置登机口队列。

    • 设置队列的最大长度和等待时间。

  2. 定义登机过程

    • 使用“Service”工具定义登机过程。

    • 设置登机所需的时间和资源。

// 登机口队列publicclassBoardingQueueextendsQueue<Passenger>{publicBoardingQueue(){// 设置队列的最大长度setCapacity(50);// 设置等待时间setWaitTime(10.0);}}// 登机服务publicclassBoardingServiceextendsService<Passenger>{publicBoardingService(){// 设置登机所需的时间setProcessingTime(10.0);// 设置登机所需的资源数量setResourceCapacity(5);}}

3.4 购物行为

  1. 设置商店队列

    • 使用“Queue”工具设置商店队列。

    • 设置队列的最大长度和等待时间。

  2. 定义购物过程

    • 使用“Service”工具定义购物过程。

    • 设置购物所需的时间和资源。

// 商店队列publicclassShopQueueextendsQueue<Passenger>{publicShopQueue(){// 设置队列的最大长度setCapacity(30);// 设置等待时间setWaitTime(15.0);}}// 购物服务publicclassShopServiceextendsService<Passenger>{publicShopService(){// 设置购物所需的时间setProcessingTime(15.0);// 设置购物所需的资源数量setResourceCapacity(5);}}

4. 数据收集与分析

4.1 收集仿真数据

  1. 设置数据收集器

    • 使用“Data Collector”工具设置数据收集器,收集旅客的到达时间、安检时间、购物时间、登机时间等数据。
  2. 定义数据收集指标

    • 例如,收集每个旅客的总等待时间、每个安检口的通过率、每个登机口的排队长度等。
// 数据收集器publicclassPassengerDataCollectorextendsDataCollector<Passenger>{publicPassengerDataCollector(){// 设置数据收集的变量addVariable("arrivalTime","double","agent.getArrivalTime()");addVariable("securityCheckTime","double","agent.getArrivalTime() + getSimulation().getEngine().getProcessStarttime(agent)");addVariable("shoppingTime","double","agent.hasShopped() ? agent.getArrivalTime() + getSimulation().getEngine().getProcessStarttime(agent) : 0");addVariable("boardingTime","double","agent.getArrivalTime() + getSimulation().getEngine().getProcessStarttime(agent) + getSimulation().getEngine().getProcessDuration(agent)");}}

4.2 分析仿真结果

  1. 使用图表展示数据

    • 使用“Chart”工具展示仿真结果,例如旅客的总等待时间分布图、安检口的通过率图、登机口的排队长度图等。
  2. 输出仿真报告

    • 使用“Output”工具输出仿真报告,包括统计数据和图表。
// 仿真结果分析publicclassSimulationResults{publicvoidanalyze(){// 获取数据收集器PassengerDataCollectordataCollector=(PassengerDataCollector)getSimulation().getEngine().getDataCollector("passengerDataCollector");// 分析数据double[]arrivalTimes=dataCollector.getValues("arrivalTime");double[]securityCheckTimes=dataCollector.getValues("securityCheckTime");double[]shoppingTimes=dataCollector.getValues("shoppingTime");double[]boardingTimes=dataCollector.getValues("boardingTime");// 计算每个旅客的总等待时间double[]totalWaitTimes=newdouble[arrivalTimes.length];for(inti=0;i<arrivalTimes.length;i++){totalWaitTimes[i]=boardingTimes[i]-arrivalTimes[i];}// 输出统计数据System.out.println("Total number of passengers: "+arrivalTimes.length);System.out.println("Average total wait time: "+average(totalWaitTimes)+" minutes");System.out.println("Maximum total wait time: "+max(totalWaitTimes)+" minutes");System.out.println("Minimum total wait time: "+min(totalWaitTimes)+" minutes");// 创建图表createChart(totalWaitTimes,"Total Wait Time Distribution","Passenger ID","Wait Time (minutes)");}// 计算平均值privatedoubleaverage(double[]data){doublesum=0.0;for(doublevalue:data){sum+=value;}returnsum/data.length;}// 计算最大值privatedoublemax(double[]data){doublemax=data[0];for(doublevalue:data){if(value>max){max=value;}}returnmax;}// 计算最小值privatedoublemin(double[]data){doublemin=data[0];for(doublevalue:data){if(value<min){min=value;}}returnmin;}// 创建图表privatevoidcreateChart(double[]data,Stringtitle,StringxLabel,StringyLabel){// 使用 AnyLogic 内置的图表工具Chartchart=newChart(title);chart.setXLabel(xLabel);chart.setYLabel(yLabel);chart.addSeries("Total Wait Time",data);add(chart);}}

5. 优化与改进

5.1 优化安检过程

  1. 增加安检资源

    • 通过增加安检口的数量或提高安检效率,减少旅客的等待时间。
  2. 调整安检时间

    • 根据仿真结果,调整安检所需的时间,使其更符合实际情况。

5.2 优化登机口排队

  1. 增加登机口资源

    • 通过增加登机口的数量或提高登机效率,减少旅客的等待时间。
  2. 调整登机时间

    • 根据仿真结果,调整登机所需的时间,使其更符合实际情况。

5.3 优化购物行为

  1. 增加商店资源

    • 通过增加商店的数量或提高商店的服务效率,减少旅客的等待时间。
  2. 调整购物时间

    • 根据仿真结果,调整购物所需的时间,使其更符合实际情况。

5.4 仿真结果的敏感性分析

  1. 设置参数变化范围

    • 通过设置不同的参数变化范围,进行敏感性分析,例如安检口数量、登机口数量、商店数量等。
  2. 运行多组仿真

    • 运行多组仿真实验,分析不同参数对仿真结果的影响。
// 敏感性分析publicclassSensitivityAnalysis{publicvoidrun(){// 设置参数变化范围int[]securityCheckCapacity={2,3,4,5};int[]boardingGateCapacity={4,5,6,7};int[]shopCapacity={3,4,5,6};// 运行多组仿真实验for(intsecuritycapacity:securityCheckCapacity){for(intboardingcapacity:boardingGateCapacity){for(intshopcapacity:shopCapacity){// 设置当前参数SecurityQueuesecurityQueue=(SecurityQueue)getSimulation().getEngine().getElement("securityQueue");BoardingQueueboardingQueue=(BoardingQueue)getSimulation().getEngine().getElement("boardingQueue");ShopQueueshopQueue=(ShopQueue)getSimulation().getEngine().getElement("shopQueue");securityQueue.setCapacity(securitycapacity);boardingQueue.setCapacity(boardingcapacity);shopQueue.setCapacity(shopcapacity);// 运行仿真getSimulation().getEngine().run();// 收集仿真结果SimulationResultsresults=newSimulationResults();results.analyze();// 记录当前参数和结果System.out.println("Security Check Capacity: "+securitycapacity);System.out.println("Boarding Gate Capacity: "+boardingcapacity);System.out.println("Shop Capacity: "+shopcapacity);System.out.println("Average total wait time: "+results.getAverageWaitTime()+" minutes");System.out.println("Maximum total wait time: "+results.getMaxWaitTime()+" minutes");System.out.println("Minimum total wait time: "+results.getMinWaitTime()+" minutes");System.out.println("-------------------------------------------------");}}}}}

6. 结论

通过本案例研究,我们展示了如何在 AnyLogic 中进行机场旅客流动仿真。通过设置仿真环境、定义人群代理和行为、收集和分析数据,我们可以更好地理解旅客在机场的行为模式,并通过优化安检过程、登机口排队和购物行为,提高机场的运营效率和旅客的满意度。敏感性分析进一步帮助我们确定最优的资源配置方案,为机场的运营管理提供科学依据。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1185276.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

小程序毕设选题推荐:基于django+微信小程序的考研信息查询系统考研学习资源信息查询系统【附源码、mysql、文档、调试+代码讲解+全bao等】

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

【课程设计/毕业设计】基于nodejs的大众点评美食版小程序美食分享系统【附源码、数据库、万字文档】

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

论文AI查重率爆表怎么办?揭秘2026年最有效的降AI策略与工具,助你顺利毕业!

每个大学生都有过这样的经历&#xff1a;熬夜赶工&#xff0c;终于完成了心血之作&#xff0c;提交论文时&#xff0c;心情忐忑。但当AI检测报告一出来&#xff0c;看到那满屏红色的“AIGC疑似率”时&#xff0c;瞬间崩溃。明明是自己写的内容&#xff0c;怎么就被判定为“AI生…

技术干货:Windows 下离线 OCR 方案在 3C 金属框架字符核验中的实现

针对 3C 产线金属框架字符核验的高速、精准、离线需求&#xff0c;京元智能设计了基于 Windows 系统、Honeywell HF811 固定式相机与自主研发离线 OCR 算法的一体化方案。方案通过硬件与算法的深度适配&#xff0c;实现 20-30ms 字符核验响应、99.9% 识别准确率&#xff0c;支持…

【开题答辩全过程】以 基于springboot的医药公司药品仓库管理系统为例,包含答辩的问题和答案

个人简介一名14年经验的资深毕设内行人&#xff0c;语言擅长Java、php、微信小程序、Python、Golang、安卓Android等开发项目包括大数据、深度学习、网站、小程序、安卓、算法。平常会做一些项目定制化开发、代码讲解、答辩教学、文档编写、也懂一些降重方面的技巧。感谢大家的…

永磁同步电机无位置传感器控制,采用的是龙贝格,基于模型的 定点开发,仿真效果和实际95%高度吻...

永磁同步电机无位置传感器控制&#xff0c;采用的是龙贝格&#xff0c;基于模型的 定点开发&#xff0c;仿真效果和实际95%高度吻合&#xff0c;可以仿真学习&#xff0c;也可以直接移植到项目中在现代电机控制领域&#xff0c;基于模型的设计&#xff08;Model-Based Design, …

2026年8款免费降AI率工具实测推荐,亲测有效

2026年8款免费降AI率工具实测推荐&#xff0c;亲测有效 TL;DR&#xff1a;2026年降AI率工具越来越多&#xff0c;但真正好用的就那几款。本文实测8款主流工具&#xff0c;重点推荐嘎嘎降AI&#xff08;达标率99.26%&#xff0c;性价比最高&#xff09;和比话降AI&#xff08;知…

毕业季救命稻草:论文AI率过高?试试这几个降AI改写工具,快速降低AIGC率!

每个大学生都有过这样的经历&#xff1a;熬夜赶工&#xff0c;终于完成了心血之作&#xff0c;提交论文时&#xff0c;心情忐忑。但当AI检测报告一出来&#xff0c;看到那满屏红色的“AIGC疑似率”时&#xff0c;瞬间崩溃。明明是自己写的内容&#xff0c;怎么就被判定为“AI生…

人群仿真软件:AnyLogic_(8).数据分析与结果呈现

数据分析与结果呈现 在人群仿真软件AnyLogic中&#xff0c;数据分析与结果呈现是仿真建模的重要环节。通过有效的数据分析和结果呈现&#xff0c;可以更好地理解仿真模型的行为、验证模型的正确性&#xff0c;并为决策提供依据。本节将详细介绍如何在AnyLogic中进行数据收集、分…

基于FPGA的永磁同步伺服控制系统的设计,在FPGA实现了伺服电机的矢量控制, 坐标变换,电流...

基于FPGA的永磁同步伺服控制系统的设计&#xff0c;在FPGA实现了伺服电机的矢量控制&#xff0c; 坐标变换&#xff0c;电流环&#xff0c;速度环&#xff0c;位置环&#xff0c;电机反馈接口&#xff0c;SVPWM。 。 。 都是通过Verilog 语言来实现的&#xff0c;具有很高的研究…

【开题答辩全过程】以 基于Python的街区医院管理系统的设计与实现为例,包含答辩的问题和答案

个人简介一名14年经验的资深毕设内行人&#xff0c;语言擅长Java、php、微信小程序、Python、Golang、安卓Android等开发项目包括大数据、深度学习、网站、小程序、安卓、算法。平常会做一些项目定制化开发、代码讲解、答辩教学、文档编写、也懂一些降重方面的技巧。感谢大家的…

人群仿真软件:AnyLogic_(8).行人行为模拟

行人行为模拟 1. 行人行为建模的基本概念 在人群仿真软件AnyLogic中&#xff0c;行人行为模拟是通过建立行人模型来实现的。行人模型不仅包括行人的物理属性&#xff0c;如身高、体重、速度等&#xff0c;还包括他们的行为逻辑&#xff0c;如选择路径、避开障碍物、与其他行人互…

DeepSeek写的论文AI率98%怎么办?5招教你稳降到10%以下

DeepSeek写的论文AI率98%怎么办&#xff1f;5招教你稳降到10%以下 TL;DR&#xff1a;DeepSeek写的论文AI率动辄90%以上&#xff0c;是因为它的文本句式工整、用词精准、缺乏个人表达痕迹。本文分享5个实测有效的方法&#xff0c;核心是用嘎嘎降AI或比话降AI做专业处理&#xff…

中小型传统企业常用的组网方案你能设计出来吗?一文教你搞懂MSTP+VRRP的架构和配置

一、实验需求划分IP地址并配置划分vlan并实现vlan间互联互通&#xff0c;配置链路聚合增大链路带宽运行OSPF实现PC1访问5.5.5.5&#xff08;外网&#xff09;配置VRRP和MSTP二、实验调试实验拓扑如图3-14所示图3-14VRRPMSTP项目拓扑图三、实验步骤&#xff08;1)划分并配置IP地…

海南椰子鸡和宁夏滩羊的拼多多“漂流”:透视地域特产的数字进化论

在中国人的餐桌上&#xff0c;特产既代表着地域风味&#xff0c;也是带有“时空局限性”的符号。宁夏盐池的滩羊&#xff0c;长期停留在“清水一把盐”的西北记忆里&#xff1b;海南的椰子鸡&#xff0c;一度被圈定在深圳餐饮街或琼海旅游景点的“围墙”内。 地域特产“出圈难”…

论文AI疑似度高达90%?别焦虑!这几招“物理降AI法”配合神器,让你轻松降AI率到10%!

每个大学生都有过这样的经历&#xff1a;熬夜赶工&#xff0c;终于完成了心血之作&#xff0c;提交论文时&#xff0c;心情忐忑。但当AI检测报告一出来&#xff0c;看到那满屏红色的“AIGC疑似率”时&#xff0c;瞬间崩溃。明明是自己写的内容&#xff0c;怎么就被判定为“AI生…

25个降AI提示词大全:适用DeepSeek/豆包/Kimi

25个降AI提示词大全&#xff1a;适用DeepSeek/豆包/Kimi TL;DR&#xff1a;整理了25个经过实测的降AI提示词&#xff0c;按功能分为句式改写、高频词替换、逻辑重构、风格调整、内容丰富五大类&#xff0c;DeepSeek、豆包、Kimi通用。收藏这篇&#xff0c;降AI不用到处找指令了…

人群仿真软件:AnyLogic_(9).模型验证与校准

模型验证与校准 在人群仿真软件中&#xff0c;模型验证与校准是确保仿真结果可靠性和准确性的关键步骤。这一节将详细介绍如何在AnyLogic中进行模型验证与校准&#xff0c;包括验证的基本方法、校准的技术手段以及具体的实例操作。 模型验证 验证的定义和重要性 模型验证是指通…

人群仿真软件:AnyLogic_(12).AnyLogic高级功能应用

AnyLogic高级功能应用 在上一节中&#xff0c;我们已经了解了AnyLogic的基本功能和人群仿真的基础概念。本节将深入探讨AnyLogic的高级功能应用&#xff0c;特别是在人群仿真软件的二次开发领域。我们将涵盖以下几个方面&#xff1a;自定义行人行为多层建筑仿真动态环境变化仿真…

DeepSeek写的论文AI率98%怎么办?3招降到10%以下

DeepSeek写的论文AI率98%怎么办&#xff1f;3招降到10%以下 TL;DR&#xff1a;DeepSeek写论文虽快但AI率极高&#xff08;通常90%-98%&#xff09;&#xff0c;核心问题是句式太工整、缺乏个性表达。3招解决&#xff1a;第一招用嘎嘎降AI直接处理&#xff08;实测95%降到9%&…