粒子群优化算法求解函数最值

article/2025/10/6 23:35:30

一、实验题目

计算如下二元函数的最小值:

(其中自变量x、y的范围均为[-50, 50])

  • 用matlab代码实现。
  • 代码必须能一键运行。
  • 最后输出x,y和z的最优值及收敛到最优值所需的迭代步数。
  • 算法关键参数需要注释清楚(如权重因子、学习因子、速度变化范围等)。

二、算法原理

粒子群优化算法求最优解

1、问题描述

D维空间中,有N个粒子;

    粒子i位置:xi=(xi1,xi2,…xiD),将xi代入适应函数f(xi)求适应值;

    粒子i速度:vi=(vi1,vi2,…viD)

    粒子i个体经历过的最好位置:pbesti=(pi1,pi2,…piD)

    种群所经历过的最好位置:gbest=(g1,g2,…gD)

通常,在第d(1≤d≤D)维的位置变化范围限定在内,速度变化范围限定在 内(即在迭代中若 超出了边界值,则该维的速度或位置被限制为该维最大速度或边界位置)

2、算法公式

粒子i的第d维速度更新公式:

   

粒子i的第d维位置更新公式:

   —第k次迭代粒子i飞行速度矢量的第d维分量

—第k次迭代粒子i位置矢量的第d维分量

    c1,c2—加速度常数,调节学习最大步长

    r1,r2—两个随机函数,取值范围[0,1],以增加搜索随机性

    w —惯性权重,非负数,调节对解空间的搜索范围

粒子速度更新公式包含三部分:

   第一部分为粒子先前的速度

   第二部分为“认知”部分,表示粒子本身的思考,可理解为粒子i当前位置与自己最好位置之间的距离。

   第三部分为“社会”部分,表示粒子间的信息共享与合作,可理解为粒子i当前位置与群体最好位置之间的距离。

3、算法流程

(1)Initial:

初始化粒子群体(群体规模为n),包括随机位置和速度。

设定参数运动范围,设定学习因子c1、c2,最大进化代数G,kg表示当前的进化代数。在一个D维参数的搜索解空间中,粒子组成的种群规模大小为Size,每个粒子代表解空间的一个候选解,其中第i(1≤i≤Size)个粒子在整个解空间的位置表示为Xi,速度表示为Vi。第i个粒子从初始到当前迭代次数搜索产生的最优解,个体极值Pi,整个种群目前的最优解为BestS。随机产生Size个粒子,随机产生初始种群的位置矩阵和速度矩阵。

(2)Evaluation:

 根据fitness function ,评价每个粒子的适应度。

个体评价(适应度评价):将各个粒子初始位置作为个体极值,计算群体中各个粒子的初始适应值f(Xi),并求出种群最优位置。

(3)Update the speed and position:

更新粒子的速度和位置,产生新种群,并对粒子的速度和位置进行越界检查,为避免算法陷入局部最优解,加入一个局部自适应变异算子进行调整。

其中,kg=1,2,…,G,i=1,2,…,Size,r1和r2为0到1的随机数,c1为局部学习因子,c2为全局学习因子,一般取c2大些。

(4)Find the Pbest:

   对每个粒子,将其当前适应值与其个体历史最佳位置(pbest)对应的适应值做比较,如果当前的适应值更高,则将用当前位置更新历史最佳位置pbest。

(5)Find the Gbest:

对每个粒子,将其当前适应值与全局最佳位置(gbest)对应的适应值做比较,如果当前的适应值更高,则将用当前粒子的位置更新全局最佳位置gbest。

(6)Update the Velocity:

 根据公式更新每个粒子的速度与位置。如未满足结束条件,则返回步骤2。通常算法达到最大迭代次数     或者最佳适应度值的增量小于某个给定的阈值时算法停止。

三、实验代码与结果

1、实验代码

