高级人工智能之群体智能:粒子群算法

1.粒子群算法

粒子群优化算法(Particle Swarm Optimization, PSO)是一种基于群体协作和信息共享的优化技术。它由Kennedy和Eberhart于1995年提出,灵感来源于鸟群和鱼群的社会行为。PSO是解决连续空间优化问题的有效方法,特别适合于多峰和高维问题。以下是PSO的基本思想和工作原理:

1.1基本思想

1.灵感来源:PSO受到鸟群觅食行为的启发。在寻找食物的过程中,每只鸟(即“粒子”)不仅依赖于自己的经验来判断方向,还会考虑其他鸟的经验。

2.群体智能:PSO基于群体智能的概念,即群体中的个体通过简单规则和相互合作,展现出复杂的全局行为。

3.信息共享:粒子之间通过共享信息,即每个粒子的历史最优位置和全局最优位置,以指导搜索过程。

1.2工作原理

1.初始化:在搜索空间随机初始化一群粒子。每个粒子有一个位置(代表候选解)和速度。

2.评估:根据目标函数评估每个粒子的位置。

3.个体最优和全局最优

  • 每个粒子都跟踪其遇到的最优位置(个体最优)。
  • 整个粒子群也跟踪所有粒子中遇到的最优位置(全局最优)。

4.速度和位置更新

  • 粒子的速度更新考虑到其当前速度、到个体最优位置的方向和到全局最优位置的方向。
  • 粒子的位置通过当前位置和更新后的速度来确定。

5.迭代:重复评估、更新个体最优、更新全局最优、更新速度和位置的过程,直至满足终止条件(如达到最大迭代次数或找到足够好的解)。

1.3特点

  • 简单高效:PSO算法结构简单,容易实现,计算效率高。
  • 无需梯度信息:与基于梯度的优化方法不同,PSO不需要目标函数的梯度信息,适用于不可导或难以求导的问题。
  • 灵活性:PSO参数(如粒子数、惯性权重、学习因子等)可以根据具体问题调整,增强算法的适应性和鲁棒性。

1.4应用

PSO在多种领域都有应用,如函数优化、神经网络训练、控制系统设计、图像处理等。

1.5限制

  • 局部最优陷阱:PSO可能会陷入局部最优,特别是在处理复杂的多峰优化问题时。
  • 参数调整:算法性能在很大程度上依赖于参数设置,而参数的选择往往缺乏理论指导,需要通过实验来调整。

2 公式化蚁群算法

2.1粒子速度更新规则:

粒子 i i i 在维度 d d d 上的速度 v i d ( t + 1 ) v_{id}(t+1) vid(t+1)在下一个时间步的更新规则是:

v i d ( t + 1 ) = w ⋅ v i d ( t ) + c 1 ⋅ r 1 i d ( t ) ⋅ ( p i d ( t ) − x i d ( t ) ) + c 2 ⋅ r 2 i d ( t ) ⋅ ( g d ( t ) − x i d ( t ) ) v_{id}(t+1) = w \cdot v_{id}(t) + c_1 \cdot r_{1id}(t) \cdot (p_{id}(t) - x_{id}(t)) + c_2 \cdot r_{2id}(t) \cdot (g_{d}(t) - x_{id}(t)) vid(t+1)=wvid(t)+c1r1id(t)(pid(t)xid(t))+c2r2id(t)(gd(t)xid(t))

其中:

  • v i d ( t ) v_{id}(t) vid(t) 是在时间步 t t t 时粒子 i i i 在维度 d d d 上的速度。
  • w w w 是惯性权重,控制粒子的速度。
  • c 1 c_1 c1 c 2 c_2 c2 是加速常数,控制粒子向个体最佳位置 p i d ( t ) p_{id}(t) pid(t) 和全局最佳位置 g d ( t ) g_{d}(t) gd(t) 移动的程度。
  • r 1 i d ( t ) r_{1id}(t) r1id(t) r 2 i d ( t ) r_{2id}(t) r2id(t) 是区间 [0,1] 内的随机数。
  • x i d ( t ) x_{id}(t) xid(t) 是在时间步 t t t 时粒子 i i i 在维度 d d d 上的位置。

2.2 粒子位置更新规则:

