2019年认证杯SPSSPRO杯数学建模D题(第二阶段)5G时代引发的道路规划革命全过程文档及程序

2019年认证杯SPSSPRO杯数学建模

D题 5G时代引发的道路规划革命

原题再现:

  忙着回家或上班的司机们都知道交通堵塞既浪费时间又浪费燃料,甚至有的时候会带来情绪上的巨大影响,引发一系列的交通问题。据报道,每年交通拥堵使得美国市民在路上总共浪费了超过 55 亿小时,以及价值达到 1210亿美元的 29 亿加仑燃料。虽然十字路口和州际公路的匝道处交通十分繁忙,但是大多数乡村公路却鲜有车流,道路占用率只有 5%。
  即将到来的 5G(第五代移动通信网络)时代,将有可能解决这个问题,5G的无线传输带宽的峰值理论传输速度可达每秒 10 Gb 以上,这样我们就可以让汽车之间实时共享信息。未来,汽车之间可以交换诸如位置,速度和目的地之类的信息,进而核心控制系统可以基于这些信息,为司机生成个性化指令。通过告诉司机最佳行驶速度、最佳车道或最佳路线,不仅可以消除走走停停的现象,还可以提高交通安全性,如下图所示。
在这里插入图片描述
  第二阶段问题:
  1. 如果车辆之间的互联非常普及,所有车辆都可以自动驾驶,请建立数学模型探讨是否有可能取消路口的红绿灯?这样的通行效率相比有红绿灯时候是否会提高?
  2. 在一个平均通过速度为 15 公里每小时的路口,一辆执行任务的消防车想以 40 公里每小时的速度快速通过,控制系统应该如何进行调度?

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

  本文针对十字路口发生交通故障时,为尽快疏散堵塞车辆进行分析研究,以题目所给插图进行分析假设,假设故障发生在东西走向。
  首先,对南北方向与东西方向的车流量和绿灯时间进行假设分析,列出南北方向与东西方向红绿灯调整系数与各方向上绿灯通行时间之间的关系;由于假设故障发生在东西方向,所以着重研究东西方向上直行车辆与左转车辆的数量,直行通行时间与左转通行时间,从而给出东西方向红绿灯左转与直行调整系数与直行车数量、左转车数量之间的关系[1]。从而根据以上关系计算出南北方向、东西方向中直行与左转的红绿灯时间(绿灯时间规划)[2]。
  其次,随着科学技术的发展,网络技术的不断跟新换代,车辆已经可以做到自动接收无线信号,从而自动调整行驶路线与方向。因此,可以通过道路上的车流量情况动态规划红绿灯的开闭时间,从而完善红绿灯时间的规划[3],到达更快疏散堵塞路段的效果。
  最后,着重分析十字路口严重堵车时,左转和直行车辆的多少对疏散交通所用时间造成的影响[4]。列出绿灯时间与车身长、车距与速度之间的关系,确定直行绿灯时间与左转绿灯时间的最佳比例,从而在最短时间内使十字路口的离开率大于到达率,以达到最佳疏散效果。
  问题二立足于所有车辆均可实现自动驾驶进行研究。首先对原始红绿灯使用过程中存在浪费绿灯时间进行数据统计与分析后可见传统红绿灯在某些时段会存在浪费绿灯时间的情况。取消红绿灯后将十字路口看作服务台,每辆车看作顾客,提出优先级服务公式,并且给出某辆车接受服务时,其它车道车辆是否允许通过十字路口做出规定。从而得到没有红绿灯车辆该如何安全高效地通过十字路口的模型[4]。
  在问题二中严格禁止可能会与接受服务车辆发生碰撞的车道内车辆的通行。问题三中研究当消防车以高于其它车辆速度的速度通过十字路口时,其它车道内车辆可能会与之发生碰撞的情况及相关车辆之间可能发生碰撞的情况,分析车辆加速度与减速通过距离之间的关系。为了避免发生碰撞,调度系统应做出相应调整来避开碰撞,因为消防车要与其他车辆错开通过十字路口,且其他车辆之间也可能发生交通事故,需要考虑的因素极多,所以我们通过计算消防车与其他车辆相撞点和其他车辆与其他车辆相撞点来减少需要考虑的因素,从而把复杂的模型简化。只要其他车辆在消防车或其他车辆到达相撞点时,通过变速不同时到达相撞点,就不会发生碰撞,从而既让消防车快速通过,其他车也不耽搁时间,又不发生交通事故。

