1.完整项目描述和程序获取
>面包多安全交易平台:https://mbd.pub/o/bread/ZJqUmJds
>如果链接失效,可以直接打开本站店铺搜索相关店铺:
>如果链接失效,程序调试报错或者项目合作也可以加微信或者QQ联系。
2.部分仿真图预览
3.算法概述
红外传感器在室内环境监测、安防、智能控制等领域中得到了广泛应用。在室内部署红外传感器时,其位置的选择对于传感器的性能和信号质量有着至关重要的影响。因此,如何确定红外传感器的最佳部署位置成为了一个热门的研究课题。本文将介绍一种基于虚拟力优化算法的二维室内红外传感器部署策略,并重点介绍虚拟力算法在该策略中的应用。
4.部分源码
...........................................................................
%下面这个for是优化适应度值的初始化计算
for i=1:Num
XYZ1=[x(i,1:(dim-2)/2);x(i,1+(dim-2)/2:(dim-2))];
NUM1 = 10;
NUM2 = 10;
[p(i),X1,Y1,f1,f2] = func_obj1(XYZ1,NUM1,NUM2);
y(i,:)= x(i,:);
end
%全局最优
pg = x(1,:);
%下面这个for是优化适应度值的初始化计算
for i=2:Num
XYZ1=[x(i,1:(dim-2)/2);x(i,1+(dim-2)/2:dim-2)];
NUM1 = 10;
NUM2 = 10;
[pa(i),X1,Y1,f1,f2] = func_obj1(XYZ1,NUM1,NUM2);
[pb(i),X1,Y1,f1,f2] = func_obj1(XYZ1,NUM1,NUM2);
if pa(i) < pb(i)
pg=x(i,:);
end
end
for t=1:MAXGEN%开始优化
t
for i=1:Num
Fx(i,:) = w*Fx(i,:)+rand*(pg(1:(dim-2)/2) -x(i,1:(dim-2)/2));%水平力
Fy(i,:) = w*Fy(i,:)+rand*(pg(1+(dim-2)/2:(dim-2))-x(i,1+(dim-2)/2:(dim-2)));%垂直力
Fxy = sqrt(Fx(i,:).^2+Fy(i,:).^2);
Fxn(i,:) = w*Fxn(i,:)+rand*(pg(dim-1)-x(i,dim-1));%水平力
Fyn(i,:) = w*Fyn(i,:)+rand*(pg(dim) -x(i,dim));%垂直力
Fxyn = sqrt(Fxn(i,:).^2+Fyn(i,:).^2);
%更新变量
x(i,1:(dim-2)/2) = x(i,1:(dim-2)/2)+Fx(i,:)./Fxy*max_sensor;
x(i,1+(dim-2)/2:(dim-2)) = x(i,1+(dim-2)/2:(dim-2))+Fy(i,:)./Fxy*max_sensor;
x(i,dim-1) = x(i,dim-1)+Fxn(i,:)./Fxyn*max_sensor;
x(i,dim) = x(i,dim) +Fyn(i,:)./Fxyn*max_sensor;
XYZ1=[x(i,1:(dim-2)/2);x(i,1+(dim-2)/2:(dim-2))];
NUM1 = floor(x(i,dim-1));
NUM2 = floor(x(i,dim));
if NUM1>=N1
NUM1=N1;
end
if NUM2>=N2
NUM2=N2;
end
%适应度值的计算
[pa(i),X1,Y1,f1,f2,NX1,NX2] = func_obj1(XYZ1,NUM1,NUM2);
if pa(i)<p(i)
p(i) = pa(i);
y(i,:)= x(i,:);
end
XYZ1=[pg(1:(dim-2)/2);pg(1+(dim-2)/2:(dim-2))];
NUM1 = floor(x(i,dim-1));
NUM2 = floor(x(i,dim));
if NUM1>=N1
NUM1=N1;
end
if NUM2>=N2
NUM2=N2;
end
%适应度值的计算
[pb(i),X1,Y1,f1,f2,NX1,NX2] = func_obj1(XYZ1,NUM1,NUM2);
if p(i)<pb(i)
pg=y(i,:);
end
end
XYZ1=[pg(1:(dim-2)/2);pg(1+(dim-2)/2:(dim-2))];
NUM1 = floor(x(i,dim-1));
NUM2 = floor(x(i,dim));
if NUM1>=N1%变量的约束
NUM1=N1;
end
if NUM2>=N2%变量的约束
NUM2=N2;
end
[pc,X1,Y1,f1,f2,NX1,NX2] = func_obj1(XYZ1,NUM1,NUM2);%适应度值的计算
Pbest(t) = pc;
end
figure;
plot(1:10:MAXGEN,1-Pbest(1:10:end),'-r>',...
'LineWidth',1,...
'MarkerSize',6,...
'MarkerEdgeColor','k',...
'MarkerFaceColor',[0.9,0.9,0.0]);
grid on
xlabel('迭代次数');
ylabel('虚拟力算法优化过程');
legend('Average fitness');
%覆盖率
disp('覆盖率');
f1
%安装难易度
disp('安装难易度');
f2
[X1,Y1,NUM1_new,NUM2_new]=func_delete([X1;Y1],NX1,NX2);
%最优传感器数量
disp('最优传感器数量');
Nopt1 = NUM1_new
Nopt2 = NUM2_new
figure;
%显示障碍物
for i = 1:Nr1
plotcube([L(i) W(i) 0],[X3(i),Y3(i),0],1,[0.8 0.9 0]);
hold on
end
for i = 1:Nr2
[x,y]=circle(R4(i),X4(i),Y4(i));
plot(x,y,'g','linewidth',2);
hold on
end
for i = 1:length(X1)
if i<=Nopt1
[x,y]=circle(Rad1,X1(i),Y1(i));
plot(x,y,'r','linewidth',1);
else
%第一、传感器不用球或者圆替代,进行和原来一样的显示
rectangle('Position', [X1(i)-Rad2,Y1(i)-Rad2,2*Rad2,2*Rad2], 'LineWidth', 1, 'EdgeColor', 'b', 'Clipping', 'off')
end
hold on
plot(X1(i),Y1(i),'r.');
end
view([0,90]);
axis equal
axis([0,SCALE,0,SCALE]);
09_057_m