关于粒子群算法的一些简单尝试

news2024/11/20 14:28:46

粒子群算法核心思想:(鸟 = 粒子)

(1)许多的鸟站在不同的地方;

(2)每一只鸟都有自己寻找食物的初始飞行方向、飞行速度;

(3)这些鸟儿每隔一段时间寻找一次食物,通过搜集所有鸟的信息,来寻找食物最充足的地方;

一、以公式原理的实现过程逐步讲解;

1、初始化N个粒子,这些粒子有着随机的初始位置和随机的初始速度;

2、计算这些粒子下一步位置,所有的粒子均朝着随机方向以随机的速度移动;

3、寻找所有粒子中的最小值,以及寻找每个粒子在不同时刻的最小值;

先寻找所有粒子中的最小值,对所有的粒子求最小值;

然后选在每个粒子在不同时刻的最小值;每个粒子自身的最小值是能够决定下一步该粒子移动方向和速度的量;

4、更新粒子搜寻的速度,并且更新粒子搜寻的方向,这里不仅有速度的大小,还有方向的角度,因此是一个矢量;

这个里面,随机优化的核心是其初始位置和速度的随机性。因此,更新后的速度应一定程度尽可能保持其先前的速度,以保持其随机性;这个α是惯性权重系数,建议为[0.5,0.8]。

我们还应该在这次迭代中调整速度以接近组最小值,因为它至少是这一步中最好的一个;这个里面c1是权重系数,r1是随机权重系数,第一个c1代表全局最小的权重,推荐范围 0.1-2 ,r1是为了提高随机性,推荐范围 0-1;

另一个同理,c2是代表局部最优的权重,推荐范围 [0.1~2],r2是随机权重系数,推荐范围 0-1;

5、设计停止条件

重复迭代并在特定位置停止:

(1)达到最大迭代次数k;

(2)变化的目标函数小于预设阈值ε;

   (3)我们经常设置速度和位置的限制,以避免不稳定和大的振荡

二、以代码进行逐步讲解

最后通过代码进行实现:求取函数最小值

第一步:首先初始化;

1、定义粒子群个数;N = 100; %群体粒子个数

2、定义粒子维数;几个变量几维度;D = 2; 

3、定义权重因子大小;c1 =2;c2 =2;

4、定义速度范围;这个Vmax = 1; Vmin = -1;

5、定义位置范围;(变量的范围)(这里这么写是因为xy的范围不一致,就分开给出范围)

X1max =1; 

X1min =-1;

X2max =3;

X2min =-2;

Xmax = [X1max X2max];

Xmin = [X1min X2min];

第二步:然后定义初始随机量:

1、定义初始随机位置;

x1 =  rand(N,1) * (X1max-X1min)+X1min; 

x2 =  rand(N,1) * (X2max-X2min)+X2min;

2、定义初始随机速度;

v = rand(N,D) * (Vmax-Vmin)+Vmin;

第三步:初始化个体最优位置和最优值

p=x;  
pbest = ones(N,1); %% 创建一个数组,用于存储每个粒子对应的适应度函数值
for i = 1:N
    pbest(i) = func2(x(i,:)); % 求出初始化种群对应的目标函数值
end

第四步:初始化全局最优位置和最优值;

g = ones(1,D); 
gbest = inf;   
for i = 1:N   
    if(pbest(i) < gbest)
        g = p(i,:);
        gbest = pbest(i);
    end
end

第五步:粒子群群体寻优;这里就不列了,直接把所有代码给出来;这里是大头;

%%%%%%%%%%%%%%粒子群算法求函数极值%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%初始化%%%%%%%%%%%%%%%%%%%
function counti()
clear all; %清除所有变量
% close all; %清图
clc; %清屏
N = 100; %群体粒子个数
D = 2; %粒子维数   变量的个数
T = 1000; %最大迭代次数
c1 =2; %权重因子 c1 [0.1 - 2] 越大,保持原来速度的能力越强
c2 =2; %权重因子 c2 [0.1 - 2]
Wmax = 0.8; %惯性权重最大值   
Wmin = 0.4; %惯性权重最小值