问题分析:

  交通拥堵主要与十字路口行驶车辆的流量、红绿灯时间和交通故障等诸多因素有关。
  针对问题 1:主要考虑发生交通故障时,通过调整车辆行驶方向和控制红绿灯时长来解决交通拥堵问题。在十字路口交通高峰期最高峰值是 500 辆/小时,而在此时发生交通故障,有一条路的两车道都停用 30 分钟,在道路恢复正常使用前,主控中心通过网络给车辆发送行驶的调度指令从而改变行驶车辆的行驶方向和自动控制红绿灯时间来将道路通行时间降到最低。因为车身长度和车距对通过红绿灯的时间有一定的影响,所以我们规定车身和车距为一个固定住,从而简化模型,降低车身和车距对交通拥堵的影响。通过计算红绿灯调整系数来确定红绿灯时间的调整方案,根据题中情况要使拥堵处在最短时间内疏散,再进行左转与直行的情况分析,从而得出最短时间疏散的方案。
  针对问题 2:红绿灯是每个路口必备的交通指挥系统,也降低了交通事故发生概率,然而在很多各个方向上的车辆数量有较大差异,导致红绿灯时间分配不均匀。使得司机等待时间过长,大大降低了交通效率。对此为解决该问题我们在自动驾驶的前提下,根据不同车辆等待时间与通过路口所需时间长短,来确定各个车辆先后行驶顺序。达到各车辆等待时间大体相同,同时也提高十字路口的通行效率。
  针对问题 3:若消防车要以稳定的速度 40km/h 安全通过路口,那么其他车辆必须针对本身位置与消防车位置的不同,来做出不同的速度改变,而速度因加速度改变,所以主要研究方向为其他车辆加速度改变情况。碰撞时要满足两辆车同时到达相撞点,故我们可以算出两辆车相撞时所需加速度,所需位置情况,所需时间,等因素的联系。要使车辆不相撞则不满足该条件即可。

模型假设:

  第一阶段:
  1. 每辆车通过故障路段所用时间与换道所用时间相同;
  2. 各个车辆行驶速度相同;
  3. 所有车辆车身长相等;
  4. 所有车辆之间的车距都相等。
  第二阶段:
  1.把车辆当做质点;
  2.把单方向中的两条车道看为一条,不考虑往固定行驶时,车辆在两条车道中变
道产生的影响。

论文缩略图:

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

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

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

#include

Graph::Graph()
{
    MAX_INT = 999999;
}

void Graph::clear()
{
    delete[] mat;

    for(int i=0; i<num;i++)
    {
        delete[] dist[i];
        delete[] path[i];
    }
    delete[] path;
    delete[] dist;

    spath.clear();
    nodes.clear();
}

