1️⃣ 问题陈述
1️⃣.1️⃣ 需要解决的问题
目前地铁一般采用如下的单一交路:目前,我国绝大多数城市都采用这种交路形式,但是当断面客流量分布不均匀时容易造成线路运能浪费,客流拥挤。
替代方案就是用大小交路:
使用遗传算法程序就是在既定的OD矩阵下找到最优的大小交路的往返站$S_a,S_b$以及相应的大小交路的发车频率$f_1,f_2$,也就是在遗传算法每次运行中,根据不同的大小交路折返站的设置,划分预定的OD出行矩阵,然后计算目标函数,判断是否达到最优。
1️⃣.2️⃣ 变量定义
- $Q_1$——出行$O$点或$D$点位于小交路覆盖区段外出行以及$OD$均位于小交路覆盖区段外的客流量,人;
- $Q_2$——出行$OD$位于小交路覆盖区段的客流量,人;
- $t_{1d}、t_{2d}$——$Q_1、Q_2$对应乘客的平均候车时间,$s$;
- $q_{od}$——在车站$o$上车,在车站$d$下车的客流量,人;
- $i$——列车交路的集合,$i=\{1,2\}$,$1$代表大交路,$2$代表小交路;
- $f_i$——大小交路运行方式下的交路i的发车频率,对/小时;
- $f$——单一交路运行方式下的发车频率,对/小时;
- $f_{min}$——最小发车频率,设置为$12$对/小时;
- $T_{1周}、T_{2周}$——大小交路列车周转时间,$s$;
- $t_{运,j}$——列车在区间$j$的纯运行时间,$s$;
- $t_{停,j}$——列车在车站$h$的停站时间,$s$,设置为$30s$;
- $t_{折}$——列车在终点站、中间站的最小折返间隔时间,$s$,设置为$120s$;
- $C_z$——列车定员,即标准载客人数,人,设置为$1460$;
- $\alpha$——列车满载率上限,设置为100%;
- $I_o$——列车最小追踪间隔,$s$,设置为$120s$;
1️⃣.3️⃣ 目标函数
其中
1️⃣.4️⃣ 约束条件
列车数量
其中
满载率约束
满足最小追踪间隔
折返站折返能力
满足最小发车频率
其他约束
2️⃣ MATLAB
程序
所有的程序以及数据,OD出行矩阵以及区间运行时间在:列车交路方案优化遗传算法程序
2️⃣.1️⃣ myself.m
——主脚本
主脚本,OD
矩阵可以使用od.m
脚本随机生成。
1 | clear;clc;close all; |
2️⃣.2️⃣ od.m
——生成随机出行OD
矩阵
用来生成随机出行OD
矩阵。
1 | Mu = 26; |
2️⃣.3️⃣ m_InitPop.m
——初始化种群
1 | function pop=m_InitPop(numpop,irange_l,irange_r) |
2️⃣.4️⃣ m_Select.m
——选择
1 | function parentPop=m_Select(matrixFitness,pop,SELECTRATE) |
2️⃣.5️⃣ Crossover.m
——交叉
1 | %% 子函数 |
2️⃣.6️⃣ Variation.m
——变异
1 | %% 子函数 |
2️⃣.7️⃣ m_Coding.m
——编码
因为总共$35$座车站,$a,b,f_1,f_2$都不超过$35<2^6$,所以$4$个参数都设置为$6$位二进制,这样编码总长度为$24$。
1 | function binPop=m_Coding(pop,pop_length,irange_l) |
2️⃣.8️⃣ m_Incoding.m
——解码
解码时编码长度为$24$,每隔$6$位转化成十进制。
1 | function pop=m_Incoding(binPop,irange_l) |
2️⃣.9️⃣ m_Fitness.m
——适应度函数(重要,实现约束条件)
在这里实现约束条件,思路就是不满足约束条件的种群的适应度设置为无穷小,那么在下一代的迭代中就会将适应度低的种群淘汰掉,实现约束的目的。
1 | function fitness=m_Fitness(pop, OD, h) |
2️⃣.🔟 m_Fx.m
——目标函数(重要)
1 | function y=m_Fx(x, OD) |
3️⃣ 运行结果
1 | 最优解:71335.4762分钟 |
即设置第$4$和第$32$个站点为大小交路折返站,大交路发车频率为$14$列/小时,小交路发车频率为$4$列/小时,最低平均等待时间为$71335$分钟。
图像结果: