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

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

(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;我们会通过…

网络工程师【目录】

前言 从2023年下半年开始&#xff0c;所有的软考全面改革&#xff0c;由原来的笔试改为机考&#xff0c;据说难度会有一些增加&#xff0c;望悉知。 报名地址&#xff1a;中国计算机技术职业资格网 历史报名时间和考试时间&#xff1a;3月份报名&#xff0c;5月底考试&#xf…

互联网商业史--1.3Q大战

一.起因 奇虎360与腾讯间的纠葛被业界形象地称为“3Q大战”。 这场大战源于双方之间的“互掐”。 双方为了各自利益&#xff0c;从2010年到2014年&#xff0c;上演了一系列互联网之战&#xff0c;并走上诉讼之路 腾讯先是推出QQ医生1.0&#xff0c;随后推出QQ医生3.2&#x…

【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将继续为国内开源事…

golang游戏服务器 - tgf系列课程04

用户登录 介绍了如何使用tgf自带的登录功能进行用户的登录操作,并且编写机器人客户端的一个模拟请求代码需求描述 用户请求登录,登录成功之后请求HelloWorld接口.Common 接口定义和生成接口定义 新增登录接口 type IHallService interface {Login(ctx context.Context, args…

Hough算法数学原理

直线的极坐标方程&#xff1a; x x 0 r cos ⁡ θ x x_0 r\cos \theta xx0​rcosθ y y 0 r sin ⁡ θ y y_0 r\sin \theta yy0​rsinθ x cos ⁡ θ x 0 cos ⁡ θ r cos ⁡ 2 θ x \cos \theta x_0 \cos \theta r \cos^2 \theta xcosθx0​cosθrcos2θ y sin ⁡ θ…

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…

从视频中截取指定帧图片

前言&#xff1a; 我们在很多时候需要对视频文件进行分析&#xff0c;或者对视频产生缩略图。因此视频截取技术必不可少。 从本地文件中读取视频帧 导包 <dependency><groupId>org.jcodec</groupId><artifactId>jcodec</artifactId><versio…

http代理和SOCK5代理谁更安全?

在这个网络化的时代&#xff0c;我们常常听到HTTP代理和SOCKS5代理这两个名词&#xff0c;不过很多人并不了解是什么意思。今天&#xff0c;我们将揭开这两种代理的神秘面纱&#xff0c;看看到底HTTP代理和SOCKS5代理哪个更安全&#xff1f; HTTP代理&#xff1a;高效通信的“枢…

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&…

微服务和无服务器架构时代的持续测试

软件开发中对速度和敏捷性的追求催生了超越传统界限的方法和实践。持续测试是现代 DevOps 实践的基石&#xff0c;它已经发展到满足加速软件交付的需求。在本文中&#xff0c;我们将探讨持续测试的最新进展&#xff0c;重点关注它如何与微服务和无服务器架构相结合。 一、持续…

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

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

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

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

【力扣】刷题备忘录-动归-343. 整数拆分

343. 整数拆分 class Solution { public:int integerBreak(int n) {vector<int> dp(n1);dp[2] 1;for (int i 3; i < n; i) {for (int j 1; j < i - 1; j){ // 这里j的最大值去到i-2就可以&#xff0c;这时i - j 2 正好能用初始化的值dp[i] max(dp[i], max(j …