优化覆盖基于matlab粒子群算法求解传感器覆盖优化问题含Matlab源码 1493期

Posted 紫极神光

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了优化覆盖基于matlab粒子群算法求解传感器覆盖优化问题含Matlab源码 1493期相关的知识,希望对你有一定的参考价值。

一、粒子群算法简介

1 粒子群算法的概念
粒子群优化算法(PSO:Particle swarm optimization) 是一种进化计算技术(evolutionary computation)。源于对鸟群捕食的行为研究。粒子群优化算法的基本思想:是通过群体中个体之间的协作和信息共享来寻找最优解.
PSO的优势:在于简单容易实现并且没有许多参数的调节。目前已被广泛应用于函数优化、神经网络训练、模糊系统控制以及其他遗传算法的应用领域。

2 粒子群算法分析
2.1基本思想
粒子群算法通过设计一种无质量的粒子来模拟鸟群中的鸟,粒子仅具有两个属性:速度和位置,速度代表移动的快慢,位置代表移动的方向。每个粒子在搜索空间中单独的搜寻最优解,并将其记为当前个体极值,并将个体极值与整个粒子群里的其他粒子共享,找到最优的那个个体极值作为整个粒子群的当前全局最优解,粒子群中的所有粒子根据自己找到的当前个体极值和整个粒子群共享的当前全局最优解来调整自己的速度和位置。下面的动图很形象地展示了PSO算法的过程:

2 更新规则
PSO初始化为一群随机粒子(随机解)。然后通过迭代找到最优解。在每一次的迭代中,粒子通过跟踪两个“极值”(pbest,gbest)来更新自己。在找到这两个最优值后,粒子通过下面的公式来更新自己的速度和位置。

公式(1)的第一部分称为【记忆项】,表示上次速度大小和方向的影响;公式(1)的第二部分称为【自身认知项】,是从当前点指向粒子自身最好点的一个矢量,表示粒子的动作来源于自己经验的部分;公式(1)的第三部分称为【群体认知项】,是一个从当前点指向种群最好点的矢量,反映了粒子间的协同合作和知识共享。粒子就是通过自己的经验和同伴中最好的经验来决定下一步的运动。以上面两个公式为基础,形成了PSO的标准形式。

公式(2)和 公式(3)被视为标准PSO算法。
3 PSO算法的流程和伪代码

二、部分源代码

%*****************粒子群算法实现**********************
%%
clc
clear
clear all
%%
%设定通信半径为12
tic;

R=12;
%% 粒子群参数
maxgen=1000;               %迭代次数
sizepop=30;               %粒子规模,每一个粒子代表一个解
Wmax=0.9;
Wmin=0.4;
%% 参数初始化
%粒子群算法中的两个参数
c1 = 2.0;
c2 = 2.0;
Vmax=20;                                        %最大速度
Vmin=-20;                                       %最小速度
popmax=100;                                    %最大值
popmin=0;                                      %最小值
yfitness=zeros(sizepop,2);                       %1行maxiter列矩阵,存放每一次迭代的最优值的空间矩阵
%% 产生初始粒子和速度
pop=[A(:,1), A(:,2)] ;                     %初始种群
for i=1:sizepop
   
    V(i,:)=rands(1,2)*5;                         %初始化速度
                    
end

%dist=Distance(pop(:,1),pop(:,2));  %初始距离
    %计算适应度
fitness=fun(pop(:,1),pop(:,2));      %粒子群的适应度
gbest=pop;                           %当前个体最优解向量组,矩阵
fitnessgbest=fitness;  
fitnesszbest=fitness;                %群体最优记录
yfitness=pop;
 %% 迭代寻优
for i=1:maxgen
    

    W=Wmax-((Wmax-Wmin)/maxgen)*i;
    for j=1:sizepop
        
        %速度更新
        V(j,:) = W*V(j,:) + c1*rand*(gbest(j,:) - pop(j,:)) + c2*rand*(yfitness(j,:) - pop(j,:));
     
    end 
    fitness(i)=fun(pop(:,1),pop(:,2));      %计算粒子群的适应度
         if fitness(i) > fitnessgbest
            gbest=pop;
           fitnessgbest(i)=fitness(i);
        end
        %群体极值更新
        if fitness(i)>fitnesszbest
            yfitness=pop;
            fitnesszbest(i)=fitness(i);    
        end
    
    %dist=Distance(pop(:,1),pop(:,2));
    zz(i)=max(fitnesszbest);
    
end
zbest=max(zz);
%% 结果分析
figure(1);
plot(zz) %画出迭代图
set(gcf,'color','w'); 
title('算法训练过程','fontsize',12);
xlabel('迭代次数','fontsize',12);
ylabel('覆盖率','fontsize',12);

%% 图形输出
figure(2)
plot(yfitness(:,1),yfitness(:,2),'+')

hold on


 
end
a=[yfitness(:,1),yfitness(:,2)]
set(gcf,'color','w'); 
% 窗口显示
disp([zbest]    );
toc
function z=fun(x,y)
%x input  圆心横坐标
%y input  圆心纵坐标
%z  output 覆盖率
L=100; % 正方形区域边长
R=12; % 圆半径
[m,n]=meshgrid(1:L);
Ar=linspace(0,pi*2,200); % 圆周角度
for i=1:30
D=sqrt([m-x(i)].^2+[n-y(i)].^2); % 计算坐标点到圆心的距离
[m0,n0]=find(D<=R); % 检测出圆覆盖点的坐标
Ind=sub2ind([L,L],m0,n0); % 坐标与索引转化
M(Ind)=1; % 改变覆盖状态
end
scale=sum(M(1:end))/L/L; % 计算覆盖比例

z=scale;

end


三、运行结果

四、matlab版本及参考文献

1 matlab版本
2014a

2 参考文献
[1] 包子阳,余继周,杨杉.智能优化算法及其MATLAB实例(第2版)[M].电子工业出版社,2016.
[2]张岩,吴水根.MATLAB优化算法源代码[M].清华大学出版社,2017.

以上是关于优化覆盖基于matlab粒子群算法求解传感器覆盖优化问题含Matlab源码 1493期的主要内容,如果未能解决你的问题,请参考以下文章

布局优化基于粒子群算法的无线传感器网(WSN)覆盖优化Matlab源码

布局优化基于粒子群算法的无线传感器网(WSN)覆盖优化Matlab源码

优化覆盖基于matlab粒子群算法优化无人机编队布局求解车载网络通信覆盖优化问题含Matlab源码 2021期

优化覆盖基于matlab前缀B算法求解传感器覆盖优化问题含Matlab源码 379期

优化覆盖基于matlab蚁群算法求解无线传感器覆盖优化问题含Matlab源码 1835期

基于粒子群算法的无线传感器网络覆盖优化