bool Graph::readFile(QString fileName)
{
    QFile f(fileName);
    QFileInfo fileInfo;
    fileInfo.setFile(fileName);
    if(fileInfo.suffix()!= "map")
        return false;

    if(!f.open(QIODevice::ReadOnly | QIODevice::Text))
    {
        qDebug()<<fileName+" : Open failed";
        return false;
    }

    QTextStream inStream(&f);

    inStream.readLine();  

    m = inStream.readLine().toInt();
    n = inStream.readLine().toInt();
    num = m*n;

    dist = new int*[num];
    path = new int*[num];
    for(int i=0; i<num;i++)
    {
        dist[i] = new int[num];
        path[i] = new int[num];
    }

    
    QStringList strList = inStream.readLine().split(QRegularExpression("\\s+"));

    for(int i=0; i<num; i++)
    {
        Node newNode;
        newNode.nodeName =strList[i];
        newNode.pos = QPoint(i%n,i/n);  

        nodes.push_back(newNode);

        qDebug()<<newNode.nodeName<<QString("(%1,%2)").arg(newNode.pos.x()).arg(newNode.pos.y());
    }

   
    while(!inStream.atEnd())
    {
        QString str = inStream.readLine();

        if(str == "") 
            continue;

        QStringList slist = str.split(QRegularExpression("\\s+"));

        int Id1 = getID(slist[0]);
        int Id2 = getID(slist[1]);

        Succeed s1(Id2,slist[2].toInt());
        Succeed s2(Id1,slist[2].toInt());

        nodes[Id1].succeeds.push_back(s1);
        nodes[Id2].succeeds.push_back(s2);
    }

    return true;
}

void Graph::printGraph()
{
    for(int i=0; i<nodes.size();i++)
    {
        qDebug()<<QString("Node%1(%2) :").arg(i).arg(nodes[i].nodeName);

        for(int k=0; k<nodes[i].succeeds.size();k++)
        {
            qDebug()<<QString("-- Suc%1(%2) : %3").arg(nodes[i].succeeds[k].id).arg(getName(nodes[i].succeeds[k].id)).arg(nodes[i].succeeds[k].value);
        }
    }
}

int Graph::getID(QString nodeName)
{
    for(int i=0; i<nodes.size(); i++)
    {
        if(nodes[i].nodeName == nodeName)
            return i;
    }
    return -1;
}

QString Graph::getName(int id)
{
    return nodes[id].nodeName;
}

void Graph::setNodeObstacle(QPoint p)
{
    for(int i=0; i < num;i++)
    {
        if(nodes[i].pos == p)
        {
            nodes[i].isObstacle = !nodes[i].isObstacle;
            break;
        }
    }
}

void Graph::getMat()
{
    mat = new int[num*num];

    for(int i=0; i<num; i++)
    {
        for(int k=0; k<num; k++)
        {
            mat[i*num+k] =MAX_INT;
            if(i==k)
                mat[i*num+k]=0;
        }
    }

    for(int i=0; i<nodes.size();i++)
    {
        for(int k=0; k<nodes[i].succeeds.size();k++)
        {
            mat[i*num+nodes[i].succeeds[k].id] = nodes[i].succeeds[k].value;
        }
    }
}

void Graph::Floyd()
{
    for(int i=0; i<num;i++)    
    {
        for(int k=0; k<num;k++)
        {
            dist[i][k] = mat[i*num+k];
            path[i][k] = i;
        }
    }

    for(int k=0; k<num;k++)  
    {
        if(nodes[k].isObstacle) 
            continue;
        for(int i = 0; i<num; i++)
        {
            if(nodes[i].isObstacle)  
                continue;
            for(int j = 0; j<num; j++)
            {
                if(nodes[j].isObstacle) 
                    continue;

                if(dist[i][k]+dist[k][j] <dist[i][j]) 
                {
                    dist[i][j] = dist[i][k]+dist[k][j];
                    path[i][j] = path[k][j];
                }
            }
        }
    }

}

bool Graph::getShortestPath(QString nodeName)
{
    spath.clear();
  
    int k=getID(nodeName);    
    if(dist[0][k] >= MAX_INT) 
        return false;

    spath.push_back(k);

    do{
        spath.push_back(path[0][k]);
        k = path[0][k];
    }while(k != path[0][0]);

    return true;
}
全部论文及程序请见下方“ 只会建模 QQ名片” 点击QQ名片即可

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

AGI即将出现,未来最重要的资源是算力和能源

