【优化调度】遗传算法求解公交车调度排班优化问题【含Matlab源码 2212期】

news2025/8/12 9:58:23

⛄ 一、 遗传算法简介

1 引言
公交排班问题是城市公交调度的核心内容,是公交调度人员、司乘人员进行工作以及公交车辆正常运行的基本依据。行车时刻表是按照线路的当前客流量情况,确定发车频率,提供线路车辆的首、末车时间。它是公交企业对社会的承诺,决定着为乘客服务的水平,发车间隔越小,服务水平越高,但是公交企业投入的成本越高。行车时刻表的编制应是在满足客流需求的前提下,尽量减少不必要的投入,这是个多目标优化问题。目前,遗传算法是解决公交排班问题的有效方法之一。但在引入遗传算法的时候,普遍存在几个问题:①遗传算法过于简单,导致结果不准确,计算效率低;②模型太复杂不利于求解;③以一个统计时间段(如1小时)为模型的基本对象,得出该时间段内的均匀发车间隔,这忽略了整个时间段内的数据变化。基于以上的考虑,提出了综合改进的遗传算法应用于智能公交排班,模型同时考虑了乘客和公交公司的双重利益,最大和最小发车间隔、两个相邻的发车间隔之差以及满载率等约束条件,得出非均匀的发车时刻表,利用综合改进的遗传算法提高计算效率。

2 公交排班问题描述及数学模型的建立
公交排班的目的是确定最优或者近似最优的运营车辆的发车时刻表。公交车队按照该时刻表发车能够达到最高的运营效率和服务水平。本项目选用厦门市公交总公司思明分公交的30路运营车队作为排班对象,不失一般性,只考虑上行线路,即要优化30路车始发站的发车时刻表。线路上行方向有26个站,首班车发车时间为早上6点整,末班车发车时间为22:05分,所有运营车都在整分钟时刻发车,以距离首发时刻的时间间隔为发车时刻,选择发车时刻为决策变量,单位为分钟,在这里定义首发时刻为0分钟发车即对应早上6点发车。 一天之内的总班次为m,总时间为965分钟,最后一辆车的发车时间为第965分钟发车对应晚上22:05分发车。

由于受到数目众多的排班规则的影响,以及要达到多项指标的均衡,公交车辆排班问题变得极其复杂,在这里建立数学模型,把实际的问题抽象为数学问题。

为了更好的进行排班算法的研究,有必要对公交排班问题进行简化和假设:

1)各公交车为同一车辆类型;

2)公交车按调度时间表准时进站和出站,车速恒定,保持匀速行驶,途中没有堵车和意外事故;

3)各时段以内乘客到站服从均匀分布;

4)以分钟作为最小的时间单位;

5)实行统一票价。

2.1 建立目标函数
本文以乘客的等车时间成本最小和公交公司的运营收益最大为目标建立模型。
1)一天内乘客总的等车时间成本
总的等车时间WT’ij为:
在这里插入图片描述
总的等车时间成本
调查的厦门市目前平均工资水平为32343元/年.人,按照双休日休息及法定的放假时间,现在一年大概有115天的休息时间,即有250天在工作,平均每天按工作8小时计算。
平均每分钟的工资为:
在这里插入图片描述
则总的等车时间成本为:
在这里插入图片描述
式(1)- (2)中,m表示在整个调度周期内发车车次总数;n表示线路的车站总数;t表示在整个调度周期内的连续时间;ti表示第i车次的始发站发车时间(min)(i=1,2,…,m);rj表示第j站在调度周期内随时间变化的乘客到达率(j=1,2,…,n); WT’ij表示所有乘客总的等车时间(min);w’表示总的等车时间成本(元)。

2)公交公司的运营收益
公交公司的运营收益为整个收入减去整个运营成本。
在这里插入图片描述
分别给乘客等车时间成本和公交公司的运营收益以不同的权系数,把以上两个目标函数转化为单目标函数,使得公交优化排班问题成为一个单目标优化问题。合并后的目标函数为:
Minz=α×w′-β×R′ (4)

