2017年五一杯数学建模A题公交车排班问题解题全过程文档及程序

2017年五一杯数学建模

A题 公交车排班问题

原题再现

  随着徐州市经济的快速发展,公交车系统对于人们的出行扮演着越来越重要的角色。在公交车资源有限的情况下,合理的编排公交车的行车计划成为公交公司亟待解决的问题。以下给出公交车排班问题中的部分名词说明和假设。
  (1) 班次:1 辆公交车从起点出发到达终点停止为 1 个班次。
  (2) 公交车公司有两种类型的班车:单班车和双班车。除非特殊说明,单班车和双班车都可以用于公交车排班。
  (3) 单班车:由同一个驾驶员驾驶的公交车。单班车通常要求在早高峰跑 2-3 个班次,晚高峰2-3 个班次,一天不超过 5 个班次。
  (4) 双班车:由两个驾驶员驾驶的公交车。双班车要求上、下午各一个司机,上午和下午司机的工作时间尽可能均匀,并且都不超过 8 小时。每辆双班车一天运行不超过 10 个班次。
  (5) 公交车运行的单程时间,已经包含乘客在各站(包括起点和终点)的上下车时间。
  (6) 假设每辆公交车可以运行 1 整天不需要加油。
  (7) 末班车的发车时间,可以在原有发车间隔的基础上调整 2 分钟(±2 分钟)。
  (8) 本题以简单的环路公交路线为例,即公交车从 A 点出发,经过一系列站点后再次回到 A点为 1 个班次。
  (9) 最短停站时间是指公交车完成 1 个班次之后,开始运行下一个班次之前,需要在终点停留的最短的时间。在问题 1-3 中,每辆公交车的最短停站时间为 0,即:公交车回到终点后不需要停留,可以继续进行下一班次的运行。
  问题 1. 徐州市 2 路公交车,从徐州火车站出发后经沿途站点后回到徐州火车站,2 路公交车行车信息如表 1。请建立数学模型,计算徐州市 2 路公交车,在早高峰时段(6:00-8:00)运行所需要使用的最少公交车数辆(需要给出含单班车和双班车各多少辆)。
  问题 2. 在问题 1 的基础上,请建立数学模型并设计相应的求解算法,给出徐州市 2 路公交车完成一整天的运行所需要最少的公交车的数辆(需要给出含单班车和双班车各多少辆),并按照表 2 的格式给出公交车排班计划表。
  问题 3. 在问题 2 的基础上,如果要求单班车不少于 3 辆,请建立数学模型并设计相应的求解算法,给出徐州市 2 路公交车完成一整天的运行所需要最少的公交车的数辆(需要给出含单班车和双班车各多少辆),并按照表 2 的格式给出公交车排班计划表。
  问题 4. 在公交车排班过程中,除以上要求之外,还需要考虑如下的实际因素的限制:
  (a) 单班车司机不安排吃饭,所有双班车司机都安排吃饭(早餐和晚餐),每餐饭需要 20 分钟用餐时间。早餐 8:00 开始供应,10:00 截止;晚餐 18:00 开始供应,20:00 截止。
  (b) 限定双班车辆的数辆为 19 辆。
  © 双班车辆运行 5 班次以后,上午、下午班司机进行换班,换班时间最少为 20 分钟(含最短停站时间)。
  请建立数学模型并设计相应的求解算法,并以表 3 给出的行车信息表为例,给出徐州市 2 路公交车行车信息调整后,完成一整天的运行所需要最少的公交车的数辆(需要给出含单班车和双班车各多少辆),并按照表 2 的格式给出公交车排班计划表。
