1.完整项目描述和程序获取
>面包多安全交易平台:https://mbd.pub/o/bread/ZJqUmJhq
>如果链接失效,可以直接打开本站店铺搜索相关店铺:
>如果链接失效,程序调试报错或者项目合作也可以加微信或者QQ联系。
2.部分仿真图预览
3.算法概述
红外传感器是一种广泛应用于室内环境监测、安防、智能控制等领域的传感器。在实际应用中,红外传感器的位置选择对于传感器的性能和信号质量有着至关重要的影响。因此,如何确定红外传感器的最佳部署位置成为了一个热门的研究课题。
传统的红外传感器部署方法主要是基于经验和试错的方式进行的。这种方法存在着许多问题,如需要大量的时间和人力成本、无法保证部署的最优性、无法考虑到不同环境、不同传感器的影响等。因此,如何利用现代优化算法对红外传感器的部署位置进行优化是当前研究的热点之一。
4.部分源码
..........................................................................
%优化变量得到的三维坐标值
X1 = XYZ1(1,:);
Y1 = XYZ1(2,:);
Z1 = XYZ1(3,:);
%避开障碍物
Idx1 = [];
for i=1:Nr1
for j = 1:length(X1)
%判断传感器的坐标点区域和传感器是否有交集,有交集那么说明碰到障碍物了,则去除这些错误的部署点
if abs(X1(j)-(X3(i)+L(i)/2))<=L(i)/2 & abs(Y1(j)-(Y3(i)+W(i)/2))<=W(i)/2 & abs(Z1(j)-(Z3(i)+H(i)/2))<=H(i)/2
Idx1 = [Idx1,j];
end
end
end
idx2 = unique(Idx1);
X1(idx2) = [];
Y1(idx2) = [];
Z1(idx2) = [];
NUM1_new = NUM1-length(find(idx2<=NUM1));
NUM2_new = length(X1)-NUM1_new;
Idx1 = [];
for i=1:Nr2
for j = 1:length(X1)
%判断传感器的坐标点区域和传感器是否有交集,有交集那么说明碰到障碍物了,则去除这些错误的部署点
if ((X1(j) - X4(i))^2 + (Y1(j) - Y4(i))^2 + (Z1(j) - Z4(i))^2) <= R4(i)^2
Idx1 = [Idx1,j];
end
end
end
idx2 = unique(Idx1);
X1(idx2) = [];
Y1(idx2) = [];
Z1(idx2) = [];
NUM1_new = NUM1-length(find(idx2<=NUM1));
NUM2_new = length(X1)-NUM1_new;
%上面两个步骤,去掉了和障碍物有重叠的部署位置
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%第一个,覆盖率
Sar=0;
for i = 1:SCALE
for j = 1:SCALE
for kk = 1:SCALE
Nums = 0;
for k = 1:(NUM1_new+NUM2_new)
if k<=NUM1_new%类似半个无顶的球体覆盖率计算,那么Z轴的取值范围,这里只考虑90旋转或者180旋转,任意角度情况不考虑,否则非常复杂
if ((X1(k) - i)^2 + (Y1(k) - j)^2 + (Z1(k) - kk)^2) < Rad1^2 & (abs(Z1(k)-kk)<=Rad1*sin(Dgree))%30度的弧形
Nums=Nums+1;
end
end
if k>NUM1_new & k<=(NUM1_new+NUM2_new)%正方形覆盖率计算
if abs(X1(k) - i)<=Rad2 & abs(Y1(k) - j)<=Rad2 & abs(Z1(k) - kk)<=Rad2
Nums=Nums+1;
end
end
end
if Nums > 0
Sar=Sar+1;
end
end
end
end
fobj1 = 1-Sar/SCALE/SCALE/SCALE;%整体减去被覆盖到的点,就是非覆盖率,因为优化算法是往最小值找的,所以需要减去覆盖率,得到非覆盖率,越小越好
%第二个安装难度,这里做一个定义,和障碍物越近,那么难度越大因为涉及到信号的传输和障碍物的避让问题
fobj2_= [];
for i=1:(NUM1_new+NUM2_new)
if i<=NUM1_new
d1=[];
d2=[];
for j=1:Nr1
tmps = sqrt((X1(i) - X3(j))^2 + (Y1(i) - Y3(j))^2)+ (Z1(i) - Z3(j))^2; %计算距离
if tmps < Rad1%满足条件的则保持到d1数据库
d1=[d1,1/(tmps+1)];
end
end
for j=1:Nr2
tmps = sqrt((X1(i) - X4(j))^2 + (Y1(i) - Y4(j))^2 + (Z1(i) - Z4(j))^2); %计算距离
if tmps < Rad1%满足条件的则保持到d2数据库
d2=[d2,1/(tmps+1)];
end
end
if isempty([d1,d2])==1
fobj2_(i)=0;
else
fobj2_(i)=mean([d1,d2]);
end
end
if i>NUM1_new
d1=[];
d2=[];
for j=1:Nr1
tmps = sqrt((X1(i) - X3(j))^2 + (Y1(i) - Y3(j))^2 + (Z1(i) - Z3(j))^2); %计算距离
if tmps < Rad2%满足条件的则保持到d1数据库
d1=[d1,1/(tmps+1)];
end
end
for j=1:Nr2
tmps = sqrt((X1(i) - X4(j))^2 + (Y1(i) - Y4(j))^2 + (Z1(i) - Z4(j))^2); %计算距离
if tmps < Rad2%满足条件的则保持到d2数据库
d2=[d2,1/(tmps+1)];
end
end
if isempty([d1,d2])==1
fobj2_(i)=0;
else
fobj2_(i)=mean([d1,d2]);
end
end
end
...........................................................................
f1=Sar/SCALE/SCALE/SCALE;
f2=mean(fobj2_);
f3=(NUM1_new+NUM2_new)/(N1+N2);%最优传感器数量
fitness = 0.6*fobj1 + 0.1*fobj2+0.3*f3;%获得最终的加权值
09_057_m