PSO粒子群算法解决旅行商问题的MATLAB源码.txt资料文档下载
- 文档编号:13162111
- 上传时间:2022-10-07
- 格式:TXT
- 页数:6
- 大小:5.23KB
PSO粒子群算法解决旅行商问题的MATLAB源码.txt资料文档下载
《PSO粒子群算法解决旅行商问题的MATLAB源码.txt资料文档下载》由会员分享,可在线阅读,更多相关《PSO粒子群算法解决旅行商问题的MATLAB源码.txt资料文档下载(6页珍藏版)》请在冰豆网上搜索。
%����ϵ��,������������Ӷ��ݼ�
%�ڵ�����
node=[16.4796.10;
16.4794.44;
20.0992.54;
22.3993.37;
25.2397.24;
...
22.0096.05;
20.4797.02;
17.2096.29;
16.3097.38;
14.0598.12;
16.5397.38;
21.5295.59;
19.4197.13;
20.0994.55];
%��ʼ�������ӣ�������·
����Ⱥ
Group=ones(CityNum,PopSize);
fori=1:
PopSize
Group(:
i)=randperm(CityNum)'
;
end
Group=Arrange(Group);
%��ʼ�������ٶȣ���������
Velocity=zeros(CityNum,PopSize);
Velocity(:
i)=round(rand(1,CityNum)'
*CityNum);
%roundȡ��
%����ÿ
������֮��ľ���
CityBetweenDistance=zeros(CityNum,CityNum);
CityNum
forj=1:
CityBetweenDistance(i,j)=sqrt((node(i,1)-node(j,1))^2+(node(i,2)-node(j,2))^2);
end
��·
���ľ���
PopSize
EachPathDis(i)=PathDistance(Group(:
i)'
CityBetweenDistance);
IndivdualBest=Group;
%��¼
�����ӵĸ��弫ֵ��λ��,�������ҵ������·
��
IndivdualBestFitness=EachPathDis;
�����Ӧ��ֵ,�������ҵ������·
���ij���
[GlobalBestFitness,index]=min(EachPathDis);
%�ҳ�ȫ������ֵ����Ӧ���
%��ʼ�����
figure;
subplot(2,2,1);
PathPlot(node,CityNum,index,IndivdualBest);
title('
�����'
);
%Ѱ��
while(IsStop==0)&
(Iteration<
MaxIteration)
%������������
Iteration=Iteration+1;
%����ȫ�ּ�ֵ��λ��,����ָ·
fori=1:
GlobalBest(:
i)=Group(:
index);
%��pij-xij,pgj-xij�����
��Ը���c1��c2�ı��������
pij_xij=GenerateChangeNums(Group,IndivdualBest);
pij_xij=HoldByOdds(pij_xij,c1);
pgj_xij=GenerateChangeNums(Group,GlobalBest);
pgj_xij=HoldByOdds(pgj_xij,c2);
%�Ը���w������һ��������
Velocity=HoldByOdds(Velocity,w);
Group=PathExchange(Group,Velocity);
%���ݽ��������·
������
Group=PathExchange(Group,pij_xij);
Group=PathExchange(Group,pgj_xij);
fori=1:
PopSize%���¸
�·
���ܾ���
EachPathDis(i)=PathDistance(Group(:
IsChange=EachPathDis<
IndivdualBestFitness;
%���º
�ľ������ڸ���ǰ�ģ���¼
���
IndivdualBest(:
find(IsChange))=Group(:
find(IsChange));
%���¸
������·
IndivdualBestFitness=IndivdualBestFitness.*(~IsChange)+EachPathDis.*IsChange;
[GlobalBestFitness,index]=min(EachPathDis);
%����ȫ�����·
��,��¼
��Ӧ�����
ifGlobalBestFitness==OldBestFitness%�Ƚϸ���ǰ���º
����Ӧ��ֵ;
Num=Num+1;
%���ʱ��¼
��һ;
else
OldBestFitness=GlobalBestFitness;
%�����ʱ������Ӧ��ֵ������¼
����;
Num=0;
end
ifNum>
=20%��ε�������Ӧ��ֵ���ʱ����ֹͣ
IsStop=1;
BestFitness(Iteration)=GlobalBestFitness;
%ÿ
һ����������Ӧ��
%���Ž�
subplot(2,2,2);
�Ż���'
subplot(2,2,3);
plot((1:
Iteration),BestFitness(1:
Iteration));
gridon;
��������'
%��ѷ
��ֵ
GlobalBestFitness
functionGroup=Arrange(Group)
[xy]=size(Group);
[NO1,index]=min(Group'
[],2);
%�ҵ���Сֵ1
y
pop=Group(:
i);
temp1=pop([1:
index(i)-1]);
temp2=pop([index(i):
x]);
Group(:
i)=[temp2'
temp1'
]'
functionChangeNums=GenerateChangeNums(Group,BestVar);
[xy]=size(Group);
ChangeNums=zeros(x,y);
pop=BestVar(:
%��BestVarȡ��һ��˳��
pop1=Group(:
%������Ⱥ��ȡ����Ӧ��˳��
x%��BestVar��˳����ȡ��һ�����
NoFromBestVar=pop(j);
fork=1:
x%�Ӷ�Ӧ������˳����ȡ��һ�����
NoFromGroup=pop1(k);
if(NoFromBestVar==NoFromGroup)&
&
(j~=k)%�����ͬ�Ҳ���ͬһλ��
ChangeNums(j,i)=k;
%������
pop1(k)=pop1(j);
pop1(j)=NoFromGroup;
end
end
functionHold=HoldByOdds(Hold,Odds)
[x,y]=size(Hold);
x
ifrand>
Odds
Hold(i,j)=0;
end
functionSumDistance=PathDistance(path,CityBetweenDistance)
L=length(path);
%pathΪһ��ѭ���Ľڵ�˳��
SumDistance=0;
L-1
SumDistance=SumDistance+CityBetweenDistance(path(i),path(i+1));
SumDistance=SumDistance+CityBetweenDistance(path
(1),path(L));
%������β�ڵ�ľ���
functionGroup=PathExchange(Group,Index)
a=Index(:
%ȡ������һ�齻����
pop=Group(:
%ȡ����Ӧ������
forj=1:
x%ȡ������һ����������������
ifa(j)~=0
pop1=pop(j);
pop(j)=pop(a(j));
pop(a(j))=pop1;
Group(:
i)=pop;
functionPathPlot(node,CityNum,index,EachBest);
NowBest(i,:
)=node((EachBest(i,index)),:
NowBest(CityNum+1,:
)=NowBest(1,:
plot(node(:
1),node(:
2),'
*'
line(NowBest(:
1),NowBest(:
2));
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- PSO 粒子 算法 解决 旅行 问题 MATLAB 源码