資源簡介
Untitled.zip

代碼片段和文件信息
clc
clear
close?all
tic
data?=?xlsread(‘數據.xlsx‘‘C3:I12‘);
JW?=?data(:1:2);
dem?=?data(:3);??????%?各網點的需求量
demand?=?rem(dem6);??%?各網點除去整車運輸的量(整車運輸是指網點需求量多于汽車裝載量時,需要在該網點多次運輸)
ntimes?=?(dem?-?demand)/6;?%?各網點整車運輸的次數
????%%?經緯度轉大地坐標,單位km
e2=0.0066943799;
N=6386942;
H=44.4;?????????????????????%?海拔
W=JW(:2)/180*pi;???????????%?維度
J=JW(:1)/180*pi;???????????%?經度
X=-(N+H)*cos(W).*cos(J)/1000;
Y=(N+H)*cos(W).*sin(J)/1000;
position=[X?Y];
%%
CityNum=9;?????%?需求節點數
CarDistance=300000;%?車最大行駛距離
CarLoad=6;??????%?車容量
speed=30;???????%?車輛行駛速度
c0=0;??????????%?發車成本
c1=3;??????????%?車輛行駛單位距離成本
CarNum=18;??????%?配送車輛總數,實際車輛可以少于該值
fitmax=10000000;%?最大懲罰
%%
NP=80;?????????%?種群個體數量
maxgen=200;
Pc=0.9;?????????%?交叉概率
Pm=0.1;?????????%?變異概率
Gap=0.9;????????%?代溝(Generation?gap)
%%
ET=data(:6);??%?最早服務時間窗
LT=data(:7);??%?最晚服務時間窗
ST=zeros(size(ET));%?服務時間
CE=[0?ones(1CityNum)]*1000;??%?早到懲罰系數
CL=[0?ones(1CityNum)]*1000;??%?晚到懲罰系數
%%?計算各城市之間的距離
distance=zeros(CityNum+1);
for?i=1:CityNum+1
????for?j=i+1:CityNum+1
????????distance(ij)=((position(i1)-position(j1))^2+(position(i2)-position(j2))^2)^0.5;
????????distance(ji)=distance(ij);
????end
end
%%?整車運輸費用
for?j?=?2:length(dem)
????mT?=?distance(1j)/speed;
????if?mT?
????????dpunish?=?(ET(j)-mT)*CE(j);
????elseif?mT?>?LT(j)
????????dpunish?=?(mT-LT(j))*CL(j);
????else
????????dpunish?=?0;
????end
????mCost(j)??=??ntimes(j)*(distance(1j)*c1*2);
end
dCost?=?sum(mCost);
%%?路徑初始化
X=initpop(NPCityNumCarNum);
Xa=X(1:);
%%?迭代
gen=1;
while?gen<=maxgen
????gen
????%?計算適應值矩陣
????[allcostfit]=fitness(distancedemandXETLTCECLSTCarDistanceCarLoadspeedfitmaxc0c1);
????%找出最優個體適應值
????allcost=allcost+dCost;
????[leastcostbestindex]=min(allcost);
????bestindex=bestindex(1);
????fpbest(gen)=leastcost;?%?最小適應值fit的集
????pbest(gen:)=X(bestindex:);%?最優個體集
????%?選擇
????XSel=Select(XfitGap);
????%?交叉操作
????XSel=Cross(XSelPc);
????%?變異
????XSel=Mutate(XSelPm);
????%?逆轉操作
????%XSel=Reverse(distancedemandXSelETLTCECLSTCarDistanceCarLoadspeedfitmaxc0c1);
????%?重插入子代的新種群
????X=Reins(XXSelfit);
????gen=gen+1;
end
%?找出最優的適應值、個體
[minfpbestminindex]=min(fpbest);%?取最優適應值的位置、最優適應值
minindex=minindex(1);
bestRoute=pbest(minindex:);?%?取最優個體
Path=bestRoute;
for?i=1:length(Path)-1
????if?Path(i)-Path(i+1)==0
????????Path(i)=0;
????end
end
ii=find(Path==0);
Path(ii)=[];
for?j=1:length(Path)?%?編碼各減1,與文中的編碼一致
????Path(j)=?Path(j)-1;
end
fpbest;??%查看適應值的變化情況
%%?迭代圖
figure
plot(fpbest)
title(‘遺傳算法優化過程‘)
xlabel(‘迭代次數‘)
ylabel(‘最優值‘)
%%?計算結果數據輸出
clc
toc
disp([‘最優成本為:‘num2str(minfpbest)]);
OutputResult(distancedemandPathETLTCECLSTCarDistanceCarLoadspeedf
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件????????4049??2019-04-26?16:24??Unti
- 上一篇:深信服 虛擬化初級_A.zip
- 下一篇:wps2019教育版
評論
共有 條評論