資源簡介
粒子群算法用于解決離散問題,主程序是離散粒子群算法解決旅行商問題
代碼片段和文件信息
%初始化
clear;
Alpha=1;?%信息素重要程度的參數
Beta=5;?%啟發(fā)式因子重要程度的參數?
Rho=0.95;?%信息素蒸發(fā)系數
NC_max=200;?%最大迭代次數
Q=100;?%信息素增加強度系數
CityNum=30;??%問題的規(guī)模(城市個數)
[dislistClist]=tsp(CityNum);
m=CityNum;?%螞蟻個數
Eta=1./dislist;%Eta為啟發(fā)因子,這里設為距離的倒數
Tau=ones(CityNumCityNum);%Tau為信息素矩陣
Tabu=zeros(mCityNum);%存儲并記錄路徑的生成
NC=1;%迭代計數器
R_best=zeros(NC_maxCityNum);?%各代最佳路線
L_best=inf.*ones(NC_max1);%各代最佳路線的長度
L_ave=zeros(NC_max1);%各代路線的平均長度
figure(1);
while?NC<=NC_max?%停止條件之一:達到最大迭代次數
????%將m只螞蟻放到CityNum個城市上
????Randpos=[];
????for?i=1:(ceil(m/CityNum))
????????Randpos=[Randposrandperm(CityNum)];
????end
????Tabu(:1)=(Randpos(11:m))‘;
????
????%m只螞蟻按概率函數選擇下一座城市,完成各自的周游
????for?j=2:CityNum
????????for?i=1:m
????????????visited=Tabu(i1:(j-1));?%已訪問的城市
????????????J=zeros(1(CityNum-j+1));%待訪問的城市
????????????P=J;%待訪問城市的選擇概率分布
????????????Jc=1;
????????????for?k=1:CityNum
????????????????if?length(find(visited==k))==0
????????????????????J(Jc)=k;
????????????????????Jc=Jc+1;
????????????????end
????????????end
????????????%計算待選城市的概率分布
????????????for?k=1:length(J)
????????????????P(k)=(Tau(visited(end)J(k))^Alpha)*(Eta(visited(end)J(k))^Beta);
????????????end
????????????P=P/(sum(P));
????????????%按概率原則選取下一個城市
????????????Pcum=cumsum(P);
????????????Select=find(Pcum>=rand);
????????????to_visit=J(Select(1));
????????????Tabu(ij)=to_visit;
????????end
????end
????if?NC>=2
????????Tabu(1:)=R_best(NC-1:);
????end
????%記錄本次迭代最佳路線
????L=zeros(m1);
????for?i=1:m
????????R=Tabu(i:);
????????L(i)=CalDist(dislistR);
????end
????L_best(NC)=min(L);
????pos=find(L==L_best(NC));
????R_best(NC:)=Tabu(pos(1):);
????L_ave(NC)=mean(L);
????drawTSP(ClistR_best(NC:)L_best(NC)NC0);
????NC=NC+1;
????%更新信息素
????Delta_Tau=zeros(CityNumCityNum);
????for?i=1:m
????????for?j=1:(CityNum-1)
????????????Delta_Tau(Tabu(ij)Tabu(ij+1))=Delta_Tau(Tabu(ij)Tabu(ij+1))+Q/L(i);
????????end
????????Delta_Tau(Tabu(iCityNum)Tabu(i1))=Delta_Tau(Tabu(iCityNum)Tabu(i1))+Q/L(i);
????end
????Tau=(1-Rho).*Tau+Delta_Tau;
????Tabu=zeros(mCityNum);?%禁忌表清零
????%pause;
????tauji(NC)=Tau(12);
end
%輸出結果
Pos=find(L_best==min(L_best));
Shortest_Route=R_best(Pos(1):);
Shortest_Length=L_best(Pos(1));
figure(2);
plot([L_best?L_ave]);
legend(‘最短距離‘‘平均距離‘);
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件?????????169??2013-09-13?16:12??CalDist.m
?????文件????????2577??2013-09-13?16:12??ant_colony_system.m
?????文件?????????162??2013-09-13?16:12??changeFun.m
?????文件?????????169??2013-09-13?16:12??changeNum.asv
?????文件?????????169??2013-09-13?16:12??changeNum.m
?????文件?????????610??2013-09-13?16:12??drawTSP.m
?????文件?????????636??2013-09-13?16:12??drawTSP10.m
?????文件????????3435??2013-09-13?16:12??genetic_algorithm.m
?????文件????????2018??2013-09-13?16:12??hopfield_neuro_network.m
?????文件????????2229??2013-09-22?21:24??particle_swarm_optimization.asv
?????文件????????2229??2013-09-22?21:26??particle_swarm_optimization.m
?????文件????????1716??2013-09-13?16:12??particle_swarm_optimization1.m
?????文件????????1742??2013-09-13?16:12??simulated_annealing.m
?????文件????????2626??2013-09-13?16:12??tabu_search.m
?????文件????????2134??2013-09-13?16:12??tsp.m
評論
共有 條評論