資源簡介
無時間窗vrp車場多車型車輛路徑問題的改進遺傳算法,車輛路徑問題(Vehicle routing problem,VRP)由Dantzing和Ramser于1959年首次提出,它是指對一系列發貨點(或收貨點),組織適...

代碼片段和文件信息
function?VRP
tic
clc
clear
consudata?=xlsread(‘data.xlsx‘‘sheet2‘‘A3:G13‘);%讀入客戶信息
popsize=80;%種群規模
pc=0.85;%交叉概率
pm=0.015;%變異概率
elite_sp=0.1;%精英保留概率
N=1000;%迭代次數
Q=1.9;%車輛的載重量
p1=8;%單位距離成本
p2=0.65;%單位車輛成本
alpha=1;%距離成本權重系數
beta=1;%車輛成本權重系數
[arry_xarry_y]=size(consudata);
chromlength=arry_x-1;%客戶數量,即為染色體長度??
%通過系數為三維矩陣,行和列表示客戶號,高k表示把時間分為k段
for?i=1:arry_x
????for?j=i:arry_x
????????Distance(ij)=sqrt((consudata(i2)-consudata(j2))^2+(consudata(i3)-consudata(j3))^2);
????????Distance(ji)=Distance(ij);
????end
end
%隨機產生初始種群
pop=initpop(popsizechromlength);
for?n=1:N?%開始循環?
????%計算目標函數值
????[arry_xarry_y]=size(pop);
????for?i=1:arry_x
????????unit=pop(i:);
????????[rout]=decode(unitconsudataQ);%解碼
????????discost_value=count_discost(routDistancep1);%計算距離成本
????????vehcost_value=count_vehcost(routp2);%計算車輛成本
????????objvalue(i)=sum(alpha*discost_value+beta*vehcost_value);%按照權重計算總成本
????end
????%計算個體的適應值
????fitvalue=calfitvalue(objvalue);
????%輪盤賭選擇,得到新的種群
????oppop=selection(popfitvalueelite_sp);
????%交叉算子,得到新種群
????cropop=crossover(oppoppc);
????%變異算子,得到新種群
????m_newpop=mutation(cropoppm);
????%求出種群中最大適應值及個體
????[bestindividualbestfit]=best(popfitvalue);
????%存儲進化代數,繪制結果圖
????generation(n)=n;
????%沒代最優適應值轉化為目標函數值
????final_objvalue(n)=10000./bestfit;
????%存儲每帶最優個體
????final_individual(n:)=bestindividual;
????%經過遺傳操作后的種群替代上一個種群
????pop=m_newpop;
end%循環結束
[output_objvaluefinal_line]=min(final_objvalue);
output_gengration=final_line%輸出獲得最優解的代數
output_objvalue%輸出最優值
[output_rout]=decode(final_individual(final_line:)consudataQ);
output_rout%輸出最優路線
[arry_xarry_y]=size(output_rout);
for?i=1:arry_y-1
????distance1(:i)=diag(Distance(output_rout(:i)+1output_rout(:i+1)+1?));
end
output_distance=sum(sum(distance12))%輸出最優路線的車輛行駛距離
plot(generationfinal_objvalue‘B-‘)
%title(‘進化代數與目標函數值關系圖‘)
xlabel(‘進化代數‘)
ylabel(‘目標函數值‘)
figure
%提取最優路線的縱橫坐標并繪制路線圖
[arry_xarry_y]=size(output_rout);
output_rout=reshape(output_rout‘1arry_x*arry_y);
rout_x=consudata(output_rout(1:)+12);
rout_y=consudata(output_rout(1:)+13);
plot(rout_xrout_y‘b-o‘)
for?i=1:11
????text(consudata(i2)+10consudata(i3)+1num2str(i-1));
????%set(gca‘Fontsize‘15)
title(‘配送路線圖‘)
xlabel(‘客戶X軸坐標‘)
ylabel(‘客戶Y軸坐標‘)
end
toc
end
%種群初始化
function?pop=initpop(popsizechromlength)
pop=zeros(popsizechromlength);
for?i=1:popsize
????pop(i:)=randperm(chromlength);
end
end
%按照距離及時間窗解碼
function?[routt_arrival]=decode(unitconsudataQ)
global?time;
[arry_xarry_yarry_z]=size(time);
[arry_xarry_y]=size(unit);
load=consudata(unit(1)+14);
time1=0;
i=2;
j=1;
k=2;
rout(11)=unit(1);
while?i<=arry_y
????load=load+consudata(unit(i)+14);
????%檢查載量和時間窗約束
????if?load????????rout(jk)=unit(i);
????else
????????k=1;
????????j=j+1;
????????rout(jk)=unit(i);
????????load=consudata(unit(i)+14);
????end
????k=k+1;
????i=i+1;
end
[arry_xarry_y]=size(rout);
rout
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件???????5938??2018-04-24?20:40??vrp.m
?????文件??????13792??2018-04-24?20:22??data2.xlsx
-----------?---------??----------?-----??----
????????????????19730????????????????????2
- 上一篇:SCI論文北大PPt
- 下一篇:門禁系統源代碼
評論
共有 條評論