2011年B题交通巡警第一问的练习与实现

2023-05-16

题目要求:

试就某市设置交巡警服务平台的相关情况,建立数学模型分析研究下面的问题:

(1)附件1中的附图1给出了该市中心城区A的交通网络和现有的20个交巡警服务平台的设置情况示意图,相关的数据信息见附件2。请为各交巡警服务平台分配管辖范围,使其在所管辖的范围内出现突发事件时,尽量能在3分钟内有交巡警(警车的时速为60km/h)到达事发地

对于重大突发事件,需要调度全区20个交巡警服务平台的警力资源,对进出该区的13条交通要道实现快速全封锁。实际中一个平台的警力最多封锁一个路口,请给出该区交巡警服务平台警力合理的调度方案。

文件来源:

可以到数学建模官网区找往期试题,里面可以下载到完整的题目和数据文件。全国大学生数学建模竞赛 (mcm.edu.cn)

思路:

1.利用现有的数据计算出每个节点之间的直达路径,然后再通过弗洛伊德算法,求解任意两个节点之间的最短距离。

2.先计算出距离交通平台3km之内的交通节点,然后将重复的节点,找到它们最近的交通平台并分配,将任意平台都不能3分钟到达的节点,找到最近的交通平台,最后得到交巡警服务平台的管辖范围。

3.找到距离平台最近的路口节点,或者找到距离路口节点最近的平台节点,一个路口节点只能匹配一个平台节点,一个平台节点也只能匹配一个路口节点。

源代码:

弗洛伊德算法

floyd.m

function [Dist]=floyd(DISTANCE)
Dist = DISTANCE;
n = size(DISTANCE,1);
for k=1:n
    for i=1:n
        for j=1:n
            if (Dist(i,k)+Dist(k,j)<Dist(i,j))
                Dist(i,j)=Dist(i,k)+Dist(k,j);   
            end
        end
    end
end
%保存到文件
fid=fopen('Dist.txt','wt');
[m,n]=size(Dist);
for i=1:m
    for j=1:n
         if j==n
             fprintf(fid,'%g\n',Dist(i,j));
         else
             fprintf(fid,'%g\t',Dist(i,j));
         end
    end
end

主程序

clear;clc;
%读取数据
file = 'cumcm2011B附件2_全市六区交通网路和平台设置的数据表.xls';
%节点数据
JIEDIAN = xlsread(file,1,'B2:C93');
%disp(Apoint);
%整数化
[row1,column1] = size(JIEDIAN);  
for i = 1 : row1
	for j = 1 : column1
		JIEDIAN(i,j) = round(JIEDIAN(i,j));
	end
end
%disp(JIEDIAN);
%巡警平台数据
PINGTAI = [20,2];
for i = 1 : 20
	for j = 1 : column1
		PINGTAI(i,j) =JIEDIAN(i,j);
	end
end
%disp(PINGTAI);
%路线数据
ROAD = xlsread(file,2,'A2:B144');
[row2,column2] = size(ROAD);
for i = 1 : row2
	for j = 1 : column2
		if(ROAD(i,j) > 92)
            ROAD(i,1) = 0;
            ROAD(i,2) = 0;
        end
	end
end
%disp(ROAD);
%求节点之间的直接距离
DISTANCE = zeros(92);
for i = 1 : 92
	for j = 1 : 92
        DISTANCE(i,j) = inf;
        if(i == j)
            DISTANCE(i,j) = 0;
        end
	end
end
%disp(DISTANCE);
for i = 1 : row2
	for j = 1 : column2
        x1 = ROAD(i,1);
        x2 = ROAD(i,2);
        if ((x1 == 0)&&(x2 == 0))
            continue;
        else
            dis=sqrt((JIEDIAN(x1,1)-JIEDIAN(x2,1))^2+(JIEDIAN(x1,2)-JIEDIAN(x2,2))^2);
            DISTANCE(x1,x2) = dis;
            DISTANCE(x2,x1) = dis;
        end
	end
end
%disp(DISTANCE);
%FLOYD算法并写入文件dist中
Dist = floyd(DISTANCE);
%找出每个平台距离不大于30(换算后距离)的节点以及无法到达的节点
PT_y_JD = [];
PT_n_JD = 21:92;
for i = 1 : 20
    k = 1;
    PT_y_JD(i,k) = i;
	for j =21 : 92
       if(Dist(i,j)<=30)
           k = k + 1;
           PT_y_JD(i,k) = j;
           PT_n_JD(PT_n_JD == j) = [];
       end
	end
end
%读取出入A区的节点
GATE = xlsread(file,4,'C2:C14');
%分别以到出入节点的距离和到平台的距离形成两个矩阵
%距离出入口节点最近的平台
PT_y1_GT = [];
%距离平台最近的出入口节点
PT_y2_GT = [];
column3 = length(GATE);
for j = 1 : 20
    k = 1;
    dis_to_GT2 = [];
    for i = 1 : column3
        PT_y2_GT(i,1) = GATE(i);
        dis_to_GT1 = Dist(GATE(i),1:20);
        dis_to_GT2(end+1) = Dist(j,GATE(i));
        mindis = min(dis_to_GT1);
        if(Dist(GATE(i),j) == mindis)
            PT_y1_GT(j,k) = GATE(i);
            k = k + 1;
        end
    end
    k = 2;
    mindis = min(dis_to_GT2);
    for i = 1 : column3
        if(Dist(j,GATE(i)) == mindis)
            PT_y2_GT(j,k) = j;
            k = k + 1;
        end
    end
end
%到平台的距离不用修改即可使用
PT_yy_GT = [];
for i = 1 : column3
    for j = 1 : 20
        if (j == PT_y2_GT(i,2))
            PT_yy_GT(j,1) = j;
            PT_yy_GT(j,2) = PT_y2_GT(i,1);
        end
    end
end
%把每个平台辖区的平台节点删去,优化范围辖区
%前面已优化
%求出优化范围辖区
%找出重复出现的节点
REPEATED_JD = [];
[row4,column4] = size(PT_y_JD);
UN_REPEATED_JD = [];
%定义计数变量
for k = 21 : 92
    count = 0;
    for i = 1 : row4
        for j = 1 : column4
            if(PT_y_JD(i,j)==k)
                count = count + 1;
            end
            if((count > 1)&&(i == row4)&&(j == column4))
                REPEATED_JD(end+1) = k; 
            else if((count==1)&&(i == row4)&&(j == column4))
                    UN_REPEATED_JD(end+1) = k;
                end
            end
        end
    end
end
%找出重复节点最近的交通平台,并记录在优化的巡警范围数组里面
PT_yy_JD = [];
dis_to_PT = [];
row5 = length(REPEATED_JD);
for j = 1 : 20
    k = 1;
    PT_yy_JD(j,k) = j;
    for i = 1 : row5
        dis_to_PT = Dist(REPEATED_JD(i),1:20);
        mindis = min(dis_to_PT);
        if(Dist(REPEATED_JD(i),j) == mindis)
            k = k + 1;
            PT_yy_JD(j,k) = REPEATED_JD(i);
        end
    end
end
%把不重复的节点记录进去,得到最优范围覆盖节点
column5 = length(UN_REPEATED_JD);
for i = 1 : column5
    [row , column] = find(PT_y_JD == UN_REPEATED_JD(i));
    countZeros = length(find(PT_yy_JD(row,:)>0));
    k = countZeros + 1;
    PT_yy_JD(row,k)=UN_REPEATED_JD(i);
end
%把无法及时抵达的点也记录进去,得到最优覆盖
for j = 1 : 20
    k = 1;
    for i = 1 : length(PT_n_JD)
        dis_to_PT = Dist(PT_n_JD(i),1:20);
        mindis = min(dis_to_PT);
        if(Dist(PT_n_JD(i),j) == mindis)
            countZeros = length(find(PT_yy_JD(j,:)>0));
            k = countZeros + 1;
            PT_yy_JD(j,k)=PT_n_JD(i);
        end
    end
end
fprintf('优化后的交通平台管辖范围\n');
disp(PT_yy_JD);
fprintf('交通平台及其负责的A区出入点\n');
disp(PT_yy_GT);

运行结果:

优化后的交通平台管辖范围
     1    67    68    69    71    73    74    75    76    78
     2    40    43    44    70    72    39     0     0     0
     3    65    66    54    55     0     0     0     0     0
     4    57    63    64    60    62     0     0     0     0
     5    50    51    52    56    58    59    49    53     0
     6     0     0     0     0     0     0     0     0     0
     7    32    47    48    30    61     0     0     0     0
     8    33    46     0     0     0     0     0     0     0
     9    31    34    35    45     0     0     0     0     0
    10     0     0     0     0     0     0     0     0     0
    11    26    27     0     0     0     0     0     0     0
    12    25     0     0     0     0     0     0     0     0
    13    21    22    23    24     0     0     0     0     0
    14     0     0     0     0     0     0     0     0     0
    15    28    29     0     0     0     0     0     0     0
    16    36    37    38     0     0     0     0     0     0
    17    42    41     0     0     0     0     0     0     0
    18    80    81    82    83     0     0     0     0     0
    19    77    79     0     0     0     0     0     0     0
    20    84    85    87    88    89    90    91    86    92