X1max =1; %位置最大值
X1min =-1; %位置最小值

X2max =3; %位置最大值
X2min =-2; %位置最小值

Xmax = [X1max X2max];
Xmin = [X1min X2min];

Vmax = 1; %速度最大值
Vmin = -1; %速度最小值
%%%%%%%%%%%%初始化种群个体(限定位置和速度)%%%%%%%%%%%%
x1 =  rand(N,1) * (X1max-X1min)+X1min;
x2 =  rand(N,1) * (X2max-X2min)+X2min;
x = [x1 x2];

v = rand(N,D) * (Vmax-Vmin)+Vmin;
%%%%%%%%%%%%%初始化个体最优位置和最优值%%%%%%%%%%%%%
p = x;  
pbest = ones(N,1); %% 创建一个数组,用于存储每个粒子对应的适应度函数值
for i = 1:N
    pbest(i) = func2(x(i,:)); % 求出初始化种群对应的目标函数值
end
%%%%%%%%%%%%%初始化全局最优位置和最优值%%%%%%%%%%%%
g = ones(1,D); % 创建一个数组和变量用于保存最优变量和目标函数 
gbest = inf;   %inf 无穷大
for i = 1:N   % 这一步当中找到种群最优目标函数值
    if(pbest(i) < gbest)
        g = p(i,:);
        gbest = pbest(i);
    end
end
gb = ones(1,T); % 建立此项用于保存种群中每一代中的的最优值
%%%%%%%%%按照公式依次迭代直到满足精度或者迭代次数%%%%%%%%
for i = 1:T
    for j = 1:N
        %%%%%%%%%更新个体最优位置和最优值%%%%%%%%%%%%%
        if (func2(x(j,:)) < pbest(j))  % 新的个体是否小于原来的个体,如果小于则保存新的个体
            p(j,:) = x(j,:);
            pbest(j) = func2(x(j,:));
        end
        %%%%%%%%%%更新全局最优位置和最优值%%%%%%%%%%%%
        if(pbest(j) < gbest)
            g = p(j,:);
            gbest = pbest(j);
        end
        %%%%%%%%%%%计算动态惯性权重值%%%%%%%%%%%%%%%
        w = Wmax-(Wmax-Wmin)*i/T;
        %%%%%%%%%%%%更新位置和速度值%%%%%%%%%%%%%%%
        v(j,:) = w*v(j,:)+c1*rand*(p(j,:)-x(j,:))...
            +c2*rand*(g-x(j,:)); %计算对应的速度公式
        x(j,:) = x(j,:)+v(j,:);  %更新粒子群当中对应的基因
        %%%%%%%%%%%%%%边界条件处理%%%%%%%%%%%%%%%
        % 检查单个粒子的速度和位置信息是否超过当前最大限制
        for ii = 1:D  % 如果超过的话就在原来的范围内重新生成个体
            if (v(j,ii) > Vmax) || (v(j,ii) < Vmin)
                v(j,ii) = rand * (Vmax-Vmin)+Vmin;
            end  
            if (x(j,ii) > Xmax(ii)) || (x(j,ii) < Xmin(ii))
                x(j,ii) = rand * (Xmax(ii)-Xmin(ii))+Xmin(ii);
            end
        end
    end
    %%%%%%%%%%%%%%记录历代全局最优值%%%%%%%%%%%%%%
    gb(i) = gbest;
end
g;       %最优个体
gb(end); %最优值
figure(1)
plot(gb)
hold on 
grid on
xlabel('迭代次数');
ylabel('适应度值');
title('适应度进化曲线')
hold on 
end
%%%%%%%%%%%%%%%%%%适应度函数%%%%%%%%%%%%%%%%%

function value = func2(x)
value = (3*cos(x(1)*x(2))+x(1)+x(2)^2);

end      %这里是适应度函数,也可以在同一文件夹下独立建立函数,也可以直接写在后面。




最终仿真结果:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1302129.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

高级网工在Linux服务器抓包,少不了这几条常用的tcpdump命令。

