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

数据分析与结果呈现

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

数据收集

在AnyLogic中,数据收集可以通过多种方式实现,包括内置的数据收集工具和自定义的数据收集逻辑。以下是一些常用的数据收集方法:

内置数据收集工具

AnyLogic提供了内置的数据收集工具,如statisticsdataset,可以方便地收集仿真过程中产生的数据。

  • StatisticsStatistics对象用于收集数值数据的基本统计信息,如平均值、最小值、最大值等。可以用于收集人群数量、等待时间等数据。

    // 创建一个Statistics对象StatisticspeopleCount=newStatistics();// 在某个事件中更新数据peopleCount.add(people.size());
  • DatasetDataset对象用于收集时间序列数据,可以用于绘制图表。可以用于记录人群数量随时间的变化、各个出口的人流情况等。

    // 创建一个Dataset对象DatasetpeopleCountOverTime=newDataset();// 在某个事件中更新数据peopleCountOverTime.add(time(),people.size());
自定义数据收集逻辑

对于更复杂的数据收集需求,可以编写自定义的Java代码来实现。例如,记录每个个体的路径选择、停留时间等。

  • 路径选择记录:假设我们需要记录每个个体选择的路径。

    // 定义一个ArrayList来存储路径选择ArrayList<String>pathChoices=newArrayList<>();// 在个体离开某个区域时记录路径publicvoidonExitRegion(StringpathName){pathChoices.add(pathName);}
  • 停留时间记录:假设我们需要记录每个个体在某个区域的停留时间。

    // 定义一个HashMap来存储每个个体的进入时间和停留时间HashMap<Person,Double>entryTimes=newHashMap<>();HashMap<Person,Double>dwellTimes=newHashMap<>();// 在个体进入某个区域时记录进入时间publicvoidonEnterRegion(Personperson){entryTimes.put(person,time());}// 在个体离开某个区域时计算停留时间publicvoidonExitRegion(Personperson){doubleentryTime=entryTimes.get(person);doubledwellTime=time()-entryTime;dwellTimes.put(person,dwellTime);entryTimes.remove(person);}

数据分析

收集到的数据需要进行分析,以提取有用的信息。AnyLogic提供了多种数据处理和分析工具,包括内置的统计函数和自定义的Java代码。

内置统计函数
  • 平均值:计算某个数据集合的平均值。

    // 计算人群数量的平均值doubleaveragePeopleCount=peopleCount.getMean();
  • 标准差:计算某个数据集合的标准差。

    // 计算人群数量的标准差doublestdDevPeopleCount=peopleCount.getStdDev();
  • 百分位数:计算某个数据集合的百分位数。

    // 计算人群数量的90百分位数doublepercentile90PeopleCount=peopleCount.getPercentile(90);
自定义数据分析

对于更复杂的数据分析需求,可以编写自定义的Java代码。例如,分析路径选择的分布、停留时间的分布等。

  • 路径选择分布:假设我们已经记录了每个个体选择的路径,现在需要分析路径选择的分布。

    // 定义一个HashMap来存储路径选择的次数HashMap<String,Integer>pathChoiceCount=newHashMap<>();// 遍历pathChoices,统计每个路径的选择次数for(Stringpath:pathChoices){pathChoiceCount.put(path,pathChoiceCount.getOrDefault(path,0)+1);}// 计算路径选择的分布for(Map.Entry<String,Integer>entry:pathChoiceCount.entrySet()){Stringpath=entry.getKey();intcount=entry.getValue();doublepercentage=(double)count/pathChoices.size()*100;System.out.println(path+": "+percentage+"%");}
  • 停留时间分布:假设我们已经记录了每个个体在某个区域的停留时间,现在需要分析停留时间的分布。

    // 定义一个ArrayList来存储所有个体的停留时间ArrayList<Double>allDwellTimes=newArrayList<>(dwellTimes.values());// 计算停留时间的基本统计信息doubleaverageDwellTime=allDwellTimes.stream().mapToDouble(Double::doubleValue).average().orElse(0.0);doublemaxDwellTime=allDwellTimes.stream().mapToDouble(Double::doubleValue).max().orElse(0.0);doubleminDwellTime=allDwellTimes.stream().mapToDouble(Double::doubleValue).min().orElse(0.0);// 输出统计信息System.out.println("Average Dwell Time: "+averageDwellTime);System.out.println("Max Dwell Time: "+maxDwellTime);System.out.println("Min Dwell Time: "+minDwellTime);

结果呈现

结果呈现是将分析得到的数据以图表、报告等形式展示出来,以便于理解和决策。AnyLogic提供了多种结果呈现工具,包括内置的图表和自定义的报告。

内置图表
  • 折线图:用于展示时间序列数据的变化。

    // 创建一个折线图LineChartpeopleCountChart=newLineChart();// 设置图表的标题和轴标签peopleCountChart.setTitle("People Count Over Time");peopleCountChart.setXLabel("Time (min)");peopleCountChart.setYLabel("People Count");// 添加数据集peopleCountChart.add(peopleCountOverTime);
  • 柱状图:用于展示分类数据的频数分布。

    // 创建一个柱状图BarChartpathChoiceChart=newBarChart();// 设置图表的标题和轴标签pathChoiceChart.setTitle("Path Choice Distribution");pathChoiceChart.setXLabel("Path");pathChoiceChart.setYLabel("Percentage (%)");// 添加数据for(Map.Entry<String,Integer>entry:pathChoiceCount.entrySet()){Stringpath=entry.getKey();intcount=entry.getValue();doublepercentage=(double)count/pathChoices.size()*100;pathChoiceChart.add(path,percentage);}
  • 散点图:用于展示两个变量之间的关系。

    // 创建一个散点图ScatterChartdwellTimeScatter=newScatterChart();// 设置图表的标题和轴标签dwellTimeScatter.setTitle("Dwell Time vs. Person ID");dwellTimeScatter.setXLabel("Person ID");dwellTimeScatter.setYLabel("Dwell Time (min)");// 添加数据for(Map.Entry<Person,Double>entry:dwellTimes.entrySet()){Personperson=entry.getKey();doubledwellTime=entry.getValue();dwellTimeScatter.add(person.getId(),dwellTime);}
自定义报告

对于更复杂的结果呈现需求,可以编写自定义的Java代码来生成报告。例如,生成一个HTML报告,展示关键的仿真结果和统计信息。

  • 生成HTML报告:假设我们需要生成一个包含人群数量、路径选择分布和停留时间分布的HTML报告。

    // 创建一个StringBuilder来构建HTML报告StringBuilderreportBuilder=newStringBuilder();// 添加报告标题reportBuilder.append("<html><head><title>Simulation Report</title></head><body>");reportBuilder.append("<h1>Simulation Report</h1>");// 添加人群数量的统计信息reportBuilder.append("<h2>People Count Statistics</h2>");reportBuilder.append("<p>Average People Count: "+averagePeopleCount+"</p>");reportBuilder.append("<p>Max People Count: "+maxPeopleCount+"</p>");reportBuilder.append("<p>Min People Count: "+minPeopleCount+"</p>");// 添加路径选择的分布reportBuilder.append("<h2>Path Choice Distribution</h2>");reportBuilder.append("<table>");reportBuilder.append("<tr><th>Path</th><th>Percentage (%)</th></tr>");for(Map.Entry<String,Integer>entry:pathChoiceCount.entrySet()){Stringpath=entry.getKey();intcount=entry.getValue();doublepercentage=(double)count/pathChoices.size()*100;reportBuilder.append("<tr><td>"+path+"</td><td>"+percentage+"%</td></tr>");}reportBuilder.append("</table>");// 添加停留时间的分布reportBuilder.append("<h2>Dwell Time Distribution</h2>");reportBuilder.append("<p>Average Dwell Time: "+averageDwellTime+" min</p>");reportBuilder.append("<p>Max Dwell Time: "+maxDwellTime+" min</p>");reportBuilder.append("<p>Min Dwell Time: "+minDwellTime+" min</p>");// 结束HTML报告reportBuilder.append("</body></html>");// 将报告写入文件try{Files.write(Paths.get("simulation_report.html"),reportBuilder.toString().getBytes());}catch(IOExceptione){e.printStackTrace();}

实例分析

为了更好地理解数据收集、分析和结果呈现的过程,我们通过一个具体的实例来展示如何在一个停车场仿真模型中实现这些功能。

停车场仿真模型概述

