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

news2025/2/25 11:08:32

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.coloradmin.cn/o/1391347.html

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

相关文章

怎么用Office的Excel将图片转为excel表格?

在处理大量的表格数据时&#xff0c;我们经常需要将图片中的表格转换成Excel格式&#xff0c;以便进行更高效的数据分析和处理。然而&#xff0c;手动将图片中的表格数据录入Excel是一项既耗时又容易出错的工作。那么&#xff0c;有没有一种方法能够快速、准确地实现图片表格到…

从2023年因果推断在线峰会看程序员的未来:掌握因果推理,洞悉数据背后的真相

在科技飞速发展的时代&#xff0c;程序员作为数字世界的建筑师&#xff0c;需要不断拓宽视野&#xff0c;汲取新知识&#xff0c;以应对日益复杂的问题和挑战。 2023年的因果推断在线峰会&#xff0c;为程序员们提供了一个了解因果推理的绝佳机会。本文将探讨程序员在峰会上可…

一种基于YOLO改进的高效且轻量级的表面缺陷检测网络, NEU-DET和GC10-DET涨点明显

&#x1f4a1;&#x1f4a1;&#x1f4a1;本文摘要&#xff1a;一种基于YOLO改进的高效且轻量级的表面缺陷检测&#xff0c; 在NEU-DET和GC10-DET任务中涨点明显 目录 1.轻量且高效的YOLO 1.1 SCRB介绍 1.1.1 ScConv介绍 1.2 GSConvns 1.3 od_mobilenetv2_050 1.4 对应ya…

016-Vue-黑马2023:前后端分离开发(在线接口文档),前端工程化、Element、nginx

第三节 前后端分离开发 1、介绍 开发模式 前后端混合开发&#xff1a;传统开发模式 前后端分离开发&#xff1a;当前最为主流的开发模式 页面原型需求案例&#xff1a;分析出接口文档 离线开发文档示例&#xff1a; 2、YAPI&#xff08;官网已停用&#xff09; 202…

芯品荟 | 电脑机箱键盘副屏市场调研报告

一.产品简介 1.带TFT彩屏电脑机箱 2.带小TFT彩屏电脑键盘 为什么电脑机箱&键盘&#xff0c;要带屏&#xff1f; 带屏的电脑机箱&键盘客户群体? 电竞玩家、设计师、电子发烧友、股民...... 二、市场规模 中国电脑机箱年产量约6000万台&#xff0c;键盘年产量约3亿…

二次开发在线预约上门服务、预约到家系统 增加开发票功能 轮播图链接跳转 uniapp代码

客户具体要求&#xff1a; 1、在我的个人中心里面增加一个 开票功能&#xff0c;点击进去之后可以查看到能开票的订单列表&#xff0c;如果是个人是填写姓名电话邮箱&#xff0c;就是填写单位名称 税号 邮箱&#xff0c;提交申请到后台审核&#xff0c;如果审核通过后线下人工…

「 典型安全漏洞系列 」03.跨站请求伪造CSRF详解

引言&#xff1a;CSRF&#xff08;Cross-Site Request Forgery&#xff0c;跨站请求伪造&#xff09;是一种攻击技术&#xff0c;通过使用用户的身份进行不诚实地操作&#xff0c;恶意用户可以在受害者&#xff08;目标&#xff09;的机器上执行一些未授权的操作。这可能会危及…

I2C总线和通信协议详解 (超详细配42张高清图+万字长文)

I2C总线和通信协议详解 (超详细配42张高清图万字长文) I2C&#xff08;Inter-Integrated Circuit&#xff09;通信总线&#xff0c;作为嵌入式系统设计中的一个关键组成部分&#xff0c;其灵活性和高效率使其在高级应用中备受青睐。本文旨在提供关于I2C通信总线的深度解析&…

齿轮齿条运动相关计算(博途S7-1200PLC脉冲轴组态)

有关S7-1200PLC脉冲轴相关应用介绍请参考下面的系列文章: S7-1200PLC脉冲轴位置控制功能块 https://rxxw-control.blog.csdn.net/article/details/135299302https://rxxw-control.blog.csdn.net/article/details/135299302S7-1200脉冲轴功能块 https://rxxw-control.blog.c…