Linux 的命令太多&#xff0c;tcpdump 是一个非常强大的抓包命令。有时候想看线上发生的一些问题&#xff1a; nginx 有没有客户端连接过来…… 客户端连接过来的时候 Post 上来的数据对不对…… 我的 Redis 实例到底是哪些业务在使用…… tcpdump 作为网络分析神器就派上用场…

湖农大邀请赛shell_rce漏洞复现

湖农大邀请赛 shell_rce 复现 在 2023 年湖南农业大学邀请赛的线上初赛中&#xff0c;有一道 shell_rce 题&#xff0c;本文将复现该题。 题目内容&#xff0c;打开即是代码&#xff1a; <?phpclass shell{public $exp;public function __destruct(){$str preg_replace…

2、快速搞定Kafka术语

快速搞定Kafka术语 Kafka 服务端3层消息架构 Kafka 客户端Broker 如何持久化数据小结 Kafka 服务端 3层消息架构 第 1 层是主题层&#xff0c;每个主题可以配置 M 个分区&#xff0c;而每个分区又可以配置 N 个副本。第 2 层是分区层&#xff0c;每个分区的 N 个副本中只能有…

Java集合进阶

目录 集合体系结构 Collection集合 List集合 ArrayList集合 LinkedList集合 集合体系结构 注意:有序:存进去的数组和取出来时一样 而不是大小的那种有序 Collection集合 单列集合顶层接口Collection import java.util.ArrayList; import java.util.Collection;public cl…

模块化机房在大数据时代的角色:高效、可扩展的数据存储和处理平台

随着大数据时代的到来&#xff0c;数据已经成为企业竞争的核心资源。然而&#xff0c;传统的数据中心已经无法满足现代业务的需求&#xff0c;尤其是在数据存储和处理方面。模块化机房作为一种新型的数据中心建设模式&#xff0c;具有高效、可扩展等优势&#xff0c;逐渐成为大…

SQL命令---删除字段

介绍 使用sql语句删除表字段。 命令 alter table 表名 drop 字段名;例子 删除a表中的name字段。 alter table a drop name;下面是执行删除后的表结构&#xff1a;

《opencv实用探索·十六》opencv直方图计算calcHist函数解析

直方图理解&#xff1a; &#xff08;对于8位灰度图像亮度/灰度为(0-255)&#xff0c;12位灰度图像亮度/灰度为(0-4095)&#xff09; 以8位图像为例&#xff0c;亮度分为0到255共256个数值&#xff0c;数值越大&#xff0c;代表的亮度越高。其中0代表纯黑色的最暗区域&#xff…

XCube——用于超高分辨率 3D 形状和场景的生成模型!

他们的方法在稀疏体素网格的层次结构上训练潜在扩散模型的层次结构。他们在稀疏结构 VAE 的潜在空间上进行扩散&#xff0c;它为层次结构的每个级别学习紧凑的潜在表示。 XCube 是稀疏体素层次上的分层潜在扩散模型&#xff0c;即从粗到细的 3D 稀疏体素网格序列&#xff0c;使…

OpenWRT搭建本地web站点并结合内网穿透实现公网远程访问

文章目录 前言1. 检查uhttpd安装2. 部署web站点3. 安装cpolar内网穿透4. 配置远程访问地址5. 配置固定远程地址 前言 uhttpd 是 OpenWrt/LuCI 开发者从零开始编写的 Web 服务器&#xff0c;目的是成为优秀稳定的、适合嵌入式设备的轻量级任务的 HTTP 服务器&#xff0c;并且和…

【高数:3 无穷小与无穷大】

【高数&#xff1a;3 无穷小与无穷大】 1 无穷小与无穷大2 极限运算法则3 极限存在原则4 趋于无穷小的比较 参考书籍&#xff1a;毕文斌, 毛悦悦. Python漫游数学王国[M]. 北京&#xff1a;清华大学出版社&#xff0c;2022. 1 无穷小与无穷大 无穷大在sympy中用两个字母o表示无…

数据结构--二叉树