丨划重点 ① 关于新模型的名字&#xff0c;奥特曼还没有明确的想法&#xff0c;但他称不喜欢像“iPhone 27”这样的命名方式。 ② 奥特曼认为AGI将在不久的将来出现&#xff0c;但对社会和工作的影响程度可能远低于预期。 ③ 奥特曼表示&#xff0c;尽管AI的潜力超过预期&#…

2024年最值得关注的跨境电商平台盘点,TikTok Shop或成最大趋势

时代的巨变在2023年尤其明显&#xff0c;这一年随着全球化进程的加深&#xff0c;跨境出海处于“高景气”阶段。为了在跨境出海浪潮中保有稳定的地位甚至获得增长&#xff0c;跨境人最需要关注的是哪个跨境电商平台成为大势&#xff0c;用户所选择的平台是什么&#xff1f;在跨…

100个实战项目——在树莓派4B+Ubuntu20.04桌面版配置下运行智能小车(一)

主机SSH远程链接从机 查看python版本 python 我的是python3.8 所以我需要安装pip3 sudo apt install python3-pip 接着安装程序需要的引脚库 sudo pip3 install RPi.GPIO 注意必须要有sudo&#xff0c;因为我是远程遥控的树莓派&#xff0c;没有权限运行程序&#xff0…

element plus 可选择树形组件(el-tree) 怎样一键展开/收起?实现方法详解

实现代码&#xff1a; 按钮&#xff1a; <el-button click"takeall" style"height: 24px">{{zhanstatus % 2 ! 0 ? "收起所有" : "展开所有"}} </el-button> 组件&#xff1a; <el-form-item label"可选择菜单…

【报错fatal: unable to access ‘https://github解决办法】

【报错fatal: unable to access ‘https://github解决办法】 方法一&#xff1a;修改host文件 把140.82.114.4 github.com添加到C:\Windows\System32\drivers\etc里的hosts文件的最后一行&#xff0c;然后保存就行 方法二&#xff1a;把命令行里的http改为git重新执行

vulnhub靶机Chill_Hack

下载地址&#xff1a;Chill Hack: 1 ~ VulnHub 主机发现 目标176 端口扫描 服务扫描 直接去看web 先扫一下 有几个有点问题 看着好像命令执行 看来没错直接反弹shell 还有还白名单&#xff1f; bash也不能用 那就用php吧 whoami|php -r $sockfsockopen("192.168.21.13…

回归预测 | Matlab实现GA-APSO-MBP、GA-MBP、MBP、BP多输入单输出回归预测

回归预测 | Matlab实现GA-APSO-MBP、GA-MBP、MBP、BP多输入单输出回归预测 目录 回归预测 | Matlab实现GA-APSO-MBP、GA-MBP、MBP、BP多输入单输出回归预测预测效果基本描述程序设计参考资料 预测效果 基本描述 1.Matlab实现GA-APSO-MBP、GA-MBP、MBP、BP多输入单输出回归预测&…

扫一扫计数的工具有哪些?分享3款实用的!

在数字化时代&#xff0c;扫描计数软件已经成为我们日常生活和工作中不可或缺的工具。无论是需要快速统计物品数量、识别文字还是测量长度&#xff0c;这些软件都能提供方便快捷的解决方案。本文将为您介绍3款实用的扫描计数软件&#xff0c;帮助您轻松解决各种计数难题&#x…

探索自适应学习在考试培训系统中的优势

近年来&#xff0c;随着互联网的普及和发展&#xff0c;自适应学习作为一种个性化、灵活的学习方式受到越来越多教育工作者的关注。在考试培训系统中引入自适应学习&#xff0c;可以为学生提供更加有效和高效的学习体验。 自适应学习可以根据学生个体的学习特点和水平&#xff…

QT-QML2048小游戏

QT-QML2048小游戏 一、演示效果二、关键程序三、下载链接 一、演示效果 二、关键程序 import QtQuick 2.2 import QtQuick.Controls 1.1 import QtQuick.Controls.Styles 1.1 import QtQuick.Dialogs 1.1 import QtQuick.Window 2.1 import "2048.js" as MyScriptAp…

