m基于虚拟力优化算法的二维室内红外传感器部署策略matlab仿真

157 阅读5分钟

1.算法仿真效果

matlab2022a仿真结果如下:

7dc48fb792ccb4a84c9ed3420b562671_watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=.png  

f8e578b0b18568bf55812c122b69a9e9_watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=.png  

2.算法涉及理论知识概要

        红外传感器在室内环境监测、安防、智能控制等领域中得到了广泛应用。在室内部署红外传感器时,其位置的选择对于传感器的性能和信号质量有着至关重要的影响。因此,如何确定红外传感器的最佳部署位置成为了一个热门的研究课题。本文将介绍一种基于虚拟力优化算法的二维室内红外传感器部署策略,并重点介绍虚拟力算法在该策略中的应用。

 

一、研究背景

 

       红外传感器是一种广泛应用于室内环境监测、安防、智能控制等领域的传感器。在实际应用中,红外传感器的位置选择对于传感器的性能和信号质量有着至关重要的影响。因此,如何确定红外传感器的最佳部署位置成为了一个热门的研究课题。

 

       传统的红外传感器部署方法主要是基于经验和试错的方式进行的。这种方法存在着许多问题,如需要大量的时间和人力成本、无法保证部署的最优性、无法考虑到不同环境、不同传感器的影响等。因此,如何利用现代优化算法对红外传感器的部署位置进行优化是当前研究的热点之一。

 

二、虚拟力优化算法

 

       虚拟力优化算法是一种基于物理模型的优化算法。它通过模拟物理力学的作用,从而对待优化问题的解进行优化。其基本思想是将待优化问题的解表示为一组点的位置,然后引入一些虚拟力(如斥力、引力等),从而对点的位置进行优化。

 

虚拟力优化算法包括以下几个步骤:

 

初始化点的位置:随机生成一组初始点的位置。

 

计算虚拟力:根据问题的特点,计算每个点的斥力和引力。

 

更新点的位置:根据虚拟力的作用,更新每个点的位置。

 

终止条件:达到预定的终止条件后,输出最优解。

 

三、基于虚拟力优化的二维室内红外传感器部署策略

 

       为了解决红外传感器部署的优化问题,一种基于虚拟力优化算法的二维室内红外传感器部署策略。该策略的主要流程如下:

 

       建立室内二维模型:首先,需要建立室内的二维模型,包括房间的大小、布局、墙壁、家具等信息。可以使用二维建模软件进行建模,也可以使用激光扫描仪进行实时扫描。

 

       确定传感器数量和类型:根据实际需求,确定需要部署的红外传感器数量和类型。

 

      初始化点的位置:将室内空间划分为若干个区域,并随机生成一组初始点的位置,每个点对应一个传感器的部署位置。

 

计算虚拟力:根据问题的特点,计算每个点的斥力和引力。具体来说,可以采用以下几个虚拟力:

 

(1)斥力:用于避免传感器之间的重叠。斥力大小与传感器之间的距离成反比,距离越近,斥力越大。

 

(2)引力:用于吸引传感器到目标区域。引力大小与传感器与目标区域的距离成反比,距离越近,引力越大。

 

(3)墙壁斥力:用于避免传感器与墙壁的碰撞。墙壁斥力大小与传感器与墙壁的距离成反比,距离越近,斥力越大。

 

更新点的位置:根据虚拟力的作用,更新每个点的位置。具体来说,根据每个点所受到的虚拟力的大小和方向,计算每个点的加速度,然后根据加速度更新每个点的速度和位置。

 

重复步骤4和5,直到达到预定的终止条件。

 

输出最优解:当达到终止条件后,输出传感器的最佳部署位置.

 

f1覆盖率

 

       覆盖的计算,采用的是平面扫描法,对于两种传感器,一个圆形,一个正方形,那么对于每次优化得到的坐标,我们对整个平面区域进行扫描,计算每一个点是否处于某个或者多个传感器,如果满足这个条件,那么这个点计入到覆盖区域里面,然后扫描完所有点之后,统计一共多少个点呗扫描进去了,即覆盖率。对应代码为:

 

f2安装难易度

 

        安装难易度,这个部分没有专门的论文介绍,我们这里定义是传感器和额障碍物的距离作为安装难易度的判断依据。

 

f3,优化后传感器数量

 

        传感器数量,即每次优化后的数量,处于最大的预设值数量,如果这个值越小,那么越优。

 

3.MATLAB核心程序 `%下面这个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,:) = wFx(i,:)+rand(pg(1:(dim-2)/2)        -x(i,1:(dim-2)/2));%水平力

        Fy(i,:) = wFy(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,:) = wFxn(i,:)+rand(pg(dim-1)-x(i,dim-1));%水平力

        Fyn(i,:) = wFyn(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`