目录 1.二叉树链式结构的实现 1.1 前置说明 1.2 二叉树的遍历 1.2.1 前序、中序以及后序遍历 1.2.2 层序遍历及判断是否为完全二叉树 1.3 节点个数&#xff0c;叶子节点个数&#xff0c;第k层节点个数以及高度等 1.4 二叉树的创建和销毁 1.二叉树链式结构的实现 1.1 前置说…

使用人工智能优化常见业务流程

在现代商业环境中&#xff0c;人工智能(AI)正在改变企业的运营方式。将人工智能集成到业务流程中可以提高效率和准确性&#xff0c;从而节省大量时间和成本。 这使员工能够专注于更具战略性的任务。人工智能在商业中的应用范围从自动化日常任务到提供高级分析&#xff0c;以做…

Citespace、vosviewer、R语言的文献计量学可视化分析

文献计量学是指用数学和统计学的方法&#xff0c;定量地分析一切知识载体的交叉科学。它是集数学、统计学、文献学为一体&#xff0c;注重量化的综合性知识体系。特别是&#xff0c;信息可视化技术手段和方法的运用&#xff0c;可直观的展示主题的研究发展历程、研究现状、研究…

《杂文选刊》明年休刊之随笔

笔者今天偶然发现&#xff0c;网民对于近期登上社交网站热搜榜的一条新闻&#xff0c;既感兴趣又觉迷惑&#xff0c;因此关注度显得较高。 荣登社交网站热搜榜的这条新闻是&#xff1a;12月4日发出“休刊启事 ”&#xff0c;在宣布“《 杂文选刊》2024年1月1日起休刊”的同时&…

和鲸科技荣获第三届光合组织解决方案大赛集智赛道优秀奖

2023年11月28日&#xff0c;历经数月的“第三届光合组织解决方案大赛”落下帷幕&#xff0c;获奖榜单正式出炉。 本次大赛中&#xff0c;上海和今信息科技有限公司&#xff08;简称“和鲸科技”&#xff09;凭借多年深耕数据智能领域&#xff0c;提供关键基础设施催生人工智能…

解决HTTP 429错误的Scrapy中间件配置

引言 在进行网络数据抓取时&#xff0c;经常会遇到HTTP 429错误&#xff0c;表示请求速率已超出API限制。为避免封禁或限制访问&#xff0c;需要调整Scrapy的请求速率&#xff0c;以在不触发HTTP 429错误的情况下完成数据抓取。针对这一问题&#xff0c;可使用Scrapy的AutoThr…

Win11预览体验计划显示Your PC does not meet the minimum hardware requirements...的解决方案

某一天你心血来潮&#xff0c;打算参与Win11 预览体验计划&#xff0c;但体验计划页面却显示“Your PC does not meet the minimum hardware requirements for Windows11…”。 一种解决思路&#xff1a; 去以下网页下载Offline Insider Enroll软件&#xff0c;管理员权限运行…

安全开发:身份认证方案之 Google 身份验证器和基于时间的一次性密码 TOTP 算法

参考资料在文末注明&#xff0c;如本文有错漏欢迎评论区指出&#x1f44f; 目前很多应用都逐步采用了双因子认证或者说MFA认证方案&#xff0c;因此本文介绍一下背后的机制和TOTP算法原理。使用TOTP算法&#xff0c;只要满足两个条件&#xff1a;1&#xff09;基于相同的密钥&…

RocketMQ源码

RocketMQ的核心三流程 启动流程 RocketMQ服务端由两部分组成NameServer和Broker&#xff0c;NameServer是服务的注册中心&#xff0c;Broker会把自己的地址注册到NameServer&#xff0c;生产者和消费者启动的时候会先从NameServer获取Broker的地址&#xff0c;再去从Broker发…

BEUEC品牌比例阀放大器厂家

HE-SP1/HE-SP2/HE-SP2-U/HE-MPS1/HE-MPS2/HE-MAPQ-V/HE-MAPQ-K/HE-MPT2-Y/HE-MPT2-U比例放大器适配控制各种不带位置反馈比例阀&#xff1b; BEUEC品牌比例放大器控制如博世力士乐&#xff08;Bosch Rexroth&#xff09;、伊顿威格士&#xff08;EATON Vickers&#xff09;、油…