function main%由于原代码求取的最大值,最小值的话直接将目标函数取成相反数即可
%很显然,结果只能无限逼近 3与5  跟算法原理有关(类似遗传算法)clear all;
close all;
%(1)初始化粒子群算法参数
min=-50;max=50;%粒子位置范围
Vmax=25;Vmin=-25;%粒子运动速度范围
c1=1.3;c2=1.7;  %学习因子[0,4]wmin=0.20;wmax=0.90;%惯性权重
G=400;          % 最大迭代次数
Size=100;        %初始化群体个体数目for i=1:Gw(i)=wmax-((wmax-wmin)/G)*i;  %随着优化进行,应降低自身权重
end  for i=1:Sizefor j=1:2x(i,j)=min+(max-min)*rand(1);     %随机初始化位置v(i,j)=Vmin +(Vmax-Vmin)*rand(1); %随机初始化速度end
end%(2)计算各个粒子的适应度,并初始化Pi、plocal和最优个体BestS
for i=1:Sizep(i)=func(x(i,:));y(i,:)=x(i,:);if i==1plocal(i,:)=evaluate_localbest(x(Size,:),x(i,:),x(i+1,:));elseif i==Sizeplocal(i,:)=evaluate_localbest(x(i-1,:),x(i,:),x(1,:));else plocal(i,:)=evaluate_localbest(x(i-1,:),x(i,:),x(i+1,:));end
endBestS=x(1,:);%初始化最优个体BestS
for i=2:Sizeif func(x(i,:))>func(BestS)BestS=x(i,:);end
end%(3)进入主循环
for kg=1:Gfor i=1:SizeM=1;if M==1v(i,:)=w(kg)*v(i,:)+c1*rand*(y(i,:)-x(i,:))+c2*rand*(plocal(i,:)-x(i,:));%局部寻优:加权,实现速度的更新elseif M==2v(i,:)=w(kg)*v(i,:)+c1*rand*(y(i,:)-x(i,:))+c2*rand*(BestS-x(i,:));      %全局寻优:加权,实现速度的更新endfor j=1:2   %检查速度是否越界if v(i,j)<Vminv(i,j)=Vmin;elseif  x(i,j)>Vmaxv(i,j)=Vmax;endendx(i,:)=x(i,:)+v(i,:)*1; %实现位置的更新for j=1:2   %检查位置是否越界if x(i,j)<minx(i,j)=min;elseif  x(i,j)>maxx(i,j)=max;endend         
%自适应变异,避免粒子群算法陷入局部最优if rand>0.60k=ceil(2*rand);x(i,k)=min+(max-min)*rand(1);end
%(4)判断和更新if i==1plocal(i,:)=evaluate_localbest(x(Size,:),x(i,:),x(i+1,:));elseif i==Sizeplocal(i,:)=evaluate_localbest(x(i-1,:),x(i,:),x(1,:));else plocal(i,:)=evaluate_localbest(x(i-1,:),x(i,:),x(i+1,:));endif func(x(i,:))>p(i) %判断当此时的位置是否为最优的情况,当不满足时继续更新p(i)=func(x(i,:));y(i,:)=x(i,:);endif p(i)>func(BestS)BestS=y(i,:);endend
Best_value(kg)=func(BestS);
end
figure(1);
kg=1:G;
plot(kg,-Best_value,'r','linewidth',2);
xlabel('generations');ylabel('Fitness function');% display('Best Sample=');disp(BestS);
display('X=');disp(BestS(1));
display('Y=');disp(BestS(2));
% display('Biggest value=');disp(Best_value(G));
display('Z=');disp(Best_value(G));
for i=1:Gif Best_value(i)==Best_value(end)disp('收敛到最优值需要的迭代步数');disp(i);break;end
endendfunction f = func(x)
f=-(0.5*(x(1)-3)^2+0.2*(x(2)-5)^2-0.1);
endfunction f =evaluate_localbest(x1,x2,x3)%求解粒子环形邻域中的局部最优个体
K0=[x1;x2;x3];
K1=[func(x1),func(x2),func(x3)];
[maxvalue index]=max(K1);
plocalbest=K0(index,:);
f=plocalbest;
end

2、实验结果

