1 简介
在给定有限的候选公交站点、有限的连接,已知各OD对乘客的出行需求的情况下,进行定制公交的路线设计,寻找最优的运行路线,确定每辆车运送的乘客数量。车辆从场站出发,最终返回场站。每个站点有规定的时间间隔,车辆超出该时间间隔外到达站点将有乘客放弃使用该服务。 假设:(1)已知各OD对的出行需求;(2)预先设定每个站点的规定时间间隔和停站时间;(3)已知站点间的运行时间和距离;(4)车辆的容量和平均车速是给定的常数;(5) 定制公交运行线路是双向的物理网络。
2 部分代码
%
%
clear
clc
close all
tic
%% 用importdata这个函数来读取文件
c101=importdata('.\data\c101.txt');
cap=50; %车辆最大装客量
%% 提取数据信息
E=c101(1,5); %发车中心时间窗开始时间
L=c101(1,6); %发车中心时间窗结束时间
vertexs=c101(:,2:3); %所有点的坐标x和y
customer=vertexs(2:end,:); %站点坐标
cusnum=size(customer,1); %站点数
v_num=21; %车辆最多使用数目
demands=c101(2:end,4)./2; %每个站点乘客量
a=c101(2:end,5); %站点时间窗开始时间[a[i],b[i]]
b=c101(2:end,6); %站点时间窗结束时间[a[i],b[i]]
s=c101(2:end,7); %站点的服务时间
h=pdist(vertexs);
dist=squareform(h); %距离矩阵,满足三角关系,暂用距离表示花费c[i][j]=dist[i][j]
alpha=10; %违反的容量约束的惩罚函数系数
belta=100; %违反时间窗约束的惩罚函数系数
MAXGEN=100; %迭代次数
%% 遗传算法
NIND=100; %种群大小
Pc=0.9; %交叉概率
Pm=0.05; %变异概率
GGAP=0.9; %代沟(Generation gap)
N=cusnum+v_num-1; %染色体长度=站点数目+车辆最多使用数目-1
addpath('.\GA\')
[FF_GA,bestVC_GA]=ga(cusnum,a,b,L,s,dist,demands,cap,NIND,N,alpha,belta,GGAP,Pm,Pc,MAXGEN);
rmpath('.\GA\')
%%
%% 禁忌搜索设置参数
lamda=0.015;
delta=0.5;
vehicles_customer=cell(cusnum,1); %每辆车所经过的站点
TbLength=20; %禁忌长度
addpath('.\TW\')
[FF_TW,bestVC_TW]=TW(cusnum,a,b,L,s,dist,demands,cap,alpha,belta,MAXGEN,TbLength,delta,lamda);
rmpath('.\TW\')
disp('遗传算法最优解:')
draw_Best(bestVC_GA,vertexs);
title('遗传算法最优派车方案路线图')
disp('禁忌搜索算法最优解:')
draw_Best(bestVC_TW,vertexs);
title('禁忌搜索算法最优派车方案路线图')
figure(3);
hold on;box on
xlim([0,MAXGEN])
title('迭代曲线')
xlabel('代数')
ylabel('最优值')
plot(1:MAXGEN,FF_GA,'b-',1:MAXGEN,[FF_TW,FF_TW(end)],'r-')
legend('遗传算法','禁忌搜索算法')
toc
3 仿真结果
4 参考文献
[1]阎庆, and 邰蕾蕾. "用混合遗传算法解决有时间窗的车辆路径规划问题." 安徽大学学报(自科版) 032.002(2007):41-44.