交通平台及其负责的A区出入点
     1    12
     2    14
     3    16
     4    21
     5    22
     6    23
     7    24
     8    28
     9    29
    10    30
    11    38
    12    48
    13    62

tips:

1.一开始导入excel文件时,matlab会提示该文件没有添加到路径,直接添加就好。

2.在分配路口节点到平台的过程中,我同时进行了将路口节点分配到距离它们最近的平台节点和将平台节点分配到距离它们最近的路口节点两个操作。结果发现将路口节点分配到距离它们最近的平台节点所得结果一个平台会包含多个路口节点,不太合理。将平台节点分配到距离它们最近的路口节点,可以得到合适的结果。

3.本次floyd算法仅仅需要得到最短距离的矩阵,没有要求路径,所以代码里面没有实现路径部分。

后面的两问,以后学会了再写,我们一起进步。各位看官,瑞斯拜~~

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

2011年B题交通巡警第一问的练习与实现 的相关文章

  • 再见2011,你好,2012。

    不会写文章 xff0c 这个算是对自己的一个总结吧 xff0c 毕业一年半了 xff0c 从事嵌入式也有一年半了 xff0c 总觉得自己连入门都谈不上 xff0c 整天都看上去很忙 xff0c 有时候确实有一大堆的事情要做 xff0c 但是
  • 再见,2011

    2011 xff0c 又是匆匆的一年 悄然回首 xff0c 得到的 xff0c 失去的 xff0c 欢乐的 xff0c 酸楚的 xff0c 每天都在交错 即将过去的201一年注定不平凡的是一年 xff0c 是难忘的一年 xff0c 是蛋疼的
  • BW笔记(2011-10-24更新至No.237)

    1 同一个变量名的UID可能有多个 xff0c 记得注意 2 在查找时要注意技术名称还是名称 xff0c 因为查询时会在两个中进行 xff0c 模糊查询时要细心 xff0c FV与V都可以查到 3 复制的时候注意长度 xff0c 过长的会不
  • Luogu 2414 [NOI 2011] 阿狸的打字机

    文章目录 传送门思路参考代码总结 传送门 思路 首先我们甚至不能单独保存每个字符串 xff0c 因为总长度可以达到 O n 2
  • 2011/11/26

    听雨听风听愁绵 xff0c 疏雨薄衣心无涟
  • 【无人机】【2011.03】无人飞行器的自主飞行研究

    本文为澳大利亚悉尼大学 xff08 作者 xff1a Nicholas R J Lawrance xff09 的博士论文 xff0c 共233页 无人机 xff08 UAV xff09 在一系列工业 科学和国防应用中提供了独特的能力 小型无
  • 纪事2011—中国,建大,家,我

    前言 2011 年就要真的成为我记忆了 xff0c 我一直在想该怎样总结我的2011 xff0c 我的2011留下的是什么 xff0c 收获的又是什么 xff0c 这365天的句号我该怎么画上 xff0c 是圆是扁 xff0c 还是有缺口
  • 2011,我和CSDN亲密接触的一年

    从CSDN刚刚发出这次征文活动的时候 xff0c 就有一种想参加的冲动 xff0c 总想说些什么 xff0c 迟迟直到今天才开始下笔 和大家一样 xff0c 我也是一名普通的计算机研发人员 xff0c 说挨踢者也行 xff0c 说码农亦可
  • 我的2011 憧憬2012

    逝者如斯夫 不舍昼夜 2012已经向我们走来 xff0c 我们面对2011的离开 xff0c 稍有不舍 xff1b 但是人总得往前走 xff0c 微笑迎接2012 xff0c 注定我们在2012收获的更多 2011 xff0c 写给宿舍的哥
  • 走过2011

    走过2011 时间飞逝 xff0c 2011不寻常的一年还剩下短短5天 三百天的生活与工作是一份平淡一份快乐 工作需要总结 生活也要总结 日子才会越来越好 xff01 2011是进入公司的第二年 公司开发人员有来有离 xff0c 我没有离开
  • CentOS8.3.2011无法联网解决方案

    1 切换到ifcfg ensXX目录下 cd etc sysconfig network scripts 2 编辑ifcfg ensXX文件 vim ifcfg ens33 3 修改 BOOTPROTO 61 dhcp 并且修改 ONBOO
  • 2011-2012中国嵌入式开发从业人员调查报告

    调查背景 在今天所处的大时代背景下 xff0c 嵌入式 3G移动互联网 物联网 云计算俨然已成为信息产业的主旋律 xff0c 不管从政府大力扶持角度来看 xff0c 还是从产业变革的主流方向来说 xff0c 这股潮流早已势不可挡 而嵌入式系
  • 我的2011——毕业之年的总结与彷徨

    题记 眼看2011即将成为过去 xff0c 难得在这最后的时刻 xff0c 抽点时间 xff0c 倒上一杯热茶 xff0c 回忆这一年的浮浮沉沉 这一年 xff0c 我和所有毕业生一样 xff0c 离开了呆了四年的大学校园 呆腻了校园的生活
  • 我的2011--人生转折点

    恍然 xff0c 2011 12 30了 xff0c 这一年又将过去 xff01 回首这一年 xff0c 感觉是我生命中成长最快的一年 年初到年末 xff0c 好像是一个质的跨越 在即将过去的2011最后的时间里 xff0c 写下这边blo
  • ---------------------------谨以此文献给我的2011-----------------------------------

    2011年就快过去了 xff0c 回首我的2011 xff0c 有收获 xff0c 也有失落 xff0c 有胜利 xff0c 也有失败 有高兴的事情 xff0c 也有很多不高兴的事情 如果说往事不堪回首来总结的话 xff0c 未免有点太过于
  • 我的2011----再见2011!你好2012!

    今天本来是 特别平常的一天 但是因为位置排在了 2011 年的最后 平常也就变得不平常了 一年就在这么转眼即逝中度过了 虽说一年比较短暂 但是回头在看看自己所拥有的这一年 留下的很多 在 2011 我把 ShortBrain 英语进行着 英
  • 2011

    2011 Problem Description The GeoSurvComp geologic survey company is responsible for detecting underground oil deposits G
  • 写在2011

    很早就想写点东西了 xff0c 可晃荡晃荡地就到了2011年最后一刻 我想是要写点东西了 2011年 xff0c 我有太多的感触 这一年是我第一次在异地迎接农历新年了 xff0c 对 xff0c 当时的感觉很刺激 xff0c 刺激得让我和当
  • BW笔记(2011-10-24更新至No.237)

    1 同一个变量名的UID可能有多个 xff0c 记得注意 2 在查找时要注意技术名称还是名称 xff0c 因为查询时会在两个中进行 xff0c 模糊查询时要细心 xff0c FV与V都可以查到 3 复制的时候注意长度 xff0c 过长的会不
  • 2011年B题交通巡警第一问的练习与实现

    题目要求 xff1a 试就某市设置交巡警服务平台的相关情况 xff0c 建立数学模型分析研究下面的问题 xff1a xff08 1 xff09 附件1中的附图1给出了该市中心城区A的交通网络和现有的20个交巡警服务平台的设置情况示意图 xf