在这里插入图片描述
式(3)-(5)中,R’为运营收益;C为车辆运营的单位可变成本(元/车.公里);L为线路总的长度(公里);P表示统一的票价(元/人.次);α表示乘客等车时间成本权系数;β表示公交公司运营收益权系数。

2.2 模型约束条件
1)平均满载率的约束
在这里插入图片描述
其中:Q车容量表示车辆满载时的容量(人/车);θ表示每车平均期望满载率(0<θ<100%)。

2)最大最小发车时间间隔约束

任意相邻两车之间的发车间隔要满足最大最小发车时间间隔约束,即:
Tmin≤ti-ti-1≤Tmax (i=2,3,…,m) (7)
其中:Tmax表示相邻两车之间的最大发车间隔(min);Tmin表示相邻两车之间的最小发车间隔(min)。

3)两个相邻的发车间隔之差的约束

为保证发车时刻的连续性,任意两个相邻的发车间隔之差不宜太大,即
在这里插入图片描述
其中:ε表示两相邻发车间隔之差的限值。

2.3 发车时刻模型
综合以上的模型的目标函数和约束条件,最终得出公交发车时刻模型如下:
在这里插入图片描述
其中:
在这里插入图片描述

3公交排班问题的遗传算法设计
整个遗传算法的基本流程图如图1,根据公交排班的特点,对遗传算法进行了一定的改进,按如下方法进行遗传算法设计。
在这里插入图片描述
图1 遗传算法的基本流程图

3.1 决策变量的真实值
结合公交排班的特点,采用真实值编码方法。在这种编码方法中,个体染色体的各个基因座上的值就是决策变量的真实值。与X=[x1,x2,…,xm]T相对应的染色体X即表示为码串[x1,x2,…,xm]。采用真实值编码后,每个编码位置(基因座)的值就表示该时刻距离首发时刻的时间,单位为分钟,在这里定义首发时间为0分钟。如长度为m的编码串:(0, 3, 6,…, 965), 0表示首发时间,3表示第二趟车距首发3分钟发车,6表示第二趟车距首发6分钟发车,…,965表示第m趟车距首发965分钟发车。

针对解决公交排班问题,采用真实值编码作为染色体的基因有以下优点[6][7]:①适合于表示范围较大的数和较大空间的遗传搜索;②改善计算的复杂性,减少了编码和解码过程,提高运算效率;③便于处理复杂的决策变量约束条件。真实值编码的基因,如果一个个体中性状优良的基因片断被遗传到下一代,那么该片断在新个体中仍然是优良的。可见这种编码性质保证了遗传算法充分发挥其代代进化的特点。而用其他编码方法,一个好的基因片断复制到下一代就不一定还是好的。

3.2 约束条件的处理
数学上处理约束最优化问题时,有一类算法是通过把约束问题转换成序列化的无约束问题来进行求解。其中比较著名的有罚函数法,也称二次惩罚法[8]。作为一种有约束非线性最优化方法,其基本思想是通过建立一个新的函数把约束问题化为一系列无约束问题来处理,根据选择的惩罚项的函数形式不同又分为内点法和外点法。内点法的特点就是首先在可行域内求得一个可行的初始点,在求解过程中探索点必须保持在可行域内部。本文中运行内点法建立惩罚项。最终得到的目标函数为:
在这里插入图片描述
其中,z为原目标函数,f(x)是利用惩罚函数后的目标函数值,λ1、λ2、λ3、λ4>0,分别为惩罚函数作用于约束条件的系数(即惩罚系数)

3.3 适应度函数
适应度函数的设定在整个遗传算法的操作过程中占了很重要的地位。根据建立起来的目标函数来设定适应度函数。公交排班模型的目标函数是最小化问题,为了保证染色体的适应度取值为非负数,采用如下适应度函数:
F(X)=Cmax-f(X)
其中f(X)为个体的目标函数,Cmax为同一代群体中所有目标函数的最大值。

