PSO粒子群算法解决旅行商问题的MATLAB源码.txt

上传人:b****1 文档编号:231726 上传时间:2022-10-07 格式:TXT 页数:6 大小:5.23KB
下载 相关 举报
PSO粒子群算法解决旅行商问题的MATLAB源码.txt_第1页
第1页 / 共6页
PSO粒子群算法解决旅行商问题的MATLAB源码.txt_第2页
第2页 / 共6页
PSO粒子群算法解决旅行商问题的MATLAB源码.txt_第3页
第3页 / 共6页
PSO粒子群算法解决旅行商问题的MATLAB源码.txt_第4页
第4页 / 共6页
PSO粒子群算法解决旅行商问题的MATLAB源码.txt_第5页
第5页 / 共6页
点击查看更多>>
下载资源
资源描述

PSO粒子群算法解决旅行商问题的MATLAB源码.txt

《PSO粒子群算法解决旅行商问题的MATLAB源码.txt》由会员分享,可在线阅读,更多相关《PSO粒子群算法解决旅行商问题的MATLAB源码.txt(6页珍藏版)》请在冰豆网上搜索。

PSO粒子群算法解决旅行商问题的MATLAB源码.txt

%����Ⱥ�㷨�������������

%BylReij

closeall;

clearall;

PopSize=500;%��Ⱥ��С

CityNum=14;%������

OldBestFitness=0;%�ɵ�������Ӧ��ֵ

Iteration=0;%��������

MaxIteration=2000;%����������

IsStop=0;%����ֹͣ��־

Num=0;%ȡ����ͬ��Ӧ��ֵ�ĵ�������

c1=0.5;%��֪ϵ��

c2=0.7;%���ѧϰϵ��

w=0.96-Iteration/MaxIteration;%����ϵ��,������������Ӷ��ݼ�

%�ڵ�����

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);

fori=1:

PopSize

Velocity(:

i)=round(rand(1,CityNum)'*CityNum);%roundȡ��

end

%����ÿ������֮��ľ���

CityBetweenDistance=zeros(CityNum,CityNum);

fori=1:

CityNum

forj=1:

CityNum

CityBetweenDistance(i,j)=sqrt((node(i,1)-node(j,1))^2+(node(i,2)-node(j,2))^2);

end

end

%����ÿ��·���ľ���

fori=1:

PopSize

EachPathDis(i)=PathDistance(Group(:

i)',CityBetweenDistance);

end

IndivdualBest=Group;%��¼�����ӵĸ��弫ֵ��λ��,�������ҵ������·��

IndivdualBestFitness=EachPathDis;%��¼�����Ӧ��ֵ,�������ҵ������·���ij���

[GlobalBestFitness,index]=min(EachPathDis);%�ҳ�ȫ������ֵ����Ӧ���

%��ʼ�����

figure;

subplot(2,2,1);

PathPlot(node,CityNum,index,IndivdualBest);

title('�����');

%Ѱ��

while(IsStop==0)&(Iteration

%������������

Iteration=Iteration+1;

%����ȫ�ּ�ֵ��λ��,����ָ·��

fori=1:

PopSize

GlobalBest(:

i)=Group(:

index);

end

%��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(:

i)',CityBetweenDistance);

end

IsChange=EachPathDis

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;

end

BestFitness(Iteration)=GlobalBestFitness;%ÿһ����������Ӧ��

end

%���Ž�

subplot(2,2,2);

PathPlot(node,CityNum,index,IndivdualBest);

title('�Ż���');

%��������

subplot(2,2,3);

plot((1:

Iteration),BestFitness(1:

Iteration));

gridon;

title('��������');

%��С·��ֵ

GlobalBestFitness

functionGroup=Arrange(Group)

[xy]=size(Group);

[NO1,index]=min(Group',[],2);%�ҵ���Сֵ1

fori=1:

y

pop=Group(:

i);

temp1=pop([1:

index(i)-1]);

temp2=pop([index(i):

x]);

Group(:

i)=[temp2'temp1']';

end

functionChangeNums=GenerateChangeNums(Group,BestVar);

[xy]=size(Group);

ChangeNums=zeros(x,y);

fori=1:

y

pop=BestVar(:

i);%��BestVarȡ��һ��˳��

pop1=Group(:

i);%������Ⱥ��ȡ����Ӧ��˳��

forj=1:

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

end

end

functionHold=HoldByOdds(Hold,Odds)

[x,y]=size(Hold);

fori=1:

x

forj=1:

y

ifrand>Odds

Hold(i,j)=0;

end

end

end

functionSumDistance=PathDistance(path,CityBetweenDistance)

L=length(path);%pathΪһ��ѭ���Ľڵ�˳��

SumDistance=0;

fori=1:

L-1

SumDistance=SumDistance+CityBetweenDistance(path(i),path(i+1));

end

SumDistance=SumDistance+CityBetweenDistance(path

(1),path(L));%������β�ڵ�ľ���

functionGroup=PathExchange(Group,Index)

[xy]=size(Group);

fori=1:

y

a=Index(:

i);%ȡ������һ�齻����

pop=Group(:

i);%ȡ����Ӧ������

forj=1:

x%ȡ������һ����������������

ifa(j)~=0

pop1=pop(j);

pop(j)=pop(a(j));

pop(a(j))=pop1;

end

end

Group(:

i)=pop;

end

functionPathPlot(node,CityNum,index,EachBest);

fori=1:

CityNum

NowBest(i,:

)=node((EachBest(i,index)),:

);

end

NowBest(CityNum+1,:

)=NowBest(1,:

);

plot(node(:

1),node(:

2),'*');

line(NowBest(:

1),NowBest(:

2));

gridon;

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 经管营销 > 企业管理

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1