在这里插入图片描述

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

  本文主要研究公交公司根据全天出行高峰的分布,各时间段单程时间和发车间隔时间不同的特点,制定出使得公交车在各时间段运行所需要使用的最少公交车数量的排班计划方案,本文构造单双班车综合发车计划矩阵并采用行列迭代加边求和的方法,既考虑发车时间具有波动性,又要尽量使上下午司机工作时间均衡,通过采用遗传算法对模型进行求解,有效增强了模型的传递性和适应性。
  问题一首先进行时间点单位统一为分钟,便于确定起点发车时间和返回终点时间。选取早高峰时间段最大发车时间间隔以达到运行所需要使用的公交车数量最少的目的。将单双班车视为同一 0-1 变量进行定量᧿述,建立发车时间点(行)与使用班车编号矩阵(列),使用标记为 1,反之为 0,矩阵的非零列向量个数即为所使用最少总公交车数。据此,本文通过发车计划矩阵的构建,建立相关的最少公交车数量模型。为了对该优化模型进行有效准确地求解,我们利用 MATLAB软件并采用算法进行遍历搜索求解,得到了最终的全局最优解,制定出使得徐州市 2 路公交车,在早高峰时段运行所需要使用的最少公交车数量的排班计划。
  问题二在问题一的基础上,制定出徐州市 2 路公交车完成一整天的运行所需要使用的最少公交车数量的排班计划,比问题一更加进一步的约束了双班车司机工作时间和极限运行班次数。已知各时间段长度,故各发车时间点即可确定,从而可计算出起终时间。为得到最少公交车总数,单双班车数和每辆车的总班次数,可通过建立全天各时间段发车时间点(行)与使用单班车编号矩阵(列)X,双班车编号矩阵(列)Y,综合得到所有班车编号矩阵(列)Z,进行求解,其非零列向量个数及各非零列向量元素之和即为待求变量。基于此模型求解得最优结果见附录表 1
  根据问题二中矩阵所得的单班车数量公式,综合考虑问题三中ᨀ到的单班车不少于 3 辆的约束即可得到满足问题三约束条件的最优解。基于此模型求解得最优结果见附录表 2
  问题四首先根据增加约束条件对问题二的模型进行改进,然后因为发车间隔的变动与最小停站时间,换班时间,双班车司机的用餐时间之间存在相互作用的关系,这些关系可能使我们要求得的最少公交车的数量发生在不同的发车间隔对应的发车时刻下的变动。为了求得在发车间隔波动的情况下的最小所需车辆数目,我们引入遗传算法,在不同的可行的发车时课表序列中进行交叉,变异,选择等操作从而得到最优的一个最少车辆数的发车时刻表序列,同时为了使算法收敛更快,我们再引入工作时间均匀度指标作为目标函数(适应度函数)的一个决定因素。基于此模型求解得最优结果见附录表 3

模型假设:

  1、假设单双班车为同一车辆类型;
  2、假设公交车按照排班计划表准时进站和出站;
  3、假设途中没有堵车和意外事故发生;
  4、假设环线为单环线,即只有一个运行方向的环线;
  5、假设每辆公交车可以运行 1 整天不需要加油;
  6、假设公交车运行单程时间已包含乘客在各站(包括起终点)的上下车时间;
  7、假设司机吃饭和换班的时间均包含最短停站时间;