3.4 初始群体
针对公交排班的特点,采用结合先验知识产生初始群体的方法。由于乘客在时间上的分布很大程序上左右了排班的优化过程,而乘客的分布在一天内又很不均匀,一天内有几个高峰期,高峰期单位时间内到达各个车站的乘客数量会增多,这时的发车间隔应该缩短,而其他非高峰期的发车间隔应该增长。所以完全靠随机产生初始群体不能满足实际问题的需要,故应该对初始群体进行编码调整,其计算公式如下:
在这里插入图片描述
其中x′i是基因xi经过调整后的值,易知基因xk为收缩中心,a为(0,1)内的数,称为收缩系数。

3.5 遗传算子
3.5.1 选择算子

采用进行了修改的比较选择方法和最优保留策略。方法如下:

先比较群体P(t)中的各个个体,找出P(t)中所有不同的个体,组成中间群体,选择过程对中间群体进行选择同样选择M次可以产生新一代群体P(t+ 1)。该方法主要是作用于在遗传算法搜索的后期阶段,群体中可能有很多个体都是相同的这种情况。这时,用改进方法,新出现的优秀个体将以更大的概率复制到下一代。在公交排班的遗传算法中采用最优保存策略,该策略可保证最优个体不被交又、变异等遗传运算所破坏,直接进入下一代。可见改进的方法具有更强的局部搜索能力。

3.5.2 交叉算子
选择单点交叉[9]作为遗传算法的交叉运算,其基本过程如下: 对于按照交叉概率PC从种群中选出的某条染色体,随机地在染色体上选择一个断点,交换双亲上断点的右端,生成新的后代。

3.5.3 变异算子
采用均匀变异操作。其基本过程如下:依次指定染色体当中的基因座为变异点,对每个变异点以很小的变异概率从对应基因的取值范围内取一个均匀分布的随机数来代替原来的基因。由于求的是非均匀发车时刻,且以每一时刻作为染色体的基因,故染色体中任一基因xk的取值范围是(xk-1,xk+1),则变异后的新基因值x′k为:

x′k=xk-1+r×(xk+1-xk-1)

式中,r为(0,1 )内均匀分布的一个随机数。

⛄ 二、部分源代码

clear;clc;close all
%% 载入模型参数
LoadData();

%% 参数设置
PopSize = 50;
MaxGen = 100;
plt = 1; % 运行过程是否实时画迭代优化图,默认关闭(可极大提高运行速度)

%% 初始化
Population = Init(PopSize);
ConvergenceObj = zeros(2,PopSize);
ConvergenceCon = zeros(2,PopSize);

% return
%% 开始优化求解
h = figure();
for gen = 1:MaxGen
MatingPool = randperm(PopSize,PopSize); %父代挑选
Offspring = GA(Population(MatingPool)); %进行交叉变异操作
Population = EnviornmentalSelection(Population,Offspring,gen/MaxGen); %挑选子代
RecordInfo(); % 记录迭代优化信息
end
BestSol = BestInd(end);
disp([‘发车时间间隔:’ num2str(BestSol.decs)])
disp([‘时段发车数量:’ num2str(floor(60./BestSol.decs))])
disp([‘乘客总时间成本:’ num2str(BestSol.Q) ‘, 公交公司运行费用:’ num2str(BestSol.G)])
disp([‘总体载客率:’ num2str(100*BestSol.zaikelv) ‘%’])
figure
yyaxis right
plot(BestSol.decs,‘-s’,‘linewidth’,2)
ylabel(‘发车时间间隔/分钟’)
hold on
yyaxis left
plot(bus.C,‘-d’,‘linewidth’,2)
ylabel(‘客流量’)
xlabel(‘时段’)

⛄ 三、运行结果

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

⛄ 四、 matlab版本及参考文献

1 matlab版本
2014a

2 参考文献
[1]王庆荣,朱昌盛,梁剑波,冯文熠.基于遗传算法的公交智能排班系统应用研究[J].计算机仿真. 2011,28(03)

