PSO 粒子群算法
注:本人参考http://www.cnblogs.com/tiandsp/category/348031.html来实现的
算法步骤:
1.首先确定粒子个数与迭代次数。
2.对每个粒子随机初始化位置与速度。
3.采用如下公式更新每个粒子的位置与速度。
Px=Px+Pv*t; %位置更新公式
Pv=Pv+(c1*rand*(Gx-Px))+(c2*rand*(PBx-Px)); %速度更新公式
这里c1和c2是加速因子,和梯度下降算法那里的加速因子我感觉很类似。
Gx是粒子群中最佳粒子的位置,PBx为当前粒子最佳位置。
4.每次迭代,首先检查新粒子适应度是否高于原最优适应度,如果高于则对自己的位置和适应度进行更新。然后再判断此粒子适应度是否高于全局最优粒子,如果高于则更新全局最优粒子适应度和位置。
clc;
clear all;
close all;
%%
[x,y] = meshgrid(-100:100,-100:100);
sigma = 50;
img = (1/(2*pi*sigma^2))*exp(-(x.^2+y.^2)/(2*sigma^2));
mesh(img)
hold on
%% 初始化粒子群,定义结构体
%结构体中八个元素,分别是粒子坐标,粒子速度,粒子适应度,
% 粒子最佳适应度,粒子最佳坐标
n = 10; %初始例子的个数
pos = struct([]);
for i = 1:n
pos(i).x = -100 + 200*rand;
pos(i).y = -100 + 200*rand;
pos(i).vx = -1 + 2*rand;
pos(i).vy = -1 + 2*rand;
pos(i).fit = 0;
pos(i).bestfit = 0;
pos(i).bestx = pos(i).x;
pos(i).besty = pos(i).y;
end
pos_best = pos(1);
k = 100;
for i = 1:k
plot3(pos_best.x + 100,pos_best.y + 100,pos_best.fit,'k.','markersize',40);
for j = 1:n
[pos(j),pos_best] = update_pos(pos(j),pos_best);
end
drawnow
end
function [pos,pos_best] = update_pos(pos,pos_best)
pos.x = pos.x + pos.vx;
pos.y = pos.y + pos.vy;
pos.fit = compute_fit(pos);
%Pv=Pv+(c1*rand*(pos_best(群体).x-pos.x))+(c2*rand*(pos.bestx-pos.x))
%这里c1,c2为加速因子
%Gx为具有最佳适应度粒子的位置
%PBx为当前粒子的最佳位置
c1 = 1;
c2 = 1;
pos.vx = pos.vx + (c1*rand*(pos_best.x -pos.x)) + (c2*rand*(pos.bestx-pos.x));
pos.vy = pos.vy + (c1*rand*(pos_best.y -pos.y)) + (c2*rand*(pos.besty-pos.y));
if pos.fit > pos.bestfit
pos.bestfit = pos.fit;
pos.bestx = pos.x;
pos.besty = pos.y;
if pos_best.fit < pos.bestfit
pos_best.fit = pos.bestfit;
pos_best.x = pos.bestx ;
pos_best.y = pos.besty ;
end
end
end
function pos_fit = compute_fit(pos)
x = pos.x;
y = pos.y;
sigma = 50;
if x <-100 || x > 100 || y <-100 || y >100
pos_fit = 0;
else
pos_fit = (1/(2*pi*sigma^2))*exp(-(x.^2+y.^2)/(2*sigma^2));
end
PSO 粒子群算法的更多相关文章
- 算法(三)粒子群算法PSO的介绍
一.引言 在讲算法之前,先看两个例子: 例子一:背包问题,一个书包,一堆物品,每个物品都有自己的价值和体积,装满书包,使得装的物品价值最大. 例子二:投资问题,n个项目,第i个项目投资为ci 收益为p ...
- C语言实现粒子群算法(PSO)二
上一回说了基本粒子群算法的实现,并且给出了C语言代码.这一篇主要讲解影响粒子群算法的一个重要参数---w.我们已经说过粒子群算法的核心的两个公式为: Vid(k+1)=w*Vid(k)+c1*r1*( ...
- C语言实现粒子群算法(PSO)一
最近在温习C语言,看的书是<C primer Plus>,忽然想起来以前在参加数学建模的时候,用过的一些智能算法,比如遗传算法.粒子群算法.蚁群算法等等.当时是使用MATLAB来实现的,而 ...
- 粒子群算法(PSO)算法解析(简略版)
粒子群算法(PSO) 1.粒子群算法(PSO)是一种基于群体的随机优化技术: 初始化为一组随机解,通过迭代搜寻最优解. PSO算法流程如图所示(此图是从PPT做好,复制过来的,有些模糊) 2.PSO模 ...
- 粒子群算法(PSO)
这几天看书的时候看到一个算法,叫粒子群算法,这个算法挺有意思的,下面说说我个人的理解: 粒子群算法(PSO)是一种进化算法,是一种求得近似最优解的算法,这种算法的时间复杂度可能会达到O(n!),得到的 ...
- 【比较】粒子群算法PSO 和 遗传算法GA 的相同点和不同点
目录 PSO和GA的相同点 PSO和GA不同点 粒子群算法(PSO)和遗传算法(GA)都是优化算法,都力图在自然特性的基础上模拟个体种群的适应性,它们都采用一定的变换规则通过搜索空间求解. PSO和G ...
- 粒子群算法 Particle Swarm Optimization, PSO(转贴收藏)
粒子群算法(1)----粒子群算法简介 http://blog.csdn.net/niuyongjie/article/details/1569671 粒子群算法(2)----标准的粒子群算法 htt ...
- 基于粒子群算法求解求解TSP问题(JAVA)
一.TSP问题 TSP问题(Travelling Salesman Problem)即旅行商问题,又译为旅行推销员问题.货郎担问题,是数学领域中著名问题之一.假设有一个旅行商人要拜访n个城市,他必须选 ...
- 【智能算法】粒子群算法(Particle Swarm Optimization)超详细解析+入门代码实例讲解
喜欢的话可以扫码关注我们的公众号哦,更多精彩尽在微信公众号[程序猿声] 01 算法起源 粒子群优化算法(PSO)是一种进化计算技术(evolutionary computation),1995 年由E ...
随机推荐
- HarmonyOS Java UI之DependentLayout布局示例
DependentLayout简介 DependentLayout意为相对位置布局,与DirectionalLayout相比较有更多的排布方式,每个组件可以指定相对于其他同级组件的位置,也可以指定相对 ...
- yii2.0 ActiveForm 单选框与复选框使用
yii2.0 中的ActiveForm 复选框的使用 默认的复选框选项为纵向的<?= $form->field($model, 'line')->checkboxList(Pictu ...
- centos克隆虚拟机
首先我们把所要克隆的虚拟机关机,然后在所要克隆的虚拟机上右键,选择管理,选择克隆,出现如下界面: 点击下一步,选择虚拟机的当前状态,继续点击下一步 接着选择创建完整克隆,选择这个时,表明克隆出来的这个 ...
- P5665 划分
Part 1 先来看一个错误的贪心做法:假设当前结尾的一段和为 \(a\),等待加入结尾的一段和为 \(b\),现在要处理新进来的数 \(c\). \(a\leq b\),将 \(a\) 算入答案,将 ...
- 2019-2020 ICPC Asia Hong Kong Regional Contest J. Junior Mathematician 题解(数位dp)
题目链接 题目大意 要你在[l,r]中找到有多少个数满足\(x\equiv f(x)(mod\; m)\) \(f(x)=\sum_{i=1}^{k-1} \sum_{j=i+1}^{k}d(x,i) ...
- 程序员说:为什么喜欢大量使用 if……else if替代switch?
请用5秒钟的时间查看下面的代码是否存在bug. OK,熟练的程序猿应该已经发现Bug所在了,在第13行下面我没有添加关键字break; 这就导致这段代码的行为逻辑与我的设计初衷不符了. 缺点一. 语法 ...
- 适合 JS 新手学习的开源项目——在 GitHub 学编程
作者:HelloGitHub-小鱼干 这里是 HelloGitHub 的<GitHub 上适合新手的开源项目>系列的最后一篇,系列文章: C++ 篇 Python 篇 Go 篇 Java ...
- 20190627_解决ADB的device offline问题的两种方法
故障现象: error: device offline 故障解决: 第一种方法: C:\Users\WXY\Desktop\XY\adb>adb nodaemon server cannot b ...
- 一个使用xlwings操作excel数据优化60倍处理效率的案例
☞ ░ 前往老猿Python博文目录 ░ 一.引言 老猿在将自己的博文数据(包括url地址.标题和阅读数量)从博客中获取后,使用xlwings保存到excel对象时发现,不同的处理方法性能相差非常大. ...
- 第3.10节 Python强大的字符串格式化新功能:使用format字符串格式化
一. 引言 前面两节介绍的字符串格式化方法,都有其本身对应的缺陷,老猿不建议大家使用,之所以详细介绍主要是考虑历史代码的兼容性,方便大家理解前人留下的代码.老猿推荐大家新编码时使用format方 ...