粒子 i i i 在维度 d d d 上的位置 x i d ( t + 1 ) x_{id}(t+1) xid(t+1)在下一个时间步的更新规则是:

x i d ( t + 1 ) = x i d ( t ) + v i d ( t + 1 ) x_{id}(t+1) = x_{id}(t) + v_{id}(t+1) xid(t+1)=xid(t)+vid(t+1)

其中:

  • x i d ( t ) x_{id}(t) xid(t) v i d ( t + 1 ) v_{id}(t+1) vid(t+1) 分别是在时间步 t t t 时粒子 i i i 在维度 d d d 上的位置和新计算出的速度。

通过这些规则,粒子会在解空间中探索,同时考虑到自身历史最佳位置和整个群体的全局最佳位置。

import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3Dclass Particle:# 粒子类定义def __init__(self, bounds):self.position = np.random.uniform(bounds[:, 0], bounds[:, 1], size=bounds.shape[0])  # 粒子初始位置self.velocity = np.random.uniform(-1, 1, size=bounds.shape[0])  # 粒子初始速度self.best_position = np.copy(self.position)  # 粒子最佳位置self.best_value = float('inf')  # 粒子的最佳值class ParticleSwarmOptimizer:# 粒子群优化器类定义def __init__(self, function, bounds, num_particles, num_iterations, w=0.5, c1=1, c2=1):self.function = function  # 优化函数self.bounds = bounds  # 搜索空间边界self.num_particles = num_particles  # 粒子数self.num_iterations = num_iterations  # 迭代次数self.w = w  # 惯性权重self.c1 = c1  # 个体学习因子self.c2 = c2  # 社会学习因子self.particles = [Particle(bounds) for _ in range(num_particles)]  # 初始化粒子群self.global_best_position = None  # 全局最佳位置self.global_best_value = float('inf')  # 全局最佳值def optimize(self):# 优化过程for iteration in range(self.num_iterations):for particle in self.particles:value = self.function(particle.position)  # 计算当前位置的函数值if value < particle.best_value:  # 更新粒子最佳位置particle.best_position = particle.positionparticle.best_value = valueif value < self.global_best_value:  # 更新全局最佳位置self.global_best_position = particle.positionself.global_best_value = valuefor particle in self.particles:# 更新粒子速度和位置r1, r2 = np.random.random(size=self.bounds.shape[0]), np.random.random(size=self.bounds.shape[0])new_velocity = (self.w * particle.velocity +self.c1 * r1 * (particle.best_position - particle.position) +self.c2 * r2 * (self.global_best_position - particle.position))particle.velocity = new_velocityparticle.position = particle.position + new_velocity# 确保粒子不超出边界particle.position = np.maximum(particle.position, self.bounds[:, 0])particle.position = np.minimum(particle.position, self.bounds[:, 1])if iteration % 10 == 0:  # 每10次迭代绘制一次self.plot_particles(iteration)return self.global_best_position, self.global_best_valuedef plot_particles(self, iteration):# 绘制粒子和函数图像fig = plt.figure(figsize=(10, 7))ax = fig.add_subplot(111, projection='3d')# 创建用于绘制函数的网格x = np.linspace(self.bounds[0, 0], self.bounds[0, 1], 30)y = np.linspace(self.bounds[1, 0], self.bounds[1, 1], 30)x, y = np.meshgrid(x, y)z = self.function(np.array([x, y, np.zeros_like(x)]))  # 计算函数值# 绘制函数图像ax.plot_surface(x, y, z, alpha=0.5, cmap='viridis', edgecolor='none')# 绘制粒子xs, ys, zs = np.array([p.position for p in self.particles]).Tax.scatter(xs, ys, zs, color='r')ax.set_title(f'Iteration {iteration}')ax.set_xlabel('X axis')ax.set_ylabel('Y axis')ax.set_zlabel('Z axis')plt.show()# 示例:优化的函数
def example_function(x):# 三维函数定义return np.sin(x[0]) * np.cos(x[1]) + np.sin(x[1]) * np.cos(x[2])# 定义搜索空间
bounds = np.array([[-10, 10], [-10, 10], [-10, 10]])# 实例化并运行PSO优化器
pso = ParticleSwarmOptimizer(example_function, bounds, num_particles=30, num_iterations=100)
best_position, best_value = pso.optimize()
print("Best Position:", best_position)
print("Best Value:", best_value)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/498457.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