3 备注
简介此部分摘自互联网,仅供参考,若侵权,联系删除

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

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

相关文章

2023-2028年中国花炮行业市场供需与投资预测分析报告

本报告由锐观咨询重磅推出&#xff0c;对中国花炮行业的发展现状、竞争格局及市场供需形势进行了具体分析&#xff0c;并从行业的政策环境、经济环境、社会环境及技术环境等方面分析行业面临的机遇及挑战。还重点分析了重点企业的经营现状及发展格局&#xff0c;并对未来几年行…

【Java 设计模式】简单工厂模式 静态工厂模式

简单工厂模式 & 静态工厂模式1 简单工厂模式1.1 角色1.2 点咖啡案例1.2.1 类图1.2.2 实现1.3 优点1.4 缺点2 静态工厂模式2.1 代码变动2.2 优点1 简单工厂模式 简单工厂模式并不属于 23 种设计模式。 1.1 角色 抽象产品&#xff1a;定义产品的规范&#xff0c;描述产品的…

相控阵天线(七):常规平面阵列分布(矩形阵列、三角栅格、六边形阵列和圆形阵列)

目录简介矩形栅格平面阵列三角栅格平面阵列六边形阵列圆形平面阵列空心平面阵列简介 常见的平面阵有一些基本类型&#xff0c;按照栅格形式可以进行以下划分&#xff1a;矩形栅格、三角形栅格、同心圆环和椭圆环栅格等&#xff1b;按照边界形式可以进行以下划分&#xff1a;矩…