问题分析:

  问题一的分析
  问题一要求根据徐州市 2 路公交车行车信息表 1,在从徐州火车站出发后经沿途站点后回到徐州火车站,即完成一次环线的情况下,制定出使得徐州市 2 路公交车,在早高峰时段运行所需要使用的最少公交车数量的排班计划。观察信息表可知,单程时间等因素的单位均为分钟,而早高峰时间段为 6:00-8:00,为便于确定起点发车时间和返回终点时间,将以小时为单位的时间段转化为以分钟为单位,即 06:00 为 0min,08:00 为 120 分钟。早高峰时间段发车时间间隔为4.0±1.0,为使运行所需要使用的公交车数量最少,选取最大发车时间间隔 5min,已知早高峰时间段共 120 分钟,故各发车时间点即可确定。单双班车除班制不同外车速、单程时间等运行条件均相同。因此确定最少公交车数量时,可将单双班车视为同一变量,建立发车时间点(行)与使用班车编号矩阵(列),使用标记为 1,反之为 0,矩阵的非零列向量个数即为所使用最少总公交车数。再依据单班车单班车通常要求在早高峰跑 2-3 个班次,一天不超过 5 个班次,的约束条件,最终确定单双班车使用方案。
  问题二的分析
  问题二要求在问题一的基础上,制定出徐州市 2 路公交车完成一整天的运行所需要使用的最少公交车数量的排班计划,比问题一更加进一步的约束了双班车的排班。对于双班车来说,要求上、下午各一个司机,上午和下午司机的工作时间尽可能均匀,并且都不超过 8 小时,每辆双班车一天运行不超过 10 个班次,由于司机工作时间均衡与司机所发车班次数有直接联系,发车班次数越多,工作时间越长,因此可将对司机工作时间尽可能均衡的要求转化为司机尽可能在各车辆每日所发班次数达到一半时进行换班,遇到不足一班次的情形进行取整运算。为得到排班计划表中起点发车时间和返回终点时间,首先将时间单位统一,得各时间段节点时间,为使运行所需要使用的公交车数量最少,选取各时间段最大发车时间间隔,又已知各时间段长度,故各发车时间点即可确定,从而可计算出起终时间。发车时间点数量为最少班次数,同时在假设不安排单班车的情况下也是最大双班车数。为得到最少公交车总数,单双班车数和每辆车的总班次数,可通过建立全天各时间段发车时间点(行)与使用单班车编号矩阵(列)X,双班车编号矩阵(列)Y,综合得到所有班车编号矩阵(列)Z,进行求解,其非零列向量个数及各非零列向量元素之和即为待求变量。
  问题三的分析
  问题三是在问题二的基础上,要求单班车不少于 3 辆,制定出徐州市 2 路公交车,完成一整天的运行所需要使用的最少公交车数量的排班计划,问题三相对于问题二的差异即为要求单班车不少于 3 辆。单班车是由同一个驾驶员驾驶的公交车。针对所有的单班车通常要求在早高峰跑 2-3 个班次,晚高峰 2-3个班次,每辆单班车一天不超过 5 个班次。早晚高峰时间段为均为 120 分钟,早高峰时间段单程时间为 80min,晚高峰时间段单程时间为 75min,也就是说,一辆单班车在早晚高峰期间均最多发车 2 次。根据问题二中矩阵所得的单班车数量公式,综合考虑问题三中ᨀ到的单班车不少于 3 辆的约束即可得到满足条件的最优解。
  问题四的分析
  该问题要求我们在考虑实际情况,即有最小的发车间隔,双班车数量限制为 19 辆和考虑双班车司机安排吃早晚饭以及换班的条件下求出最少的公交车数量。于是我们首先根据增加约束条件对问题二的模型进行改进,使得到的模型可以求解出在指定定发车时刻的情况下的最小所需车辆数目。然后,因为发车间隔的变动与最小停站时间,换班时间,双班车司机的用餐时间之间存在相互作用的关系,这些关系可能使我们要求得的最少公交车的数量发生在不同的发车间隔对应的发车时刻下的变动。为了求得在发车间隔波动的情况下的最小所需车辆数目,我们引入遗传算法,在不同的可行的发车时课表序列中进行交叉,变异,选择等操作从而得到最优的一个最少车辆数的发车时刻表序列,同时为了使算法收敛更快,我们再引入工作时间均匀度指标作为目标函数(适应度函数)的一个决定因素。

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

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

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

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

