1 簡介
在給定有限的候選公交站點、有限的連接,已知各OD對乘客的出行需求的情況下,進行定制公交的路線設計,尋找最優(yōu)的運行路線,確定每輛車運送的乘客數量。車輛從場站出發(fā),最終返回場站。每個站點有規(guī)定的時間間隔,車輛超出該時間間隔外到達站點將有乘客放棄使用該服務。? ? 假設:(1)已知各OD對的出行需求;(2)預先設定每個站點的規(guī)定時間間隔和停站時間;(3)已知站點間的運行時間和距離;(4)車輛的容量和平均車速是給定的常數;(5) 定制公交運行線路是雙向的物理網絡。
2 部分代碼
%
%
clear
clc
close all
tic
%% 用importdata這個函數來讀取文件
c101=importdata('.datac101.txt');
cap=50; %車輛最大裝客量
%% 提取數據信息
E=c101(1,5); %發(fā)車中心時間窗開始時間
L=c101(1,6); %發(fā)車中心時間窗結束時間
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('遺傳算法最優(yōu)解:')
draw_Best(bestVC_GA,vertexs);
title('遺傳算法最優(yōu)派車方案路線圖')
disp('禁忌搜索算法最優(yōu)解:')
draw_Best(bestVC_TW,vertexs);
title('禁忌搜索算法最優(yōu)派車方案路線圖')
figure(3);
hold on;box on
xlim([0,MAXGEN])
title('迭代曲線')
xlabel('代數')
ylabel('最優(yōu)值')
plot(1:MAXGEN,FF_GA,'b-',1:MAXGEN,[FF_TW,FF_TW(end)],'r-')
legend('遺傳算法','禁忌搜索算法')
toc
3 仿真結果
4 參考文獻
[1]閻慶, and 邰蕾蕾. "用混合遺傳算法解決有時間窗的車輛路徑規(guī)劃問題." 安徽大學學報(自科版) 032.002(2007):41-44.
?
本文摘自 :https://blog.51cto.com/u