假设我们正在开发一个停车场仿真模型,模型中包含多个入口、出口和停车位。我们需要收集以下数据:

  • 每个入口的车辆进入数量

  • 每个出口的车辆离开数量

  • 每个停车位的占用时间和占用次数

  • 车辆在停车场内的平均停留时间

数据收集

首先,我们需要在仿真模型中定义数据收集对象。

// 定义数据收集对象StatisticsentryCounts=newStatistics();StatisticsexitCounts=newStatistics();StatisticsparkingOccupancyTime=newStatistics();HashMap<Integer,Integer>parkingOccupancyCount=newHashMap<>();

在模型的事件中更新数据收集对象。

// 在车辆进入停车场时记录进入数量publicvoidonVehicleEnter(intentryId){entryCounts.add(1);}// 在车辆离开停车场时记录离开数量publicvoidonVehicleExit(intexitId){exitCounts.add(1);}// 在车辆占用停车位时记录占用时间和占用次数publicvoidonVehiclePark(intparkingId,doublestartTime){// 记录开始占用时间parkingOccupancyTime.add(startTime);// 记录占用次数parkingOccupancyCount.put(parkingId,parkingOccupancyCount.getOrDefault(parkingId,0)+1);}// 在车辆离开停车位时更新占用时间publicvoidonVehicleLeave(intparkingId,doubleendTime){doublestartTime=parkingOccupancyTime.getLastValue();doubleoccupancyTime=endTime-startTime;parkingOccupancyTime.add(occupancyTime);}
数据分析

在仿真结束时,计算并输出相关的统计信息。

// 计算入口和出口的统计信息doubleaverageEntryCount=entryCounts.getMean();doubleaverageExitCount=exitCounts.getMean();// 计算停车位的占用时间和占用次数doubleaverageParkingOccupancyTime=parkingOccupancyTime.getMean();HashMap<Integer,Double>parkingOccupancyTimeDistribution=newHashMap<>();for(intparkingId:parkingOccupancyCount.keySet()){intcount=parkingOccupancyCount.get(parkingId);doublepercentage=(double)count/parkingOccupancyCount.values().stream().mapToInt(Integer::intValue).sum()*100;parkingOccupancyTimeDistribution.put(parkingId,percentage);}// 计算车辆在停车场内的平均停留时间doubleaverageDwellTime=parkingOccupancyTime.getMean();
结果呈现

最后,使用内置图表和自定义报告来呈现分析结果。

// 创建入口和出口的折线图LineChartentryExitChart=newLineChart();entryExitChart.setTitle("Entry and Exit Counts Over Time");entryExitChart.setXLabel("Time (min)");entryExitChart.setYLabel("Count");entryExitChart.add("Entry Counts",entryCounts);entryExitChart.add("Exit Counts",exitCounts);// 创建停车位占用次数的柱状图BarChartparkingOccupancyChart=newBarChart();parkingOccupancyChart.setTitle("Parking Occupancy Distribution");parkingOccupancyChart.setXLabel("Parking ID");parkingOccupancyChart.setYLabel("Percentage (%)");for(Map.Entry<Integer,Double>entry:parkingOccupancyTimeDistribution.entrySet()){intparkingId=entry.getKey();doublepercentage=entry.getValue();parkingOccupancyChart.add(String.valueOf(parkingId),percentage);}// 创建平均停留时间的散点图ScatterChartaverageDwellTimeChart=newScatterChart();averageDwellTimeChart.setTitle("Average Dwell Time vs. Parking ID");averageDwellTimeChart.setXLabel("Parking ID");averageDwellTimeChart.setYLabel("Dwell Time (min)");for(intparkingId:parkingOccupancyCount.keySet()){doubledwellTime=parkingOccupancyTime.getLastValue();averageDwellTimeChart.add(parkingId,dwellTime);}// 生成HTML报告StringBuilderreportBuilder=newStringBuilder();reportBuilder.append("<html><head><title>Parking Simulation Report</title></head><body>");reportBuilder.append("<h1>Parking Simulation Report</h1>");// 添加入口和出口的统计信息reportBuilder.append("<h2>Entry and Exit Counts</h2>");reportBuilder.append("<p>Average Entry Count: "+averageEntryCount+"</p>");reportBuilder.append("<p>Average Exit Count: "+averageExitCount+"</p>");// 添加停车位的统计信息reportBuilder.append("<h2>Parking Occupancy Statistics</h2>");reportBuilder.append("<p>Average Occupancy Time: "+averageParkingOccupancyTime+" min</p>");reportBuilder.append("<table>");reportBuilder.append("<tr><th>Parking ID</th><th>Percentage (%)</th></tr>");for(Map.Entry<Integer,Double>entry:parkingOccupancyTimeDistribution.entrySet()){intparkingId=entry.getKey();doublepercentage=entry.getValue();reportBuilder.append("<tr><td>"+parkingId+"</td><td>"+percentage+"%</td></tr>");}reportBuilder.append("</table>");// 添加车辆的平均停留时间reportBuilder.append("<h2>Average Dwell Time</h2>");reportBuilder.append("<p>Average Dwell Time: "+averageDwellTime+" min</p>");// 结束HTML报告reportBuilder.append("</body></html>");// 将报告写入文件try{Files.write(Paths.get("parking_simulation_report.html"),reportBuilder.toString().getBytes());}catch(IOExceptione){e.printStackTrace();}

