當(dāng)前位置:首頁 > IT技術(shù) > 編程語言 > 正文

【路徑規(guī)劃】基于遺傳算法求解帶時(shí)間窗帶容量公交車車輛路徑規(guī)劃問題(CVRPTW)matlab源碼
2021-10-21 23:05:43

1 簡介

在給定有限的候選公交站點(diǎn)、有限的連接,已知各OD對(duì)乘客的出行需求的情況下,進(jìn)行定制公交的路線設(shè)計(jì),尋找最優(yōu)的運(yùn)行路線,確定每輛車運(yùn)送的乘客數(shù)量。車輛從場(chǎng)站出發(fā),最終返回場(chǎng)站。每個(gè)站點(diǎn)有規(guī)定的時(shí)間間隔,車輛超出該時(shí)間間隔外到達(dá)站點(diǎn)將有乘客放棄使用該服務(wù)。? ? 假設(shè):(1)已知各OD對(duì)的出行需求;(2)預(yù)先設(shè)定每個(gè)站點(diǎn)的規(guī)定時(shí)間間隔和停站時(shí)間;(3)已知站點(diǎn)間的運(yùn)行時(shí)間和距離;(4)車輛的容量和平均車速是給定的常數(shù);(5) 定制公交運(yùn)行線路是雙向的物理網(wǎng)絡(luò)。

【路徑規(guī)劃】基于遺傳算法求解帶時(shí)間窗帶容量公交車車輛路徑規(guī)劃問題(CVRPTW)matlab源碼_VRPTW

【路徑規(guī)劃】基于遺傳算法求解帶時(shí)間窗帶容量公交車車輛路徑規(guī)劃問題(CVRPTW)matlab源碼_VRPTW_02

【路徑規(guī)劃】基于遺傳算法求解帶時(shí)間窗帶容量公交車車輛路徑規(guī)劃問題(CVRPTW)matlab源碼_VRPTW_03

【路徑規(guī)劃】基于遺傳算法求解帶時(shí)間窗帶容量公交車車輛路徑規(guī)劃問題(CVRPTW)matlab源碼_VRPTW_04

【路徑規(guī)劃】基于遺傳算法求解帶時(shí)間窗帶容量公交車車輛路徑規(guī)劃問題(CVRPTW)matlab源碼_VRPTW_05

【路徑規(guī)劃】基于遺傳算法求解帶時(shí)間窗帶容量公交車車輛路徑規(guī)劃問題(CVRPTW)matlab源碼_VRPTW_06

【路徑規(guī)劃】基于遺傳算法求解帶時(shí)間窗帶容量公交車車輛路徑規(guī)劃問題(CVRPTW)matlab源碼_VRPTW_07

2 部分代碼

%
%
clear
clc
close all
tic
%% 用importdata這個(gè)函數(shù)來讀取文件
c101=importdata('.datac101.txt');
cap=50;                                                       %車輛最大裝客量
%% 提取數(shù)據(jù)信息
E=c101(1,5);                                                   %發(fā)車中心時(shí)間窗開始時(shí)間
L=c101(1,6);                                                   %發(fā)車中心時(shí)間窗結(jié)束時(shí)間
vertexs=c101(:,2:3);                                           %所有點(diǎn)的坐標(biāo)x和y
customer=vertexs(2:end,:);                                       %站點(diǎn)坐標(biāo)
cusnum=size(customer,1);                                         %站點(diǎn)數(shù)
v_num=21;                                                       %車輛最多使用數(shù)目
demands=c101(2:end,4)./2;                                         %每個(gè)站點(diǎn)乘客量
a=c101(2:end,5);                                               %站點(diǎn)時(shí)間窗開始時(shí)間[a[i],b[i]]
b=c101(2:end,6);                                               %站點(diǎn)時(shí)間窗結(jié)束時(shí)間[a[i],b[i]]
s=c101(2:end,7);                                               %站點(diǎn)的服務(wù)時(shí)間
h=pdist(vertexs);
dist=squareform(h);                                             %距離矩陣,滿足三角關(guān)系,暫用距離表示花費(fèi)c[i][j]=dist[i][j]
alpha=10;                                                       %違反的容量約束的懲罰函數(shù)系數(shù)
belta=100;                                                     %違反時(shí)間窗約束的懲罰函數(shù)系數(shù)
MAXGEN=100;                                                     %迭代次數(shù)
%% 遺傳算法
NIND=100;                                                       %種群大小
Pc=0.9;                                                         %交叉概率
Pm=0.05;                                                       %變異概率
GGAP=0.9;                                                       %代溝(Generation gap)
N=cusnum+v_num-1;                                               %染色體長度=站點(diǎn)數(shù)目+車輛最多使用數(shù)目-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')
%%
%% 禁忌搜索設(shè)置參數(shù)
lamda=0.015;
delta=0.5;
vehicles_customer=cell(cusnum,1);                           %每輛車所經(jīng)過的站點(diǎn)
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('代數(shù)')
ylabel('最優(yōu)值')
plot(1:MAXGEN,FF_GA,'b-',1:MAXGEN,[FF_TW,FF_TW(end)],'r-')
legend('遺傳算法','禁忌搜索算法')
toc


3 仿真結(jié)果

【路徑規(guī)劃】基于遺傳算法求解帶時(shí)間窗帶容量公交車車輛路徑規(guī)劃問題(CVRPTW)matlab源碼_VRPTW_08

【路徑規(guī)劃】基于遺傳算法求解帶時(shí)間窗帶容量公交車車輛路徑規(guī)劃問題(CVRPTW)matlab源碼_VRPTW_09

4 參考文獻(xiàn)

[1]閻慶, and 邰蕾蕾. "用混合遺傳算法解決有時(shí)間窗的車輛路徑規(guī)劃問題." 安徽大學(xué)學(xué)報(bào)(自科版) 032.002(2007):41-44.

【路徑規(guī)劃】基于遺傳算法求解帶時(shí)間窗帶容量公交車車輛路徑規(guī)劃問題(CVRPTW)matlab源碼_VRPTW_10?

本文摘自 :https://blog.51cto.com/u

開通會(huì)員,享受整站包年服務(wù)立即開通 >