G=zeros(16,121);
b=1;s=0;c=0;for a=1:1:16G(a,b)=1;G(1:a-1,b)=0;
G(a+1:16,b)=0;G(a,1:b-1)=0;G(a,b+1:b+16)=0;b=b+1;endfor a=1:1:16G(a,b)=1G(16:a-1,b)=0;G(a+1:16,b)=0;G(a,b:b-1)=0;G(a,b+1:b+16)=0;b=b+1;if b>25n=a;breakendendfor b=1:1:25for a=1:2s=s+G(a,b);endendif s>3for b=17:1:25for a=1:1:16if G(a,b)~=0G(a+2,b)=G(a,b);G(a,b)=0;breakendendendendb=25;for a=11:1:16 G(a,b)=1;G(16:a-1,b)=0;G(a+1:16,b)=0;G(a,b:b-1)=0;G(a,b+1:b+16)=0;b=b+1;if b>30break
endenda=3;for n=0:1:3for b=31:1:87G(a,b+14*n)=1;a=a+1;if a>=17a=3;b=31;breakendendendb=87;
for a=1:1:16G(a,b)=1;b=b+1;
end
k=0;
for b=79:1:98for a=1:2k=k+G(a,b);endendif k>3for b=87:1:103for a=1:1:16if G(a,b)~=0G(a+2,b)=G(a,b);G(a,b)=0;breakendendendend
a=3for n=0:1:2for b=103:1:122G(a,b+14*n)=1;a=a+1;if a>=17a=3;b=31;
breakendendendX=G(1:16,1:120);
G=zeros(16,121);
b=1;s=0;c=0;for a=1:1:16G(a,b)=1;G(1:a-1,b)=0;G(a+1:16,b)=0;G(a,1:b-1)=0;G(a,b+1:b+16)=0;b=b+1;endfor a=1:1:16G(a,b)=1G(16:a-1,b)=0;G(a+1:16,b)=0;G(a,b:b-1)=0;G(a,b+1:b+16)=0;b=b+1;if b>25n=a;breakendendfor b=1:1:25for a=1:3s=s+G(a,b);endendif s>3for b=17:1:25for a=1:1:16if G(a,b)~=0G(a+3,b)=G(a,b);G(a,b)=0;breakendendend
endb=25;for a=11:1:16 G(a,b)=1;G(16:a-1,b)=0;G(a+1:16,b)=0;G(a,b:b-1)=0;G(a,b+1:b+16)=0;b=b+1;if b>30breakendenda=4;for n=0:1:3for b=31:1:87G(a,b+14*n)=1;a=a+1;if a>=17a=4;b=31;breakendendendb=87;
for a=1:1:16G(a,b)=1;b=b+1;
end
k=0;
for b=79:1:98for a=1:3k=k+G(a,b);endendif k>3for b=87:1:103for a=1:1:16if G(a,b)~=0G(a+3,b)=G(a,b);G(a,b)=0;breakend
endendend
a=3for n=0:1:2for b=103:1:122G(a,b+14*n)=1;a=a+1;if a>=17a=4;b=31;breakendendendX=G(1:16,1:120);
(3)第四题:
初始种群生成函数:function [y] = creat( x )
a=[];t=0;
while t<=30r=randi([5 9],1,1);t=t+r;a(end+1)=t;
end
while t<=90r=randi([3,6],1,1);t=t+r;a(end+1)=t;
end
while t<=210r=randi([2,4],1,1);t=t+r;a(end+1)=t;
end
while t<=690r=randi([3,6],1,1);t=t+r;a(end+1)=t;
end
while t<=810r=randi([2,4],1,1);t=t+r;a(end+1)=t;
end
while t<=1065r=randi([5,8],1,1);t=t+r;a(end+1)=t;
end
y=a;
end
全部论文请见下方“ 只会建模 QQ名片” 点击QQ名片即可

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

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

相关文章

【NI-RIO入门】为CompactRIO供电

在大多数情况下&#xff0c;您可以使用可直接连接系统的电源&#xff0c;例如墙上的电源插座。但是&#xff0c;某些应用程序或环境缺乏可用电源&#xff0c;您必须使用其他电源&#xff0c;例如电池。无论您是否有可用电源&#xff0c;您可能都希望通过为系统提供一些冗余来确…

洛谷 P1605 USACO迷宫 (详细解析和AC代码)【深搜+打表】

