matlab粒子群算法物流路径优化,粒子群算法和蚁群算法优化路径问题MATLAB程序源代码...

粒子群算法和蚁群算法优化路径问题程序源代码---以旅行商问题(TSP)为例

代码用MATLAB编写,两种算法分开编写,读者可以混合编写!

一、

%% 该文件演示基于TSP-PSO(粒子群)算法

clc;clear

%% 下载数据

data=load('pr76.txt');

cityCoor=[data(:,2) data(:,3)];%城市坐标矩阵

figure

plot(cityCoor(:,1),cityCoor(:,2),'ms','LineWidth',2,'MarkerEdgeColor','k','MarkerFaceColor','g')

legend('城市位置')

title('城市分布图','fontsize',12)

xlabel('km','fontsize',12)

ylabel('km','fontsize',12)

%ylim([min(cityCoor(:,2))-1 max(cityCoor(:,2))+1])

grid on

%% 计算城市间距离

n=size(cityCoor,1); %城市数目

cityDist=zeros(n,n); %城市距离矩阵

for i=1:n

for j=1:n

if i~=j

cityDist(i,j)=((cityCoor(i,1)-cityCoor(j,1))^2+...

(cityCoor(i,2)-cityCoor(j,2))^2)^0.5;

end

cityDist(j,i)=cityDist(i,j);

end

end

nMax=200; %进化次数

indiNumber=1000; %个体数目

individual=zeros(indiNumber,n);

%^初始化粒子位置

for i=1:indiNumber

individual(i,:)=randperm(n);

end

%% 计算种群适应度

indiFit=fitness(individual,cityCoor,cityDist);

[value,index]=min(indiFit);

tourPbest=individual; %当前个体最优

tourGbest=individual(index,:) ; %当前全局最优

recordPbest=inf*ones(1,indiNumber); %个体最优记录

recordGbest=indiFit(index); %群体最优记录

xnew1=individual;

%% 循环寻找最优路径

L_best=zeros(1,nMax);

for N=1:nMax

N

%计算适应度值

indiFit=fitness(individual,cityCoor,cityDist);

%更新当前最优和历史最优

for i=1:indiNumber

if indiFit(i)

recordPbest(i)=indiFit(i);

tourPbest(i,:)=individual(i,:);

end

if indiFit(i)

recordGbest=indiFit(i);

tourGbest=individual(i,:);

end

end

[value,index]=min(recordPbest);

recordGbest(N)=recordPbest(index);

%% 交叉操作

for i=1:indiNumber

% 与个体最优进行交叉

c1=unidrnd(n-1); %产生交叉位

c2=unidrnd(n-1); %产生交叉位

while c1==c2

c1=round(rand*(n-2))+1;

c2=round(rand*(n-2))+1;

end

chb1=min(c1,c2);

chb2=max(c1,c2);

cros=tourPbest(i,chb1:chb2);

ncros=size(cros,2);

%删除与交叉区域相同元素

for j=1:ncros

for k=1:n

if xnew1(i,k)==cros(j)

xnew1(i,k)=0;

for t=1:n-k

temp=xnew1(i,k+t-1);

xnew1(i,k+t-1)=xnew1(i,k+t);

xnew1(i,k+t)=temp;

end

end

end

end

%插入交叉区域

xnew1(i,n-ncros+1:n)=cros;

%新路径长度变短则接受

dist=0;

for j=1:n-1

dist=dist+cityDist(xnew1(i,j),xnew1(i,j+1));

end

dist=dist+cityDist(xnew1(i,1),xnew1(i,n));

if indiFit(i)>dist

individual(i,:)=xnew1(i,:);

en

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值