三菱plc学习入门(创建属于自己的FB模块)

在现实生活中&#xff0c;往往会需要修改一些属于方便自己的库&#xff0c;1&#xff0c;自己创建的库方便自己使用与查看2&#xff0c;提高自己编程能力&#xff0c;3&#xff0c;保护自己的程序不被外人修改&#xff01;&#xff01;&#xff01;下面就让我来操作一下 导入需…

LLM之Agent(八)| 使用CrewAi、Solor/Hermes、Langchain和Ollama构建超级Agent

随着大模型技术的发展&#xff0c;AI Agent正在成为大模型游戏规则的改变者&#xff0c;它可以帮助用户分解任务、规划任务和执行任务&#xff0c;这就是CrewAI的独特之处。CrewAI是AutoGEN的顶级替代品&#xff0c;为您提供轻松组建人工智能Agent团队执行自动化任务的能力。 在…

vue3+vite创建项目--(傻瓜式教程)

1、运行创建项目命令 # 使用 npm npm create vitelatest # 使用 yarn yarn create vite # 使用 pnpm pnpm create vite剩下的就是启动以及一些配置信息 2、vitevue3路由配置信息 npm install vue-router4在src目录下新建目录叫“router”&#xff0c;新建一个js文件叫“index…

Redis--Geo指令的语法和使用场景举例(附近的人功能)

文章目录 前言Geo介绍Geo指令使用使用场景&#xff1a;附近的人参考文献 前言 Redis除了常见的五种数据类型之外&#xff0c;其实还有一些少见的数据结构&#xff0c;如Geo&#xff0c;HyperLogLog等。虽然它们少见&#xff0c;但是作用却不容小觑。本文将介绍Geo指令的语法和…

Pyside6入门教学——编写一个UI界面并显示

1、安装Pyside6 输入下列命令安装Pyside6。 pip install Pyside6 2、设计UI 打开Qt设计工具&#xff08;在安装Pyside6包的目录下&#xff09;。 【注】我这用的是anaconda虚拟环境&#xff0c;所以我的路径是D:\App\Anaconda3\envs\snake\Lib\site-packages\PySide6。设计…

〔全网最正确〕2024华数杯B题成品论文22页word+四小问可执行代码+代码调式+结果分析+高清运行结果图

华数杯B题光伏发电 一、问题分析 &#xff08;完整版见文末&#xff09; 问题一&#xff1a; 首先题目要求得到电能行业与经济状况、居民消费水平、城市化率和市场化程度等因素的关系&#xff0c;并对供电量进行预测。其中&#xff0c;电能采用供电量数据、经济采用GDP数据&…

003 摄像头的配置

string realm_s “IP Camera(J4605)”; 需要根据摄像头的具体型号进行修改&#xff1b; IP Camera(L3433) 张XX的摄像头 正常的启动信息 connect 0. connect success. -------------------------SEND OPTIONS------------------------------ OPTIONS rtsp://192.168.1.64:55…

C语言之编译和链接

目录 一、引言 二、编译和链接 2.1 预处理&#xff08;预编译&#xff09; 2.2 编译 2.3 汇编 2.4 链接 一、引言 #include <stdio.h> int main() {printf("hello, world\n");return 0; } 像这样&#xff0c;只由ASCII字符构成的文件被称为文本文件&…

基于人工蚁群、蚁群、遗传算法的多目标任务分配

matlab2020a可运行 基于人工蚁群、蚁群、遗传算法的多目标任务分配资源-CSDN文库

数据结构--串

本文为复习的草稿笔记&#xff0c;&#xff0c;&#xff0c;有点乱 1. 串的基本概念和基本操作 串是由零个或多个字符组成的有限序列 2. 串的存储结构 3.串的应用 模式匹配 BF算法&#xff08;简单匹配算法 穷举法 算法思路&#xff1a;从子串的每一个字符开始依次与主串…
最新文章