P1605 迷宫 前言题目题目描述输入格式输出格式样例 #1样例输入 #1样例输出 #1 提示题目分析注意事项 代码后话王婆卖瓜 题目来源 前言 没什么好说的深搜yyds&#xff01;直接深搜一遍过&#xff01; 题目 题目描述 给定一个 N M N \times M NM 方格的迷宫&#xff0c;迷…

python加速方法:GPU加速(numba库)Demo及编写注意事项

上周使用GPU加速了一个算法&#xff0c;效果特别惊艳&#xff0c;由于算法代码本身没有太大参考价值&#xff0c;所以这里只记录了一些心得体会&#xff0c;以便后续遇到问题进行参考排查 numba加速代码编写注意事项 numba加速代码编写一定要注意&#xff1a; 1、开辟空间&am…

【Java并发】聊聊不安全的HashMap以及ConcurrentHashMap

在实际的开发中&#xff0c;hashmap是比较常用的数据结构&#xff0c;如果所开发的系统并发量不高&#xff0c;那么没有问题&#xff0c;但是一旦系统的并发量增加一倍&#xff0c;那么就可能出现不可控的系统问题&#xff0c;所以在平时的开发中&#xff0c;我们除了需要考虑正…

Python从入门到精通(黑马课程)

目录 运算符 数字运算符 比较运算符 逻辑运算符 转义字符 变量使用 变量定义 变量类型 变量命名 变量函数 input函数 type函数 条件语句 If 格式 案例1&#xff0c;判断年龄 案例2&#xff0c;借钱 案例3&#xff0c;and、or应用 循环语句 for 格式 案例…

如何使用Cloudreve将个人电脑打造为私有云盘并实现远程访问

文章目录 1、前言2、本地网站搭建2.1 环境使用2.2 支持组件选择2.3 网页安装2.4 测试和使用2.5 问题解决 3、本地网页发布3.1 cpolar云端设置3.2 cpolar本地设置 4、公网访问测试5、结语 1、前言 云存储概念兴起后&#xff0c;现在市面上也已经有了很多公有云盘。但一段时间后…

redis基本数据结构

Redis入门&#xff1a;五大数据类型 文章目录 Redis入门&#xff1a;五大数据类型一.概述二.Redis的基本了解三.Redis五大数据类型1.String (字符串)2.List(列表)3.Set集合(元素唯一不重复)4.Hash集合5.zSet(有序集合) 一.概述 什么是Redis Redis&#xff08;Remote Dictiona…

Java 之 lambda 表达式(一)

目录 一. 前言 二. lambda 表达式语法 2.1. 语法1&#xff1a;无参&#xff0c;无返回值 2.2. 语法2&#xff1a;一个参数&#xff0c;无返回值 2.3. 语法3&#xff1a;两个参数&#xff0c;lambda 体中有多条语句 2.4. 语法4&#xff1a;两个以上参数&#xff0c;有返回…

C++ STL-----容器

STL容器就是将运用最广泛的一些数据结构实现出来 常用的数据结构&#xff1a;数组, 链表,树, 栈, 队列, 集合, 映射表 等 这些容器分为序列式容器和关联式容器两种: 序列式容器:强调值的排序&#xff0c;序列式容器中的每个元素均有固定的位置。 关联式容器:二叉树结构&…

深入了解Java8新特性-日期时间API:LocalDateTime类

阅读建议 嗨&#xff0c;伙计&#xff01;刷到这篇文章咱们就是有缘人&#xff0c;在阅读这篇文章前我有一些建议&#xff1a; 本篇文章大概22000多字&#xff0c;预计阅读时间长需要20分钟以上。本篇文章的实战性、理论性较强&#xff0c;是一篇质量分数较高的技术干货文章&…

c++没有返回值的返回值

