2019年第八届数学建模国际赛小美赛C题预测通过拥堵路段所需的时间解题全过程文档及程序

本文主要是介绍2019年第八届数学建模国际赛小美赛C题预测通过拥堵路段所需的时间解题全过程文档及程序,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

2019年第八届数学建模国际赛小美赛

C题 预测通过拥堵路段所需的时间

原题再现:

  在导航软件中,行程时间的估计往往是一个重要的功能。现有的导航软件往往通过出租车或安装了该软件的车辆获取实时GPS数据来确定当前的路况。在交通拥堵严重的情况下,车辆速度较慢,因此对速度的估计非常不准确。其结果是,估计交通堵塞时间的准确性非常差。所需的实际时间有时甚至是预测时间的几倍到十倍。我们的问题是如何预测通过交通堵塞的时间?请收集现有数据并建立更精确的模型来解决此问题。

整体求解过程概述(摘要)

  导航软件的普及在给人们带来便利的同时,其一些弊端也暴露出来。由于无法准确预测汽车的行驶速度和行驶时间,给人们的出行带来了很大的麻烦。构建城市区域网络模型,提取宏观交通特征。提出了用网格模型预测路段通过时间的方法。同时,建立了基于BP神经网络的拥堵路段通行时间预测模型,并对两种模型进行了比较。
  本文对大量的车辆轨迹数据进行处理,提取网格的交通特征,并将网格作为研究区域交通的载体。首先提取网格中的静态交通特征,主要包括车辆进入网格的位置和出入口位置以及出入口位置之间的连接关系。然后,基于已有的静态数据,提取网格中的动态流量特征。,主要是指车辆通过网络节点对前后的时间。从而完成了网络模型的流量属性特征提取。
  提出了一种基于网格模型的路段通过时间预测方法。结合过境时间和实际出行时间作为网格中的准备数据,通过挖掘大量的车辆轨迹数据,提取网格间的多条轨迹并提取有效路径,利用多元线性回归和KNN算法对路径进行时间预测。
  本文还建立了基于BP神经网络算法的拥挤通过时间预测模型。从大量数据中提取历史流量数据并进行归一化处理,通过比较确定各层神经元的数量。选取部分数据作为样本,对神经网络进行训练和学习,实现对交通量的预测。基于速度-车流模型,对车速进行预测,得到通过路段的时间。
  最后,对两种模型进行了比较分析。网格模型使用的数据量较大,对时间的预测更全面。问题的分析包括宏观和微观两个方面;而BP神经网络算法灵活、使用方便。然而,该模型中数据的使用并不充分,因此网格模型更具说服力。

模型假设:

  1、不考虑不同车辆之间的超车情况;
  2、不考虑交通事故造成的交通拥堵;
  3、每辆车对前一辆车的响应延迟时间大致相等;
  4、在拥堵路段,每辆车同时以一定的固定速度到达;从固定速度减速到停止所需的时间相等。
  5、在拥堵道路上行驶的车辆油量充足。换言之,不考虑由于燃油耗尽而导致车辆无法驶出的情况。
  6、不考虑拥堵路段不同车辆间超车情况

问题重述:

  问题背景
  随着经济的发展,人们的生活水平不断提高,生活节奏也在加快。开车旅行已经成为一种趋势。这确实方便人们出行,但不可否认的是,在北京、上海等一些大城市,早、晚高峰时段拥堵严重。有时,人们在车辆上依赖GPS。道路位置的即时定位和车速的精确估计,然而,在道路严重拥堵期间,车速的估计极不准确。有时到达目的地的实际时间与预测时间相差甚远。如果安排不合理,会影响人们正常的生活节奏,甚至造成一些不好的结果,如错过最后期限。在这种情况下,正确评估拥堵路段的速度并正确预测通过拥堵路段所需的时间非常重要。

  问题重述
  在交通拥堵严重的情况下,速度较慢,因此对速度的估计是非常不准确的。结果表明,交通拥挤时间估计精度较差。所需的实际时间有时甚至是预测时间的几到十倍。我们的问题是如何预测交通堵塞的时间?收集现有数据,建立更精确的模型来解决这一问题。

模型的建立与求解整体论文缩略图

在这里插入图片描述
在这里插入图片描述

全部论文请见下方“ 只会建模 QQ名片” 点击QQ名片即可

部分程序代码:(代码和文档not free)