通过以上步骤,我们可以在AnyLogic中实现数据收集、分析和结果呈现。这些工具和方法可以帮助我们更好地理解仿真模型的行为,验证模型的正确性,并为决策提供依据。希望这些内容对您在人群仿真软件二次开发中有所帮助。

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

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

相关文章

基于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%&…

大模型训练全流程实战指南基础篇(三)——大模型本地部署实战(Vllm与Ollama)

前言 上篇文章 大模型训练全流程实战指南基础篇&#xff08;二&#xff09;——大模型文件结构解读与原理解析剖析了大模型的核心文件组成与生成原理&#xff0c;并通过实战演示了从模型加载到文本生成的完整流程。那么在实际应用中&#xff0c;诸如 DeepSeek、豆包这类大家日…

盘点全网最火的5款论文降AI神器:AI率狂飙90%怎么办?这几款工具一键去除AI痕迹

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

SCI投稿必备:6款期刊级降AI工具深度测评

SCI投稿必备&#xff1a;6款期刊级降AI工具深度测评 TL;DR&#xff1a;SCI论文面临Turnitin、GPTZero等英文检测系统&#xff0c;普通降AI工具效果有限。实测6款期刊级工具后&#xff0c;AIGCleaner&#xff08;英文专用&#xff0c;达标率95%&#xff09;和嘎嘎降AI&#xff0…

Day17猜数字游戏

<!DOCTYPE html> <html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0">&…

毕业季来了!5款降AI率工具横评,最低能降到10%以下

毕业季来了&#xff01;5款降AI率工具横评&#xff0c;最低能降到10%以下 TL;DR&#xff1a;知网AIGC检测系统升级后&#xff0c;传统同义词替换已失效。实测5款降AI率工具&#xff0c;嘎嘎降AI&#xff08;达标率99.26%&#xff09;和比话降AI&#xff08;不达标全额退款&…

从 0 到 1 落地智能家居 AI 交互:LLaMA Factory Qwen3-4B 微调实战指南

从 0 到 1 落地智能家居 AI 交互&#xff1a;LLaMA Factory & Qwen3-4B 微调实战指南 在智能家居逐渐普及的今天&#xff0c;自然语言交互已成为许多家庭的控制入口。 你是否也曾遇到这样的场景&#xff1a;对着智能家居发出指令&#xff0c;它却理解错了你的意思&#x…

AI赋能智汇高校 - 从零掌握大模型本地部署与微调全流程

网罗开发&#xff08;小红书、快手、视频号同名&#xff09;大家好&#xff0c;我是 展菲&#xff0c;目前在上市企业从事人工智能项目研发管理工作&#xff0c;平时热衷于分享各种编程领域的软硬技能知识以及前沿技术&#xff0c;包括iOS、前端、Harmony OS、Java、Python等方…

小程序毕设选题推荐:基于nodejs的大众点评美食版小程序美食推荐排行排名【附源码、mysql、文档、调试+代码讲解+全bao等】

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

人群仿真软件:AnyLogic_(6).行为规则设定

行为规则设定 在AnyLogic中&#xff0c;行为规则设定是人群仿真模型的核心部分。通过设定行为规则&#xff0c;可以模拟不同场景下人群的行为模式&#xff0c;从而更准确地预测和分析人群流动情况。本节将详细介绍如何在AnyLogic中设定行为规则&#xff0c;包括个体行为、群体行…