1.Pso算法
function [xm,fv] = SAPSO( fitness,N,c1,c2,wmax,wmin,M )
% fitness 适应度函数
% N 种群个数
% c1
% c2
% wmax 最大权重
% wmin 最小权重
% M 迭代次数
cg=32;%传感器个数
format long;
%-----------------------初始化种群个体-------------------------------------
for i=1:N %粒子个数为n
a1=-17.5:10:12.5;
a11=a1*(i+5)/10;
[a2,a3]=meshgrid(a1,a11);
a4=reshape(a2,1,16);
a5=reshape(a3,1,16);
b1=-12.5:10:17.5;
b11=b1*(i+5)/10;
[b2,b3]=meshgrid(b1,b11);
b4=reshape(b2,1,16);
b5=reshape(b3,1,16);
x11=[a4,b4;a5,b5]+20;%Ó¦ÓõȱÈÀýÀ©É¢y¹Ì¶¨
x(:,:,i)=x11';%初始化传感器个数为20
v(:,:,i)=10*rand(cg,2);
end
%----------------------计算各个粒子适应度------------------------------
for i=1:N;
p(i)=fitness(x(:,:,i));
y(:,:,i)=x(:,:,i);
end
pg=x(:,:,N); %pg为全局最优
for i=1:(N-1)
if fitness(x(:,:,i))<fitness(pg)
pg=x(:,:,i);
end
end
%------------------主循环函数Ñ-»·---------------------------------------for t=1:M
for j=1:N
fv(j)=fitness(x(:,:,j));
end
fvag=sum(fv)/N;
fmin=min(fv);
for i=1:N
if fv(i)<=fvag %ÏßÐÔ¼ÓȨ
w=wmin+(fv(i)-fmin)*(wmax-wmin)/(fvag-fmin);%线性加权¨else
w=wmax;
end
v(:,:,i)=w*v(:,:,i)+c1*rand*(y(:,:,i)-x(:,:,i))+c2*rand*(pg-
x(:,:,i));
x(:,:,i)=x(:,:,i)+v(:,:,i);
if fitness(x(:,:,i))<p(i)
p(i)=fitness(x(:,:,i));
y(:,:,i)=x(:,:,i);
end
if p(i)<fitness(pg)
pg=y(:,:,i);
end
end
Pbest(t)=fitness(pg);
end
pbest1=1-Pbest;
r=[1:1:M];
plot(r,pbest1,'r--');
xlabel('迭代次数')
ylabel('适应度值')
title('¸改进pso算法收敛曲线')
legend('权重自适应pso算法·¨')
hold on
xm=pg';
fv=1-fitness(pg);
end
2.目标函数
function F = fitness(x )
%求目标函数文件
a1 = 10;
a2 = 5;
b1 = 6;
b2 = 3;
c = sqrt(a1^2-b1^2)/2;
q=1;
cg=32; %´传感器个数
%--------------------------------------------------------------------------
for xx=0:40; %³¤¿í·Ö±ðÊÇ40*40 ²âÊÔµãÊÇ40*40
for xy=0:40;
for k = 1:cg
m = x(k,1)-xx; %²âÊԵ㵽´«¸ÐÆ÷µÄ¾àÀ룬ÿ1¸öµ¥Î»Ò»¸ö²âÊÔµã
n = x(k,2)-xy;
cmn=c*sqrt((m/a1)^2+(n/b1)^2);
D = sqrt((m-c/2)^2+n^2)+sqrt((m+c/2)^2+n^2);
if D < 2*a2
p(k)=1;
else
D = sqrt((m-cmn)^2+n^2)+sqrt((m+cmn)^2+n^2);
if D<2*a1
p(k)=((2*a1-D)/(2*a1-2*a2))^2;
else
p(k)=0;
end
end
q=q*(1-p(k));
end
xxx=ceil(xx+1);
xyy=ceil(xy+1);
pxy(xxx,xyy)=1-q;
q=1;
end
end
F=1-mean(pxy(:));
end
3.主函数
clc;
clear;
[xm,fv]= SAPSO( @fitness,10,2,2,0.9,0.6,200)
x=xm'
figure(3)
plot(x(:,2),x(:,1),'ok')
zz=try2(x);%显示三维图
x1=0:40;
y1=0:40;
surf(x1,y1,zz)
shading flat
10
15
20
25
30
35
40
0510152025303540。