对于粒子群算法的一些理解【含有已编译通过的实例】

对于粒子群算法的一些理解【含有已编译通过的实例】

      最近做大创开始学习遗传算法,粒子群算法等,在大佬的带领下,开始写点博客,因为是第一次写,而且自己学的也不好(捏个是重点),就当写给自己看啦。
      粒子群算法跟遗传算法一样,都是从自然界的自然现象得到启发,而被大牛创造出来的,在一代代的改进中逐渐趋于完善,也慢慢作用于越来越多的领域中。
      粒子群算法据说是从鸟群寻食中得到的启发,一群鸟在一个不知道食物分布的地方觅食,它们会渐渐集中到食物最多的地方去,当然,如果地方太大的话,也可能会出现多个集中鸟比较多的地方。
这里头有几个官方术语

      个人理解就是一个较优解集支配一个次优解集

      Pareto最优就是在最理想条件下,我们取得了自己最想要的结果,但是很遗憾,因为现实问题的影响因素太多,所以我们往往陷入局部最优,或者得到一堆

较优解。于是:

在这里插入图片描述

      根据我们计算得到的最优解集,我们可以计算出理想的最终优化结果,就像如果发电的模型的话,我们可以得到我们想要的发电的效率啦,参量啦~~~也就是

      下面的是一个在matlab上已经测试通过的 z = x^2 + y^2的pso实现全部代码,希望对大家有帮助。
下文代码参考该博主代码写出,这个博客讲PSO很赞哎!

https://blog.csdn.net/zyqblog/article/details/80829043
close all;
clc;
N = 100;%种群规模
D = 2;%粒子维度
T = 100;%迭代次数
Xmax = 2000;
Xmin = -2000;
c1 = 1.5; %学习因子1
c2 = 1.5; %学习因子2
w = 0.8; %惯性权重
Vmax = 10; % 最大飞行速度
Vmin = -10;% 最小飞行速度
popx = rand(N,D)*(Xmax-Xmin)+Xmin;% 初试化粒子群的位置(粒子位置是个D维向量)
popv = rand(N,D)*(Vmax-Vmin)+Vmin;%初始化粒子群的速度(粒子速度是个D维向量)
%初始化每个历史最优粒子
pBest = popx;
pBestValue = func_fitness(pBest);
%初始化全局历史最优粒子
[gBestValue,index] = max(func_fitness(popx));
gBest = popx(index,:);
for t=1:T
    for i=1:N
        %更新个体的位置和速度
        popv(i,:) = w*popv(i,:)+C1*rand*(pBest(i,:)-popx(i,:))+C2*rand*(gBest-popx(i,:));
        popx(i,:) = popx(i,:)+popv(i,:);
        %边界处理,超过定义域范围就取该范围极值
        index = popv(i,:)>Vmax | popv(i,:)<Vmin ;
        popv(i,index) = rand*(Vmax-Vmin)+Vmin ;
        index = find(popx(i,:)>Xmax | popx(i,:)<Xmin);
        popx(i,index) = rand*(Xmax-Xmin) + Xmin;
        %更新粒子历史最优
        if func_fitness(popx(i,:))>pBestValue(i)
            pBest(i,:) = popx(i,:);
            pBestValue(i) = func_fitness(popx(i,:));
        elseif pBestValue(i)>gBestValue
            gBest = pBest(i,:);
            gBestValue = pBestValue(i);
        end
    end
      %每代最优解对应的目标函数值
      tBest(t) = func_objValue(gBest);%目标函数
end
figure
plot(tBest);
xlabel('迭代次数');
ylabel('适应度值');
title('适应度·进化曲线');
function [result] = func_fitness(pop)
%UNTITLED2 此处显示有关此函数的摘要
%   此处显示详细说明
objValue = func_objValue(pop);
result = 1314 -objValue ;
end
function [result] = func_objValue(pop)
%NTITLED3 此处显示有关此函数的摘要
%   此处显示详细说明
objValue = sum(pop,2);
result = objValue;
end

  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值