Code:
%initialization
x=input('Please enter the starting latitude and longitude,longitude=');
y=input('latitude=');
dx=0.001;
%Grid build
Wzwangge=zeros(1000,7);
Sjwangge=zeros(1000,7);
For i=0:99
For j=0:99
Wzwangge(i*100+j+1,1)=i*100+j+1;
Wzwangge(i*100+j+1,2)=x+j*dx;
Wzwangge(i*100+j+1,3)=y+i*dx;
Wzwangge(i*100+j+1,4)=x+j*dx-dx/2;
Wzwangge(i*100+j+1,5)=x+j*dx+dx/2;
Wzwangge(i*100+j+1,6)=y+i*dx-dx/2;
Wzwangge(i*100+j+1,7)=y+i*dx+dx/2;
End
y=y-dx;
End
% determines the grid to be studied
a=input('input grid sequence:');
Jingdu=dashuju(:,7);
Weidu=dashuju(:,8);Jdhang=find((jingdu<(wzwangge(a,5)))&(jingdu>(wzwangge(a,4)))));
Wdhang=find((weidu<(wzwangge(a,7)))&(weidu>(wzwangge(a,6)))));
[C,ia,ib]=intersect(jdhang,wdhang);
Wgshuju=dashuju(C,:);
% seeking grid speed
Wgsudu=sum(wgshuju(:,10))/size(wgshuju,1);
Disp ('grid average speed');
Disp(wgsudu);
% draw grid scatter map
Figure(1);
Plot(wgshuju(:,7),wgshuju(:,8),'r.');
Axis equal
% shows grid speed change
Shijian10=1:144;
Shijian=wgshuju(:,4).*60+wgshuju(:,5);
Liuliang=zeros(144,1);
For i=1:144
C=find((shijian<i*10)&(shijian>(i-1)*10));
Liuliang(i)=sum(wgshuju(C,10))/size(C,1);
End
Tf=isnan(liuliang);
T=find(tf==1);
Kedu=shijian10./6;
Figure(2);
Plot(kedu,liuliang);
Xlabel('time');
Ylabel('speed');
%Use Shenzhen latitude and longitude scatter to make map of Shenzhen
r=randi(5774443,600000,1);
Plot(dashuju(r,7),dashuju(r,8),'r.');
Axis equal
Hold on
Ylabel('Longitude');
Xlabel('latitude');
全部论文请见下方“ 只会建模 QQ名片” 点击QQ名片即可

这篇关于2019年第八届数学建模国际赛小美赛C题预测通过拥堵路段所需的时间解题全过程文档及程序的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/496820

相关文章

Python自动化Office文档处理全攻略

《Python自动化Office文档处理全攻略》在日常办公中,处理Word、Excel和PDF等Office文档是再常见不过的任务,手动操作这些文档不仅耗时耗力,还容易出错,幸运的是,Python提供... 目录一、自动化处理Word文档1. 安装python-docx库2. 读取Word文档内容3. 修改

将java程序打包成可执行文件的实现方式

《将java程序打包成可执行文件的实现方式》本文介绍了将Java程序打包成可执行文件的三种方法:手动打包(将编译后的代码及JRE运行环境一起打包),使用第三方打包工具(如Launch4j)和JDK自带... 目录1.问题提出2.如何将Java程序打包成可执行文件2.1将编译后的代码及jre运行环境一起打包2

使用Python快速实现链接转word文档

《使用Python快速实现链接转word文档》这篇文章主要为大家详细介绍了如何使用Python快速实现链接转word文档功能,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 演示代码展示from newspaper import Articlefrom docx import

如何利用Java获取当天的开始和结束时间

《如何利用Java获取当天的开始和结束时间》:本文主要介绍如何使用Java8的LocalDate和LocalDateTime类获取指定日期的开始和结束时间,展示了如何通过这些类进行日期和时间的处... 目录前言1. Java日期时间API概述2. 获取当天的开始和结束时间代码解析运行结果3. 总结前言在J

在不同系统间迁移Python程序的方法与教程

《在不同系统间迁移Python程序的方法与教程》本文介绍了几种将Windows上编写的Python程序迁移到Linux服务器上的方法,包括使用虚拟环境和依赖冻结、容器化技术(如Docker)、使用An... 目录使用虚拟环境和依赖冻结1. 创建虚拟环境2. 冻结依赖使用容器化技术(如 docker)1. 创

浅析如何使用Swagger生成带权限控制的API文档

《浅析如何使用Swagger生成带权限控制的API文档》当涉及到权限控制时,如何生成既安全又详细的API文档就成了一个关键问题,所以这篇文章小编就来和大家好好聊聊如何用Swagger来生成带有... 目录准备工作配置 Swagger权限控制给 API 加上权限注解查看文档注意事项在咱们的开发工作里,API

修改若依框架Token的过期时间问题

《修改若依框架Token的过期时间问题》本文介绍了如何修改若依框架中Token的过期时间,通过修改`application.yml`文件中的配置来实现,默认单位为分钟,希望此经验对大家有所帮助,也欢迎... 目录修改若依框架Token的过期时间修改Token的过期时间关闭Token的过期时js间总结修改若依

Go Mongox轻松实现MongoDB的时间字段自动填充

《GoMongox轻松实现MongoDB的时间字段自动填充》这篇文章主要为大家详细介绍了Go语言如何使用mongox库,在插入和更新数据时自动填充时间字段,从而提升开发效率并减少重复代码,需要的可以... 目录前言时间字段填充规则Mongox 的安装使用 Mongox 进行插入操作使用 Mongox 进行更

对postgresql日期和时间的比较

《对postgresql日期和时间的比较》文章介绍了在数据库中处理日期和时间类型时的一些注意事项,包括如何将字符串转换为日期或时间类型,以及在比较时自动转换的情况,作者建议在使用数据库时,根据具体情况... 目录PostgreSQL日期和时间比较DB里保存到时分秒,需要和年月日比较db里存储date或者ti

使用C#代码计算数学表达式实例

《使用C#代码计算数学表达式实例》这段文字主要讲述了如何使用C#语言来计算数学表达式,该程序通过使用Dictionary保存变量,定义了运算符优先级,并实现了EvaluateExpression方法来... 目录C#代码计算数学表达式该方法很长,因此我将分段描述下面的代码片段显示了下一步以下代码显示该方法如