基于matlab的粒子群算法实现
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
- 前言
- 一、粒子群算法的实现步骤
- 二、示例代码
- 三、结果展示
前言
粒子群算法基于“种群”和“进化”的概念,通过个体间的协作与竞争,实现复杂空间最优解得搜索 。下面我们介绍带有惯性权重的粒子群优化算法,其进化过程如下式:
上式中,第一部分表示粒子的初始速度,保证算法的全局收敛能力;第二、三部分使算法具有局部收敛能力。惯性权重w表示在多大程度上保留原来的速度:w较大时,全局收敛能力强,局部收敛能力弱;w较小时,全局收敛能力弱,局部收敛能力强。
实验结果表明:w在0.8~1.2之间时,粒子群算法具有更快的收敛速度。
在搜索过程中可以对w进行动态调整,如上式所示:在算法开始时,可给w赋予较大正值,随着搜索的进行,可以线性地使w逐渐减小,这样可以保证在算法开始时,各粒子能够以较大的速度步长在全局范围内探测到较好的区域;而在搜索后期,较小的w值则保证粒子能够在极值点周围做精细的搜索,从而使算法有较大的概率向全局最优解位置收敛。对w进行调整,可以权衡全局搜索和局部搜索能力。
一、粒子群算法的实现步骤
(1)初始化粒子群,群体规模,每个粒子的位置和速度。
(2)计算每个粒子的适应度值。
(3)将每一个粒子的适应度值和个体极值进行比较,若适应度值更优,则用其替代个体极值。
(4)将每一个粒子的适应度值和全局极值进行比较,若适应度值更优,则用其替代个体极值。
(5)迭代更新粒子的速度和位置。
(6)进行边界条件的处理。
(7)判断是否满足终止条件:若满足,结束算法;若不满足,返回步骤(2)。
二、示例代码
用matlab实现函数f(x)=xsin(x)cos(2x)-2xsin(3x)+3xsin(4x)的最小值的计算
%% 初始化种群
clc
clear all
close all
%% Sphere
f= @(x) x .* sin(x) .* cos(2 * x) - 2 * x .* sin(3 * x) +3 * x .* sin(4 * x);%相当于建立了一个函数文件
N = 20; % 初始种群个数
d = 1; % 可行解维数
ger = 100; % 最大迭代次数
limit = [0, 50]; % 设置位置参数限制
vlimit = [-10, 10]; % 设置速度限制
w = 0.8; % 惯性权重
c1 = 0.5; % 自我学习因子
c2 = 0.5; % 群体学习因子
figure(1);ezplot(f,[0,0.01,limit(2)]); %曲线
x = limit(1) + ( limit( 2 ) - limit( 1) ) .* rand(N, d);%初始种群的位置
v = rand(N, d); % 初始种群的速度
xm = x; % 每个个体的历史最佳位置
ym = zeros(1, d); % 种群的历史最佳位置
fxm = ones(N, 1)*inf; % 每个个体的历史最佳适应度
fym = inf; % 种群历史最佳适应度
hold on
plot(xm, f(xm), 'ro');title('初始状态图');
figure(2)
%% 群体更新
iter = 1;
% record = zeros(ger, 1); % 记录器
while iter <= ger fx = f(x) ; % 个体当前适应度 for i = 1:N if fx(i) <fxm(i) fxm(i) = fx(i); % 更新个体历史最佳适应度 xm(i,:) = x(i,:); % 更新个体历史最佳位置(取值) end end if min(fxm) < fym [fym, nmin] = min(fxm); % 更新群体历史最佳适应度 ym = xm(nmin, :); % 更新群体历史最佳位置 end v = v * w + c1 * rand * (xm - x) + c2 * rand * (repmat(ym, N, 1) - x);% 速度更新 % 边界速度处理 v(v > vlimit(2)) = vlimit(2); v(v < vlimit(1)) = vlimit(1); x = x + v;% 位置更新 % 边界位置处理 x(x > limit(2)) = limit(2); x(x < limit(1)) = limit(1); record(iter) = fym;%最大值记录 x0 = 0 : 0.01 : limit(2); subplot(1,2,1)plot(x0, f(x0), 'b-', x, f(x), 'ro');title('状态位置变化')subplot(1,2,2);plot(record);title('最优适应度进化过程') pause(0.01) iter = iter+1;
end
x0 = 0 : 0.01 : limit(2);
figure(4);plot(x0, f(x0), 'b-', x, f(x), 'ro');title('最终状态位置')
disp(['最大值:',num2str(fym)]);
disp(['变量取值:',num2str(ym)]);
三、结果展示
基于matlab的粒子群算法实现相关推荐
- 粒子群算法中的罚函数matlab,第18章基于罚函数的粒子群算法的函数寻优范例.ppt...
第十八章 MATLAB优化算法案例分析与应用 第18章 基于罚函数的粒子群算法的函数寻优 第十八章 MATLAB优化算法案例分析与应用 18.1 粒子群算法概述 自20世纪50年代中期创立了仿生学,许 ...
- 【MATLAB第6期】基于MATLAB的粒子群及若干改进的粒子群算法原理介绍 持续更新
一.经典粒子群PSO算法 1 思想来源 粒子群优化(Particle Swarm Optimization,PSO) 作为进化计算的一个分支,是由 Eberhart 和 Kennedy 于 1995 ...
- 【数据聚类】基于改进的粒子群算法优化K-means算法实现数据分类含Matlab源码
1 简介 针对传统的K-means算法对初始聚类中心的选取敏感,容易收敛到局部最优的缺点,提出一种基于改进粒子群优化算法(PSO)的K-means优化聚类算法.该算法利用PSO算法强大的全局搜索能力对 ...
- 基于模拟退火的粒子群优化算法(Matlab实现)
目录 混合粒子群算法 算法步骤 算法的Matlab实现 示例程序 参考文献 混合粒子群算法 混合粒子群算法是指借鉴其它一些智能优化算法的思想而形成的粒子群算法.除了粒子群算法外,还有遗传算法.模拟退火 ...
- 【聚类算法】基于matlab改进的粒子群算法优化K-means算法【含Matlab源码 1946期】
⛄一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[聚类算法]基于matlab改进的粒子群算法优化K-means算法[含Matlab源码 1946期] 点击上面蓝色字体,直接付费下载,即可 ...
- 非线性方程的粒子群算法matlab,求解非线性方程组的量子行为粒子群算法
好文网为大家准备了关于求解非线性方程组的量子行为粒子群算法的文章,好文网里面收集了五十多篇关于好求解非线性方程组的量子行为粒子群算法好文,希望可以帮助大家.更多关于求解非线性方程组的量子行为粒子群算法 ...
- matlab优化算法案例分析与应用_最优化计算与matlab实现(18)——粒子群优化算法——权重改进的粒子群算法...
参考资料 <精通MATLAB最优化计算(第二版)> 编程工具 Matlab 2019a 目录 石中居士:最优化计算与Matlab实现--目录zhuanlan.zhihu.com 权重改进 ...
- matlab nan变成0_最优化计算与matlab实现(17)——粒子群优化算法——带压缩因子的粒子群算法...
参考资料 <精通MATLAB最优化计算(第二版)> 编程工具 Matlab 2019a 目录 石中居士:最优化计算与Matlab实现--目录zhuanlan.zhihu.com 带压缩因 ...
- 基于耗散结构的粒子群优化算法
粒子群优化算法可以看作是一个模拟的自组织系统,在初期,通常群体为混沌无序的混乱状态,远离平衡态."认知"部分代表着对个体本身的历史成功经验的依赖,而"社会"部分 ...
最新文章
- 强制退出WinForm程序之Application.Exit和Environment.Eixt
- Caused by: org.xml.sax.SAXParseException: 不允许有匹配 [xX][mM][lL] 的处理指令目标。
- 管理敏捷需求,进行需求协作
- HDU 2189 悼念512汶川大地震遇难同胞——来生一起走
- NSStirng、NSArray、以及枚举(Method小集合)
- 周志华《机器学习》读书笔记(一)
- .NET Core之只是多看了你一眼
- 普通大学毕业后干啥_一名女孩从大学毕业后在机械行业干了十年,背后经历让人辛酸……...
- 男人在最穷、最落魄,事业低谷期的时候最需要的是什么?
- HBase的RowKey设计
- LA 4794 - Sharing Chocolate dp
- Atitit 提升记忆效率 有损压缩原理总结 目录 1. 常见方法	1 1.1. 抽象化提升一层 概念化	1 1.2. 骨架 ,目录化 大纲化 归纳整理	1 1.3. 提取关键词 ,摘要 ,
- 【文件上传下载】各种类型文件对应的content-type的值
- 谷歌浏览器一直显示弹框登陆代理解决方法
- 教你如何用Three.js创造一个三维太阳系
- 商旅信用卡(多重继承)
- 网上支付流程(大致)
- 今天开机发现,在光标左边多了一个长方形的带有箭头的,怎么去掉?
- 图片如何转换成PDF格式?教你一招快速转换
- 一个悲观主义者的积极思考——职业篇[待续2021/06/27]