机器人产业发展情况

来源&#xff1a; 战略前沿技术 全球机器人产业发展现状 一、机器人概述 1.机器人概念 采用国际机器人联合会对机器人的概念&#xff0c;即&#xff1a;机器人就是一种半自主或全自主工作的机器&#xff0c;能完成有益于人类的工作。 2.机器人分类 机器人包括工业机器人和服务机…

github java开源项目经验_3月份GitHub上最热门的Java开源项目

今天&#xff0c;我们来盘点3月份GitHub上最热门的Java项目的时候了&#xff0c;如果你每月都有关注猿妹发布的排行榜&#xff0c;那么本月的Java项目对你来说一定不陌生&#xff0c;这些都是曾经多次出现在榜单中的项目&#xff1a;1advanced-javahttps://github.com/doocs/ad…

智能传感器深度报告:未来机器感官的百亿美元市场【附下载】

来源&#xff1a;智东西内参 概要&#xff1a;2019年&#xff0c;国内智能传感器市场规模预计将达到137亿美元&#xff0c;本土化率将从2015年的13%提升到27%。 2019年&#xff0c;国内智能传感器市场规模预计将达到137亿美元&#xff0c;本土化率将从2015年的13%提升到27%。 …

科学数字_七年级数学上册:科学记数法、有效数字记住这点中考分可定拿得到...

科学记数法 有效数字【知识导航】定义&#xff1a;把一个大于10的数表示成a的形式&#xff0c;(其中1≤a&#xff1c;10&#xff0c;n是正整数)&#xff0c;此种记法叫做科学记数法。有效数字从一个数的左边第一个非0数起&#xff0c;到末位数字止。所有数字都是这个数的有效数…

python中的set方法_Python中set与frozenset方法和区别详解

set(可变集合)与frozenset(不可变集合)的区别&#xff1a;set无序排序且不重复&#xff0c;是可变的&#xff0c;有add()&#xff0c;remove()等方法。既然是可变的&#xff0c;所以它不存在哈希值。基本功能包括关系测试和消除重复元素. 集合对象还支持union(联合), intersect…

简评亚洲人工智能发展现状:机遇与挑战并存

来源&#xff1a;36氪 概要&#xff1a;人工智能将作为一种基础性的力量&#xff0c;对我们的生活以及生活方式带来极大的改变&#xff0c;甚至是颠覆。 人工智能将作为一种基础性的力量&#xff0c;对我们的生活以及生活方式带来极大的改变&#xff0c;甚至是颠覆。 编者按&am…

c++全局类对象_C++ 类在内存中的存储方式(一)

&#xfeff;说了这么久的 C 终于说到类了&#xff0c;还是从内存出发来讨论一下 C 的类在内存中的存储方式(之前写过一篇内存对齐的文章&#xff0c;类同样在一定程度上遵循内存对齐原则&#xff0c;不过比结构体复杂一下)如有侵权&#xff0c;请联系删除&#xff0c;如有错误…

以人工智能的卖点,华为携Mate 10向苹果发起新一轮攻势

华为于10月16日在德国慕尼黑发布了Mate 10系列手机。 Mate 10系列分为Mate 10、Mate 10 Pro和保时捷设计版&#xff0c;都搭载自家的麒麟970处理器。 来源&#xff1a;腾讯科技、PingWest品玩 Mate 10与Mate 10 Pro的主要区别在于屏幕和指纹识别。 Mate 10采用5.9英寸2560 x 14…

英国再推人工智能报告: 四方面发力打造AI强国

来源&#xff1a;腾讯研究院 概要&#xff1a;放眼全球的人工智能领域&#xff0c;美中英是在此领域表现最为突出的三个国家。英国一直是人工智能的研究学术重阵。 导读 放眼全球的人工智能领域&#xff0c;美中英是在此领域表现最为突出的三个国家。英国一直是人工智能的研究学…

手机h5可以用ifreme_折叠照片特效,用手机修图软件就可以实现

前两天有人问下面这种特效是怎么做的&#xff1a;大健看这种折叠照片要发现其中的规律&#xff1a;一是折叠度为90&#xff0c;每一张折叠照片的角度都是&#xff1b;二是对角线平分两张素材的角度为45。所以我们在后期制作这种折叠照片时一定要考虑好这两个条件&#xff0c;不…