上面的函数search没有返回值,因为a不等于1,但是输出的时候会输出6.这恰巧是x的值,如果我们希望a不等于1时返回x,那么这种结果反而是正确的.有时候这种错误的代码可能产生正确的结果反而会加大debug难度 int search(int n) { 00007FF66DB723E0 mov dword ptr [rsp8],e…

简易版扫雷+代码分析

前言&#xff1a; 实验一个简易版的扫雷&#xff0c;也要两百来行的代码&#xff0c;因此为了代码整洁&#xff0c;维护起来方便&#xff0c;这里我们和前期实现的三子棋一样&#xff0c;也弄一个游戏的头文件game.h用来装各种头文件以及函数的声明以及宏定义、预处理信息&…

视频文件+EasyDarwin做摄像机模拟器模拟RTSP流很方便,还能做成系统服务,方法与流程

之前我看到过一家人工智能做算法的企业&#xff0c;用EasyDarwinFFMPEG做了一个摄像机的模拟器&#xff0c;方法大概是&#xff1a; 用ffmpeg读取mp4等类型的视频文件&#xff08;当然ffmpeg啥都能读取&#xff09;&#xff0c;再以RTSP协议的形式推送给EasyDarwin&#xff1b…

为IP地址申请SSL证书

SSL&#xff08;Secure Sockets Layer&#xff09;是一种网络协议&#xff0c;用于在浏览器与服务器之间建立安全、加密的连接。SSL证书是用于证明您的网站身份并启用HTTPS&#xff08;超文本传输安全协议&#xff09;的安全文件。这种协议可以确保用户与您的网站之间的所有通信…

统计学中两组数据如何进行差异性(相关性)分析?

变量说明&#xff1a; 在确定分析方法前&#xff0c;我们需要了解手中的数据类型&#xff0c;这是最基础也是有必要的&#xff0c;在所有的数据类型中&#xff0c;我们将数据类型分为分类变量也为定类变量和连续变量也称为定量变量&#xff0c;那么什么是定类变量&#xff1f;…

C语言--每日选择题--Day25

第一题 1. 对于C/C语言的函数&#xff0c;下列叙述中正确的是&#xff08; &#xff09; A&#xff1a;函数的定义不能嵌套&#xff0c;但函数调用可以嵌套 B&#xff1a;函数的定义可以嵌套&#xff0c;但函数调用不能嵌套 C&#xff1a;函数的定义和调用都不能嵌套 D&#xf…

凝聚数字经济发展新力量,四象科技受邀出席2023全球数商大会

11月25日&#xff0c;2023全球数商大会在上海开幕。本届大会以“数联全球、商通未来”为主题&#xff0c;上海市委副书记、市长龚正出席大会并宣布大会开幕&#xff0c;国家发展改革委党组成员&#xff0c;国家数据局党组书记、局长刘烈宏&#xff0c;上海市副市长陈杰致辞。四…

奇异值分解SVD(Singular Value Decomposition)

一种理解方式&#xff0c;值得学习&#xff08;分解时空矩阵&#xff09; 先在这里阐述一下SVD的用途吧&#xff0c;具体细节稍后再做补充 1.通过SVD对数据的处理&#xff0c;我们可以使用小得多的数据集来表示原始数据集&#xff0c;这样做实际上是去除了噪声和冗余信息&…

SA与NSA网络架构的区别

SA与NSA网络架构的区别 1. 三大运营商网络制式&#xff1a;2. 5G组网方式及业务特性3. NSA-3系列4. NSA—4系列5. NSA-7系列6. 5G SA网络架构7. 运营商策略 1. 三大运营商网络制式&#xff1a; 联通&#xff1a;3G(WCDMA)\4G(FDD-LTE/TD-LTE)\5G(SA/NSA)移动&#xff1a;2G(GS…

【备忘录】快速回忆ElasticSearch的CRUD

导引——第一条ElasticSearch语句 测试分词器 POST /_analyze {"text":"黑马程序员学习java太棒了","analyzer": "ik_smart" }概念 语法规则 HTTP_METHOD /index/_action/IDHTTP_METHOD 是 HTTP 请求的方法&#xff0c;常见的包括…