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

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

(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:Npbest(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:Tfor 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);endendend%%%%%%%%%%%%%%记录历代全局最优值%%%%%%%%%%%%%%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.mzph.cn/news/213978.shtml

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

相关文章

ISP-EE(Edge Enhance)

ISP-EE(Edge Enhance) EE模块在某些ISP主控中叫做sharpness或者sharpen&#xff0c;这些名称指代的模块是同一个&#xff0c;不用再纠结。主要就是在YUV域内弥补成像过程中图像的锐度损失&#xff0c;对边缘和细节进行加强&#xff0c;从而恢复场景本应具有的自然锐度。 锐度…

Linux基础指令(2)

今天我们继续来学我们有关于Linux的指令&#xff0c;今天的指令要比上次多多了。开始我们的学习吧。 man手册 先来看标题&#xff0c;手册我们第一时间想到的就是手册的查阅功能&#xff0c;我们都知道在我们上小学的时候&#xff0c;如果遇到不会的字&#xff0c;我们会通过…

【wvp】无响应sip 日志记录

23-12-11 17:25:18.179 [https-jsse-nio-8970-exec-7] INFO c.g.wvp.vmp.gb28181.transmit.cmd.impl.SIPCommander - 34010200001130000006_34010200001310000006 分配的ZLM为: wvpmediaserver001 [10.30.2.8:30406] 2023-12-11 17:25:18.337 [wvp-9] INFO c.g.w.v.g.t.e.r.i…

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

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

IvorySQL荣获 OSCHINA「2023 年度优秀开源技术团队」奖

2023 年&#xff0c;OSCHINA 综合平台上各大认证官方技术团队、开源社区帐号年度发表的内容深度及广度、开展各种活动运营影响力等多方面的表现&#xff0c;瀚高股份IvorySQL荣获 OSCHINA颁布的「2023 年度优秀开源技术团队」奖项。未来&#xff0c;IvorySQL将继续为国内开源事…

E4990A 阻抗分析仪,20 Hz 至 10/20/30/50/120 MHz

01 E4990A 阻抗分析仪 20 Hz 至 10/20/30/50/120 MHz 产品综述&#xff1a; E4990A 阻抗分析仪具有 20 Hz 至 120 MHz 的频率范围&#xff0c;可在宽阻抗范围内提供出色的 0.045%&#xff08;典型值&#xff09;基本准确度&#xff0c;并内置 40 V 直流偏置源&#xff0c;适…

计算机科学与技术认识实习【报告】

一、实习目的 此次认识实习主要面对计算机科学与技术专业的同学&#xff0c;了解专业在未来的发展趋势&#xff0c;通过观看公司的介绍视频和技术发展情况招聘信息后的感想和学习体会等多种方式&#xff0c;使我们了解本专业相关领域的发展现状&#xff0c;让我们在校园内课堂上…

C# 数据的保存和提取(.TXT格式)

红色部分的才是最终版 一、将页面内容保存到文件中 第一步 创建Visual的Windows窗体应用,使用的是 第二步 创建几个Label控件、TextBox控件、以及Button按钮,而TextBox控件放入Panel中 第三步 先对写法进行了解,了解保存的语句 StreamWriter sw= new StreamWriter(TXT…

Anaconda+Pytorch(GPU版)深度学习环境配置笔记

主要参考以下文章进行配置&#xff1a; https://blog.csdn.net/qq_43757976/article/details/131173301 配置版本略有更新&#xff0c;最新版本时间为2023.12.11 一、准备工作 个人电脑配置&#xff1a;laptop RTX4060 win11 个人配置版本&#xff1a;cuda&#xff08;12.1&…

JS:让2个li标签排列在同一行

前言 在js中&#xff0c;ul元素中li标签是块级元素&#xff0c;现在需要让2个分行的li元素显示在同一行&#xff0c;并且去掉li元素自带的标记符号 li元素处理前的样式如下&#xff1a; 实现 html代码 <div><ul><li>数据1&#xff1a;</li><li&…

第十六届山东省职业院校技能大赛中职组网络安全赛项竞赛正式试题

第十六届山东省职业院校技能大赛中职组网络安全"赛项竞赛试题 一、竞赛时间 总计&#xff1a;360分钟 二、竞赛阶段 竞赛阶段任务阶段竞赛任务竞赛时间分值A、B模块A-1登录安全加固180分钟200分A-2本地安全策略设置A-3流量完整性保护A-4事件监控A-5服务加固A-6防火墙策…

人机交互——自然语言理解

人机交互中的自然语言理解是人机交互的核心&#xff0c;它是指用自然语言&#xff08;例如中文、英文等&#xff09;进行交流&#xff0c;使计算机能理解和运用人类社会的自然语言&#xff0c;实现人机之间的自然语言通信。 自然语言理解在人工智能领域中有着非常重要的地位&a…

系统报错;由于找不到hid.dll,无法继续执行代码”的解决方案分享

在计算机使用过程中&#xff0c;我们可能会遇到一些错误提示&#xff0c;其中之一就是“找不到hid.dll&#xff0c;无法继续执行代码”。这个错误提示通常表示计算机缺少了一个重要的动态链接库文件&#xff0c;即hid.dll。本文将详细介绍hid.dll丢失对电脑的影响以及hid.dll是…

【Python网络爬虫入门教程2】成为“Spider Man”的第二课:观察目标网站、代码编写

Python 网络爬虫入门&#xff1a;Spider man的第二课 写在最前面观察目标网站代码编写 第二课总结 写在最前面 有位粉丝希望学习网络爬虫的实战技巧&#xff0c;想尝试搭建自己的爬虫环境&#xff0c;从网上抓取数据。 前面有写一篇博客分享&#xff0c;但是内容感觉太浅显了…

vite脚手架,配置动态生成路由,添加不同的layout以及meta配置

实现效果&#xff0c;配置了layout和对应的路由的meta 我想每个模块添加对应的layout&#xff0c;下边演示一层layout及对应的路由 约束规则&#xff1a; 每个模块下&#xff0c;添加对应的 layout.vue 文件 每个文件夹下的 index.vue 是要渲染的页面路由 每个渲染的页面路由对…

Appium python自动化测试系列之移动自动化测试!

1.1 移动自动化测试现状 因为软件行业越来越发达&#xff0c;用户的接受度也在不断提高&#xff0c;所以对软件质量的要求也随之提高&#xff0c;当然这个也要分行业&#xff0c;但这个还是包含了大部分。因为成本、质量的变化现在对自动化测试的重视度越来越高&#xff0c;在…

CTF-misc(1)图片隐写

笔记目录 渗透测试工具(1)wireshark渗透测试工具(2)Nmap渗透测试工具(3)BurpsuiteAWD比赛(1)AWD入门攻略大纲CTF-Web(2)SQL注入CTF-Web(3)文件上传漏洞 图片隐写目录 (1)GIf和二维码隐写 二维码补全 二维码绘图 Gif规律分析 (2)文本附加图片隐写 (3)IHDR文件头修复图片宽高 (…

⭐Unity 搭建UDP服务端(02)接收客户端消息

客户端在上一篇 由于服务器逻辑写的较为简单 所以直接上代码了~ using System; using System.Net; using System.Net.Sockets; using System.Text; using UnityEngine;public class UdpServer : MonoBehaviour {public static UdpServer instance;private void Awake(){if (…

Springboot管理系统数据权限过滤——ruoyi实现方案

本文主要简述&#xff0c;Ruoyi框架使用的权限过滤实现方案&#xff0c;实现简单易懂。主要知识点有&#xff1a; 注解定义&#xff1b;面向切面编程&#xff0c;在执行有数据权限注解的方法之前获取用户组织权限&#xff0c;拼接到domain对象的params参数中&#xff1b; 1. …

AI:100-基于卷积神经网络的农作物生长状态监测

🚀 本文选自专栏:人工智能领域200例教程专栏 从基础到实践,深入学习。无论你是初学者还是经验丰富的老手,对于本专栏案例和项目实践都有参考学习意义。 ✨✨✨ 每一个案例都附带有在本地跑过的核心代码,详细讲解供大家学习,希望可以帮到大家。欢迎订阅支持,正在不断更新…