随机推荐

  • EM-500储能网关的AI采集性能实测

    EM 500储能网关的AI采集性能实测 EM 500是致远电子面向工商储能应用推出的高性价比储能网关产品 为满足采集外部传感器数据需要 xff0c EM 500设计内置了多通道高性能AI采集接口 xff0c 本文将对其进行一次实测 EM 5
  • 【IoT开发】UART通信高频测试

    测试所使用芯片 STM32F103RCT6 UART收发的极限频率 xff1a bytes s 1 发送频率 主程序循环发送一字节u8整型 xff0c 记录次数 while 1 t 43 43 if t 61 61 255 t 61 0 p
  • 560V输入、无光隔离反激式转换器

    560V输入 无光隔离反激式转换器 在传统的隔离式高压反激式转换器中 xff0c 使用光耦合器将稳压信息从副边基准电压源电路传输到初级侧 xff0c 从而实现严格的稳压 问题在于 xff0c 光耦合器大大增加了隔离设计的复杂性 xff1a
  • 用于DC-DC转换器的MIL-SPEC COTS EMC输入滤波器

    用于DC DC转换器的MIL SPEC COTS EMC输入滤波器 DC DC转换器的开关动作可能会引起不良的共模和差模噪声 xff0c 在频谱的许多点上创建不可接受的干扰 前端 xff08 或电力线 xff09 滤波器旨在在DC DC转换
  • C语言中调用nop();解决办法

    C语言中调用 nop 解决办法 可在头文件中添加 include lt intrins h gt 或是直接删去 nop intrins h一般用在keilC51单片机编程中 xff0c 一般程序中需要使用到空指令 nop 字符循环移位指令
  • rosrun teleop_twist_keyboard teleop_twist_keyboard.py

    rospack Error package teleop twist keyboard not found 解决方案 xff1a 1 cd catkin ws src xff08 如果没有这个目录先在工作目录下创建工作空间 xff1a mk
  • ubuntu20.04安装ros配置秘钥时出现gpg: keyserver receive failed: Connection timed out

    gpg keyserver receive failed Connection timed out也是从公钥服务器接收失败 xff1a 连接超时 解决方案1 换自己的手机热点 解决方案2 切换网络配置 xff1a 这大多数是网络的问题 xf
  • rosbag的命令使用以及代码编写

    概念 xff1a rosbag是用于录制和回放 ROS 主题的一个工具集 作用 实现了数据的复用 xff0c 方便调试 测试 本质 xff1a rosbag本质也是ros的节点 xff0c 当录制时 xff0c rosbag是一个订阅节点
  • 格式化串漏洞

    格式化字符串漏洞本身并不算缓冲区溢出漏洞 xff0c 这里作为比较典型的一类漏洞进行简单介绍 为了能够将字符串 变量 地址等数据按照指定格式输出 xff0c 通常使用包含格式化控制符的常量字符串作为格式化串 xff0c 然后指定用相应变量来
  • 单链表的遍历

    1 什么是遍历 遍历就是把单链表的各个节点挨个拿出来 xff0c 一个不能少 xff0c 也不能重复 xff0c 追求效率 2 如何遍历单链表 xff08 1 xff09 分析数据结构的本身特点 xff0c 然后根据根据它本身的特点制定相应
  • 单链表之删除节点

    1 删除节点的步骤 xff08 1 xff09 找到要删除的这个节点 xff1a 通过遍历来查找节点 xff0c 从头指针 43 头节点开始 xff0c 顺着链表依次将各个节点拿出来 xff0c 按照一定的方法比对 xff0c 找到我们要删
  • lssek函数的用法及作用

    1 lseek函数的介绍 xff08 1 xff09 文件指针 xff1a 当我们对一个文件读写时 xff0c 一定需要打开这个文件 xff0c 所以我们操作的都是动态文件 xff0c 动态文件在内存中的形态就是流的形式 xff08 2 x
  • ubuntu20.04安装arduino IDE(亲测可用)

    步骤一 xff1a 在官网下载arduino安装包选择相应的版本 下载链接 步骤二 xff1a 解压下载的安装包在相应的目录下执行下面语句 tar xvf 安装包名 步骤三 xff1a 将解压后的安装包移动到 opt目录下 sudo mv
  • px4无人机常识介绍(固件,px4等)

    专业名词解释 aircraft 任何可以飞或者可以携带物品还是搭载旅客的飞行器统称为飞机 航空器 uav 无人驾驶飞机 vehicle 飞行器 airplane plane aero plane 有机翼和一个或多个引擎的飞行器统称为飞机 D
  • 在运行ros的Python文件时报找不到路径

    1 第一行解释器声明 xff0c 可以使用绝对路径定位到 python3 的安装路径 usr bin python3 xff0c 但是不建议 2 建议使用 usr bin env python 但是会抛出异常 usr bin env pyt
  • ros文件架构

    WorkSpace span class token operator span span class token operator span 自定义的工作空间 span class token operator span span cla
  • 用C语言和汇编给寄存器赋值

    1 用汇编 要根据目标CPU的体系 xff0c 用对应的汇编类型编写 ldr r0 61 0X020C4068 CCGR0 ldr r1 61 0XFFFFFFFF str r1 r0 2 用C语言 要知道相关寄存器地址 官方会提供参考手册
  • 商人过河--广度优先搜索--matlab实现

    进行了代码优化 目录 应用背景 xff1a 模型求解 xff1a 模型建立 xff1a 模型实现 xff1a 源代码 xff1a 运行结果 xff1a 附 xff1a 应用背景 xff1a M个商人与N个仆从过河 xff0c 小船一次可载k
  • C++---全局对象、局部对象、静态对象

    1 全局对象 xff0c 程序一开始 xff0c 其构造函数就先被执行 xff08 比程序进入点更早 xff09 xff1b 程序即将结束前其析构函数将被执行 2 局部对象 xff0c 当对象生成时 xff0c 其构造函数被执行 xff1b
  • 2011年B题交通巡警第一问的练习与实现

    题目要求 xff1a 试就某市设置交巡警服务平台的相关情况 xff0c 建立数学模型分析研究下面的问题 xff1a xff08 1 xff09 附件1中的附图1给出了该市中心城区A的交通网络和现有的20个交巡警服务平台的设置情况示意图 xf