这是一篇优雅的Springboot2.0使用手册

这是一篇优雅的Springboot2.0使用手册 最近再研究springboot的原理&#x1f60b;颇有收获&#xff0c;现在让我分享一下springboot如何使用吧~ 啥是Springboot 和书上理解的不同&#xff0c;我认为Springboot是一个优秀的快速搭建框架&#xff0c;他通过maven继承方式添加依…

【windows】右键添加git bash here菜单

在vs 里安装了git for windows 后&#xff0c;之前git-bash 右键菜单消失了。难道是git for windows 覆盖了原来自己安装的git &#xff1f;大神给出解决方案 手动添加Git Bash Here到右键菜单&#xff08;超详细&#xff09; 安装路径&#xff1a;我老的 &#xff1f; vs的gi…

c++可调用对象、function类模板与std::bind

函数调用与函数调用运算符 先写一个简单的函数&#xff0c;如下&#xff1a; /*函数的定义*/ int func(int i) {cout<<"这是一个函数\t"<<i<<endl; }void test() {func(1);//函数的调用 } 通过这个普通的函数可以看到&#xff0c;调用一个函数很…

黑盒测试,软件测试中的军体拳

黑盒测试&#xff0c;软件测试中的军体拳 让我们来讲一个故事黑盒测试的测试方法黑盒测试的测试方法用于黑盒测试的工具&#xff1a;黑盒测试可以识别什么黑盒测试的特点&#xff1a;黑盒测试的优点&#xff1a; 五星上将麦克阿瑟曾经说过“如果把白盒测试比做六脉神剑&#xf…

vue实现 marquee(走马灯)

样式 代码 <div class"marquee-prompt"><div class"list-prompt" refboxPrompt><span v-for"item in listPrompt" :title"item" class"prompt">{{item}}</span></div> </div>data() {…

快速入门Torch构建自己的网络模型

真有用构建自己的网络模型 读前必看刚学完Alex网络感觉很厉害的样子&#xff0c;我也要搭建一个可以看着网络结构实现上面的代码你已经很强了&#xff0c;千万不要再想实现VGG等网络&#xff01;&#xff01;&#xff01;90%你能了解到的模型大佬早已实现好&#xff0c;直接调用…

【python】16.Python语言进阶

Python语言进阶 重要知识点 生成式&#xff08;推导式&#xff09;的用法 prices {AAPL: 191.88,GOOG: 1186.96,IBM: 149.24,ORCL: 48.44,ACN: 166.89,FB: 208.09,SYMC: 21.29 } # 用股票价格大于100元的股票构造一个新的字典 prices2 {key: value for key, value in prices…

推荐几个Github高星GoLang管理系统

在Web开发领域&#xff0c;Go语言&#xff08;Golang&#xff09;以其高效、简洁、高并发等特性逐渐成为许多开发者的首选语言。有许多优秀的Go语言Web后台管理系统&#xff0c;这些项目星星众多&#xff0c;提供了丰富的功能和良好的代码质量。本文将介绍一些GitHub高星的GoLa…

07-微服务getaway网关详解

一、初识网关 在微服务架构中&#xff0c;一个系统会被拆分为很多个微服务。那么作为客户端要如何去调用这么多的微服务呢&#xff1f;如果没有网关的存在&#xff0c;我们只能在客户端记录每个微服务的地址&#xff0c;然后分别去调用。这样的话会产生很多问题&#xff0c;例…

设计模式之依赖倒转原则

在软件开发的世界里&#xff0c;设计模式一直是提升代码质量、确保软件稳定性以及优化软件可维护性的重要工具。而在这其中&#xff0c;依赖倒转原则无疑是其中最具代表性的设计模式之一。那么&#xff0c;什么是依赖倒转原则&#xff1f;它又为何如此重要&#xff1f;让我们一…

鼎捷软件获评国家级智能制造“AAA级集成实施+AA级咨询设计”供应商

为贯彻落实《“十四五”智能制造发展规划》&#xff0c;健全智能制造系统解决方案供应商(以下简称“供应商”)分类分级体系&#xff0c;推动供应商规范有序发展&#xff0c;智能制造系统解决方案供应商联盟组织开展了供应商分类分级评定(第一批)工作&#xff0c;旨在遴选一批专…