“技术崇拜”与“技术恐惧”都会阻碍 AI 创新,“技术节制”才是正道

来源&#xff1a;36氪 概要&#xff1a;我们需要的是一种能够理解我们不断变化的想法的工具&#xff0c;而不是一个一直试图去模仿我们习惯的工具。 我们需要的是一种能够理解我们不断变化的想法的工具&#xff0c;而不是一个一直试图去模仿我们习惯的工具。 随着我们制造的机…

mysql 本地连接_mysql开启远程连接及本地连接

问题描述在本机windows上连接linux服务器上的mysql报错&#xff1a;hostXXX is not allowed to connect to this mysql server。这个错误是由于mysql server没有开启远程连接权限&#xff0c;所以本机连接不上远程的mysql。解决方法开启mysql 远程连接权限一、开启远程连接首先…

人机智能融合--人工智能的未来发展方向

来源&#xff1a;科学网 概要&#xff1a;在经历了三次起伏&#xff08;即上世纪70年代后期对数学定理证明非万能的清醒、90年代后期对专家系统与五代机的失望、2006年深度学习掀起了新一轮的浪潮&#xff09;&#xff0c;人们狂热的希望逐渐踏实了很多&#xff0c;目光和注意力…

mysql先排序再分组筛选_mysql 怎样先排序再分组

权游游牧族&#xff1a;众所周知&#xff01;一句SqL语句不能先排序再分组。所以这里给出几个案例--表结构--create table shop (id int (10) PRIMARY KEY,shop_name varchar (100),item_name varchar (100),price int (10));insert into shop (id, shop_name, item_name,price…

composer 路径_深入学习Composer原理(三)

本系列第三篇文章&#xff0c;一起了解下PSR规范中的PSR4和PSR0规范首先恭喜大家&#xff0c;包括我自己&#xff0c;坚持到了现在。这篇文章之后&#xff0c;Composer的基础原理就清晰明了咯。也就是说&#xff0c;Composer所利用的正是spl_autoload_register()和PSR4规范&…

科普丨深度学习 vs 概率图模型 vs 逻辑学

来源&#xff1a;人工智能爱好者俱乐部 概要&#xff1a;许多早期的人工智能工作都是关注逻辑、自动定理证明和操纵各种符号。John McCarthy于1959年写的那篇开创性论文取名为《常识编程》也是顺势而为。 今天&#xff0c;我们一起来回顾过去50年人工智能(AI)领域形成的三大范式…

如何查看mysql8.0的默认密码_MySQL8.0安装之后查找默认密码

MySQL8.0和MySQL5.7具有众多不同之处,此处不赘述。这里,只简单讲讲在安装过程中遇到的问题之一和解决办法: MySQL8.0安装完成之后的默认密码是多少?如何修改初始密码? 1 启动MySQL服务 启动MySQL服务的命令: shell> sudo service mysqld start Starting mysqld:[ OK ]…

浅析未来大数据的发展趋势

来源&#xff1a;36大数据 概要&#xff1a;随着我国进入大数据时代&#xff0c;很多人对于大数据的发展趋势还处于懵懂的状态&#xff0c;充分提升大数据的应用对于我国各个行业&#xff0c;都会有非常重要和有效的指导性作用。 随着我国进入大数据时代&#xff0c;很多人对于…

mysql update nowait_MySQL 8.0新特性 -- nowait以及skip locked

如果某行记录被事务锁住了&#xff0c;select ... for update、或select ... for share事务对相同的行加锁的时候必须等待&#xff0c;直到产生阻塞的事务释放锁。为了避免等待事务释放锁定的行&#xff0c;nowait和skip locked选项可以被用于select ... for update或select ..…

微软 CEO 纳德拉访谈:人工智能的大方向与未来是什么?

来源&#xff1a;36氪 概要&#xff1a;我们都对科技的发展抱有乐观的态度&#xff0c;我们坚信&#xff0c;人工智能带来的挑战是让我们和社会定义什么是真正的人类。未来将会是一个人工智能强化和增强人类能力的世界&#xff0c;而不是让人类变得更加无用。 人工智能的未来到…