X=3.0022Y=5.0068Z=0.1000收敛到最优值需要的迭代步数379

PS:该代码有智能控制刘金锟第四版更改,更加详细的内容请查看原作。


http://chatgpt.dhexx.cn/article/aPBQetng.shtml

相关文章

粒子群优化算法python

粒子群优化算法PSO 粒子群优化算法基本原理算法步骤代码实现 粒子群优化算法 一群鸟在随机搜索食物&#xff0c;在这个区域里只有一块食物。所有的鸟都不知道食物在那里。但是它们知道当前的位置离食物还有多远。那么&#xff0c;找到食物的最简单有效的方法就是搜寻离食物最近…

基于粒子群优化算法的函数寻优算法

文章目录 一、理论基础二、案例背景1、问题描述2、解题思路及步骤 三、MATLAB程序实现1、PSO算法参数设置2、种群初始化3、寻找初始极值4、迭代寻优5、结果分析 四、惯性权重1、惯性权重的选择2、 ω \omega ω变化的算法性能分析 五、参考文献 一、理论基础 粒子群算法(parti…

自适应粒子群优化算法的MATLAB性能仿真

UP目录 一、理论基础 二、核心程序 三、测试结果 一、理论基础 粒子群优化&#xff08;PSO&#xff09;是一种基于群体的随机优化技术。与其它基于群体的进化算法相比&#xff0c;它们均初始化为一组随机解&#xff0c;通过迭代搜寻最优解。不同的是&#xff1a;进化计算遵循…

PSO粒子群优化算法

1算法简介 粒子群优化算法&#xff0c;在1995年由Eberhart博士和kennedy博士提出&#xff0c;源于对鸟群捕食的行为研究。该算法最初是受到飞鸟集群活动的规律性启发&#xff0c;进而利用群体智能建立的一个简化模型。算法流程图如下所示。 核心公式&#xff08; 更新速度和位…

PSO 粒子群优化算法

粒子群优化算法&#xff08;PSO&#xff09; Particle Swarm Optimization 1、 算法起源 粒子群优化算法(PSO)是一种进化计算技术(evolutionary computation)&#xff0c;1995 年由Eberhart 博士和kennedy 博士提出&#xff0c;源于对鸟群捕食的行为研究 。该算法最初是受到…

粒子群优化算法及MATLAB实现

上一篇博客是关于蚁群优化算法的&#xff0c;有兴趣的可以看下 https://blog.csdn.net/HuangChen666/article/details/115913181 1. 粒子群优化算法概述 2. 粒子群优化算法求解 2.1 连续解空间问题 2.2 构成要素 2.3 算法过程描述 2.4 粒子速度更新公式 …

粒子群优化算法(PSO)python实践

1 算法介绍和原理 1.1 算法原理 强烈推荐知乎大佬的这篇文章&#xff1a;粒子群优化算法(Particle Swarm Optimization, PSO)的详细解读 - 知乎 (zhihu.com)。该文章详细介绍了算法的原理、算法流程、参数解释和一些Tips&#xff0c;这里就不过多赘述了。 粒子群优化算法&am…

粒子群优化算法python实现

文章目录 前言一、粒子群优化算法是什么&#xff1f;二、算法流程三、算法的python实现实验结果 前言 首先简单介绍粒子群优化算法&#xff0c;粒子群优化算法的python实现&#xff08;含代码&#xff09; 一、粒子群优化算法是什么&#xff1f; 粒子群优化算法(Particle Swa…

【优化算法】粒子群优化算法简介

这里是引用 文章目录 1. 简介2. 涌现复杂性3. 鸟群智能建模4. 代码实现5. Conclusion参考资料 1. 简介 人工智能是计算机科学的一个大领域&#xff0c;它模拟计算机中的智能行为。在此基础上&#xff0c;提出了一种基于元启发式&#xff08; metaheuristic&#xff09;的粒子群…

粒子群优化算法(Particle Swarm Optimization)

转自&#xff1a;https://www.cnblogs.com/21207-iHome/p/6062535.html 粒子群算法的思想源于对鸟/鱼群捕食行为的研究&#xff0c;模拟鸟集群飞行觅食的行为&#xff0c;鸟之间通过集体的协作使群体达到最优目的&#xff0c;是一种基于Swarm Intelligence的优化方法。它没有遗…

粒子群优化(PSO)算法

一.算法思想 粒子群算法( Particle Swarm Optimization, PSO)最早是由Eberhart和Kennedy于1995年提出,它的基本概念源于对鸟群觅食行为的研究。设想这样一个场景:一群鸟在随机搜寻食物,在这个区域里只有一块食物,所有的鸟都不知道食物在哪里,但是它们知道当前的位置离食…

智能优化算法——粒子群优化算法(PSO)(小白也能看懂)

前言&#xff1a; 本文主要参考B站的一篇学习视频后&#xff0c;加之自己的理解和浓缩精华&#xff0c;不想看文字的可以直接划到末尾去b站看原视频&#xff0c;非常通俗易懂。 理论知识&#xff1a; 感性认知&#xff1a;如下面一张图片所示。在一个范围内&#xff0c;以三…

智能算法系列之粒子群优化算法

本博客封面由ChatGPT DALLE 2共同创作而成。 文章目录 前言1. 算法思想2. 细节梳理2.1 超参数的选择2.2 一些trick 3. 算法实现3.1 问题场景3.2 python实现 代码仓库&#xff1a;IALib[GitHub] 前言 本篇是智能算法(Python复现)专栏的第三篇文章&#xff0c;主要介绍粒子群优化…

粒子群优化算法(PSO)

粒子群优化算法&#xff08;PSO&#xff09; 粒子群优化算法&#xff08;PSO&#xff09;是一种进化计算技术&#xff0c;源于对鸟群捕食行为的研究。该算法最初是受到飞鸟集群活动的规律性启发&#xff0c;进而利用群体智能建立的一个简化模型。粒子群算法在对动物及群活动行…

数学建模——粒子群优化算法(PSO)【有详细样例 + 工具:matlab】(万字总结)

文章目录 一、粒子群优化算法(PSO)是什么&#xff1f;二、粒子群优化算法有什么用&#xff1f;三、粒子群优化算法的适用范围&#xff1f;四、算法简介(有助于理解)五、算法流程第一步&#xff1a;初始化第二步&#xff1a;计算粒子的适应度第三步&#xff1a;更新个体极值与全…

粒子群优化算法(PSO)附代码

文章目录 1 算法介绍2 算法模型3 实现步骤4 MATLAB代码实现PSO算法4.1. main.m4.2. 运行结果 1 算法介绍 粒子群优化算法(Particle Swarm Optimization&#xff0c;PSO)是一种经典的群智能算法&#xff0c;该算法灵感源自于鸟类飞行和觅食的社会活动&#xff0c;鸟群通过个体之…

浏览器添加划词翻译插件

网站&#xff1a;https://github.com/Selection-Translator/crx-selection-translate 安装下载的扩展程序

Chrome划词翻译-Saladict

Saladict 沙拉查词是一款专业划词翻译扩展&#xff0c;为交叉阅读而生。大量权威词典涵盖中英日韩法德西语&#xff0c;支持复杂的 划词操作、网页翻译、生词本、PDF&#xff0c;以及 Vimium 全键盘操作 。 迄今为止最好用的网页划词翻译插件。 下载安装地址&#xff1a;Chrome…

谷歌划词翻译

谷歌划词翻译是个谷歌插件 复制及时翻译很好用 插件下载地址 配置谷歌翻译方法

惊了,MATLAB竟能制作如此方便的划词翻译工具???

我点开程序一看&#xff0c;程序第一行就写着import&#xff0c; 却歪歪斜斜的每行上都是着MATLAB几个大字。 我横竖睡不着&#xff0c;仔细看了半夜&#xff0c; 才从字缝里看出字来&#xff0c;满页都写着 ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀——Java 其实用的…