粒子群(PSO)求方程最优解
PSO
PSO类似于雷达扫描,每一个粒子就像觅食的狗一样,闻到了100米范围内有食物,但是却并不知道食物具体在那里。这个时候就需要找一群狗来共同寻找食物,这个群体的数量就是粒子群的粒子个数。
扩大这个范围,当食物在天上时,狗的二维探测能力就无法满足,这时粒子就变成鸟,仍然在给定的范围内寻找食物。一般来说,粒子数量越大越容易找到食物(相对最优解),但是过大的粒子个数会消耗巨大的资源,我们需要根据具体问题,分析得到最优种群个数。
解方程
本文用解方程最优解的形式来展示粒子群收缩求最优解的过程
解一个大家都认识的方程:
利用ezplot函数画出粒子不断在一维函数图像上收敛的过程。
f(x)=x*sin(x)*cos(x)
模型的参数设置
//模型的参数设置
N = 70; // 初始种群个数
d = 1; // 空间维数
ger = 100; // 迭代次数
limit = [0, 20]; // 设置位置参数限制
vlimit = [-1, 1]; //设置速度限制
w = 0.6; //惯性权重
c1 = 0.4; //自我学习因子
c2 = 0.45; //群体学习因子
随机生成粒子的位置
x = limit(i, 1) + (limit(i, 2) - limit(i, 1)) * rand(N, d);
代入方程算出粒子当前的适应度并记录,当迭代ger次后,即可得到粒子迭代100次的最佳适应度,并求出x。
[fym, nmax] = max(fxm); ym = xm(nmax, :);
对超出边界值的速度进行限制。此处因为是一维的,只要把可能超过边界的速度值用边界值代替就行了。代替的方法就是赋值,怎么赋值,方法有很多。
vlimit = [-1, 1];
完整代码
f= @(x)x .* sin(x) .* cos( x); % 函数表达式
figure(1);
ezplot(f,[0,0.001,25]);
N = 70; % 初始种群个数
d = 1; % 空间维数
ger = 100; % 迭代次数
limit = [0, 20]; % 设置位置参数限制
vlimit = [-1, 1]; % 设置速度限制
w = 0.6; % 惯性权重
c1 = 0.4; % 自我学习因子
c2 = 0.45; % 群体学习因子
for i = 1:dx = limit(i, 1) + (limit(i, 2) - limit(i, 1)) * rand(N, d);%初始种群的位置
end
v = rand(N, d); % 初始种群的速度
xm = x; % 每个个体的历史最佳位置
ym = zeros(1, d); % 种群的历史最佳位置
fxm = zeros(N, 1); % 每个个体的历史最佳适应度
fym = -inf; % 种群历史最佳适应度
hold on
plot(xm, f(xm), 'ro');title('初始状态');
figure(2)
%% 群体更新
iter = 1;
record = zeros(ger, 1);
while iter <= gerfx = f(x) ; % 个体当前适应度 for i = 1:N if fxm(i) < fx(i)fxm(i) = fx(i); % 更新个体历史最佳适应度xm(i,:) = x(i,:); % 更新个体历史最佳位置end end
if fym < max(fxm)[fym, nmax] = max(fxm); % 如果说粒子小于我们开始给定的范围,更新位置ym = xm(nmax, :); % 存储endv = v * w + c1 * rand * (xm - x) + c2 * rand * (repmat(ym, N, 1) - x);% 复制ym矩阵% 边界速度处理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 : 20;plot(x0, f(x0), 'b-', x, f(x), 'ro');title('状态位置变化')pause(0.1)iter = iter+1;
end
figure(3);plot(record);title('收敛过程')
x0 = 0 : 0.01 : 20;
figure(4);plot(x0, f(x0), 'b-', x, f(x), 'ro');title('最终状态位置')
disp(['最大值:',num2str(fym)]);
disp(['变量取值:',num2str(ym)]);
结果如图所示:
收敛结果
最大值:9.8207
变量取值:19.6477
粒子群(PSO)求方程最优解相关推荐
- 【微电网优化】基于matlab粒子群算法求解热电联供型微电网经济运行优化问题【含Matlab源码 1696期】
一.多目标粒子群算法求解电联供型微电网经济运行优化简介 0 引言 热电联供 (combined heat and power, CHP) 系统建立在能源梯级利用的概念基础上, 统一解决了电能和热能的供 ...
- 【微电网优化】基于粒子群算法求解热电联供型微电网经济运行优化问题含Matlab源码
1 简介 面对全球环境污染和能源危机的双重压力,世界各国将焦点转向太阳能.风能等清洁可再生能源.微电网是组织和利用可再生能源发电的重要途径之一.本文以微电网的能量优化调度为研究对象,建立了微电网能量优 ...
- 粒子群算法求函数极值
粒子群算法是群智能算法中的一种,除此之外还有其他的群智能算法,如蚁群算法.猴群算法.鱼群算法等等.本文是关于粒子群算法的.所有的群智能算法都是通过模拟自然界中的生物群体的行为来解决问题的一种思想,同遗 ...
- PSO 粒子群优化算法 大整理
一.粒子群算法的概念 粒子群优化算法(PSO:Particle swarm optimization) 是一种进化计算技术(evolutionary computation).源于对鸟群捕食的行为 ...
- 【控制】粒子群算法(PSO)优化滑模控制器参数
PSO优化滑模控制器参数 PSO优化滑模控制器参数 1.粒子群算法 1.1粒子群算法原理 1.2粒子群算法求函数最值 2.滑模变结构控制 2.1被控对象 2.2滑模控制器设计 2.3实验仿真 3.粒子 ...
- 粒子群算法 PSO(Particle Swarm Optimization)——原理及实现
文章目录 1. 粒子群算法的概念 2. 粒子群算法分析 3. PSO算法的流程和伪代码 4. PSO算法举例 5. PSO算法的matlab实现 1. 粒子群算法的概念 粒子群优化算法(PSO:Par ...
- 【PSO三维路径规划】基于matlab粒子群算法无人机三维路径规划【含Matlab源码 192期】
⛄一.无人机简介 无人机的航迹规划是指在综合考虑无人机飞行油耗.威胁.飞行区域以及自身物理条件限制等因素的前提下, 为飞行器在飞行区域内规划出从初始点到目标点最优或者满意的飞行航迹, 其本质是一个多约 ...
- 【PSO三维路径规划】基于matlab粒子群算法无人机山地三维路径规划【含Matlab源码 1831期】
⛄一.无人机简介 无人机的航迹规划是指在综合考虑无人机飞行油耗.威胁.飞行区域以及自身物理条件限制等因素的前提下, 为飞行器在飞行区域内规划出从初始点到目标点最优或者满意的飞行航迹, 其本质是一个多约 ...
- 粒子群算法(PSO) 介绍
算法理解 粒子群算法,又叫鸟群算法,可见是受鸟群捕食行为的启发.它属于遗传算法.群智算法.粒子群算法关注于粒子的两个属性:位置和速度.每个粒子在空间中单独搜寻,它们记得自己找到的过最优解,也知道整个粒 ...
最新文章
- 60秒,我们可以干什么?
- 七天入门linux,RHCE认证学习笔记-第七天
- 正则表达式的比较JDK1.4 vs jakarta
- SQL SERVER 通用分页存储过程
- 利用software center在线更新windows 10 1909失败
- 深度学习(21)神经网络与全连接层四: 输出方式
- DirectSound 混音的实现
- 基于C++实现五子棋AI算法思想
- 如何科学的使用华为云
- 飞机上一旅客突然收到生日蛋糕,是个小惊喜
- 简单的springBoot集成jedis
- html中楷书的格式,中国书法的书写格式
- 迈微科讯 | 最新科技发展资讯
- android为什么会用流量,手机流量为什么会偷跑?
- 【挖矿程式】oCam 萤幕录影软体竟然藏有挖矿程式 (BRTSvc)(转)
- vue3子组件给父组件传参
- C++中的var类型
- com.ctc.wstx.exc.WstxUnexpectedCharException:Unexpected错误解决
- fread()和fwrite()函数分析
- C++ typedef用法小结(挺好)