React Native Webview 中input type=file accept=“image/*“ 无法调起相机问题排查及解决

最近在写一个react native 项目&#xff0c;其中react-native-webview库一些使用着实遇到了不少问题&#xff0c;耗时比较长&#xff0c;现在和大家分享一下。 图片上传时选择拍照是很常见的功能&#xff0c;写的h5项目一直调用正常。使用方式大概如下&#xff1a; <input…

【数据结构】—— 双链表的增删改查

❤️一名热爱Java的大一学生&#xff0c;希望与各位大佬共同学习进步❤️ &#x1f9d1;个人主页&#xff1a;周小末天天开心 各位大佬的点赞&#x1f44d; 收藏⭐ 关注✅&#xff0c;是本人学习的最大动力 感谢&#xff01; &#x1f4d5;该篇文章收录专栏—数据结构 目录 双…

艾美捷小鼠肿瘤坏死因子α-ELISpot试剂盒使用指南

ELISpot Plus for enumeration of cells secreting TNF-α This kit is ideal for users who want a convenient and sensitive assay. The assay is designed for the enumeration of cells secreting mouse TNF-α. The kit includes ELISpot plates pre-coated with monocl…

[附源码]计算机毕业设计JAVA面试刷题系统

[附源码]计算机毕业设计JAVA面试刷题系统 项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis M…

【C++】--模拟实现vector

文章目录Constructors(构造函数)myvector()myvector(int n, const T& val T())myvector(InputIterator first, InputIterator last)拷贝构造交换函数myvector< T >& operator(myvector< T > v)迭代器扩容reserveresize插入和删除push_backpop_backinserte…

CDH启用kerberos 高可用运维实战

一、背景说明 在前的文章中介绍过《CDH集成的kerberos迁移实战》,由此也考虑到kerberos单节点可能引发的线上事故&#xff0c;所有考虑到把线上kerberos服务启用高可用。 二、环境介绍 系统版本 CentOS Linux release 7.6.1810 (Core) CM版本 Kerberos版本 三、实操…

桌面应用开发有哪些主流框架?

受益于开源技术的发展&#xff0c;以及响应快速开发的实际业务需求&#xff0c;跨平台开发不仅限于移动端跨平台&#xff0c;桌面端虽然在市场应用方面场景不像移动端那么丰富&#xff0c;但也有市场的需求。 相对于个人开发者而言&#xff0c;跨平台框架的使用&#xff0c;主要…

零基础学习下载FL Studio2023水果编曲软件

FL Studio工具常称水果编曲软件&#xff0c;是一款功能强大的编曲软件&#xff0c;集编曲&#xff0c;录音&#xff0c;剪辑&#xff0c;混音于一身&#xff0c;简单易上手&#xff0c;灵活性高&#xff0c;强大到突破想象。FL Studio&#xff0c;当前版本 FL Studio21&#xf…

Transductive Learning 和 Inductive Learning

简介 在 kipf-GCN 和 GraphSage 中&#xff0c;对 Transductive Learning 和 Inductive Learning 有了比较深刻的认识。 kipf-GCN 在其论文中提到算法属于 transductive node classification&#xff0c;也就是在训练节点embedding的时候要看到全图的节点&#xff0c;这是因为…

Linux——进程间通信(共享内存)

一、共享内存 1、定义 共享内存为多个进程之间共享和传递数据提供了一种有效的方式。共享内存是先在物理内存上申请一块空间&#xff0c;多个进程可以将其映射到自己的虚拟地址空间中。所有进程都可以访问共享内存中的地址&#xff0c;就好像它们是由malloc分配的一样。如果某…

47 - 父子间的冲突

---- 整理自狄泰软件唐佐林老师课程 1. 思考 子类中是否可以定义父类中的同名成员&#xff1f; 如果可以&#xff0c;如何区分&#xff1f;如果不可以&#xff0c;why&#xff1f; 1.1 编程实验&#xff1a;同名成员变量 #include <iostream> #include <string>…

操作系统导论--受限制的直接执行

受限直接执行 为了使程序尽可能快地运行&#xff0c;操作系统开发人员想出了一种技术——我们称之为受限的直接执行。 这个概念的“直接执行”部分很简单&#xff1a;只需直接在CPU上运行程序即可。因此&#xff0c;当OS希望启动程序运行时&#xff0c;它会在进程列表中为其创…

Packet Tracer - 排除单区域 OSPFv2 故障

地址分配表 设备 接口 IP 地址 子网掩码 默认网关 R1 G0/0 172.16.1.1 255.255.255.0 不适用 S0/0/0 172.16.3.1 255.255.255.252 不适用 S0/0/1 192.168.10.5 255.255.255.252 不适用 R2 G0/0 172.16.2.1 255.255.255.0 不适用 S0/0/0 172.16.3.2 25…

slam定位学习笔记(六)

学习内容来自这篇文章&#xff0c;主要是将模块进行划分以及根据划分的模块对前面的代码结构进行调整。 一、模块划分 之前的文章主要介绍了这几个功能的实现&#xff1a;传感器时间同步、点云去畸变、实时显示点云、精度评价和前端里程计。将它们区分成三个模块&#xff1a;…

基于JSP的私人牙科医院管理系统【数据库设计、源码、开题报告】

数据库脚本下载地址&#xff1a; https://download.csdn.net/download/itrjxxs_com/86466989 主要使用技术 ServletJSPJSCSSMysql 功能介绍 登录注册模块&#xff1a;填写基本信息注册&#xff08;普通用户&#xff09;登录&#xff1b; 公告管理&#xff1a;公告增删改查&…

预训练模型分词方式

BPE、WordPiece、SentencePiece tokenize的目标是将输入的文本流&#xff0c; 切分成一个个子串&#xff0c;使得每个子串具有相对完整的语义&#xff0c;便于学习embedding表达和后续模型的使用。 tokenize三种粒度&#xff1a;word、subword、char word/词&#xff1a;最自…

Flutter高仿微信-第35篇-单聊-视频通话

Flutter高仿微信系列共59篇&#xff0c;从Flutter客户端、Kotlin客户端、Web服务器、数据库表结构、Xmpp即时通讯服务器、视频通话服务器、腾讯云服务器全面讲解。 详情请查看 效果图&#xff1a; 目前市场上第三方视频接口的价格高的吓人 视频通话价格&#xff1a; 标清&…