多智能体粒子群算法怎么理解?手算一次速度与位置更新

用确定输入核对粒子惯性、个体最优和群体最优三部分。提供演示输入、可核对结果和适用限制。

粒子群优化中的粒子是一份候选解,用自身历史最优和群体信息调整搜索位置。它不自动等于多智能体强化学习。先把一次更新算正确,比直接修改一堆超参数更有用。下面采用一维自造输入,逐项核对速度和位置。

写清楚同一时刻的数据

标准全局最佳形式可写为 v新=w·v旧+c1·r1·(pbest−x)+c2·r2·(gbest−x),再用 x新=x+v新 更新位置。PySwarms 后端文档中的速度与位置操作分开,实际拓扑和边界处理仍应查对应实现。下面固定随机系数用于算术检查,而不是按真实优化迭代重新随机采样。

多智能体粒子群算法怎么理解?手算一次速度与位置更新

输入 值 作用
当前位置 x 4 当前候选解
旧速度 v 1 之前的运动量
个体最优 pbest 2 该粒子历史上最好的位置
群体最优 gbest 1 群体当前共享的最好位置
w/c1/c2 0.5 / 1.5 / 1.5 三个项的系数
r1/r2 0.2 / 0.4 本次固定的随机系数

惯性项为 0.5,个体项为 -0.6,群体项为 -1.8,合计新速度 -1.9;新位置为 2.1。不能先把 x 更新了,再拿新 x 去算另外两个项,否则已不是同一步公式。

运行一步数值核对

保存 particle_step.py,用 Python 3 运行 python particle_step.py。数学演示只依赖标准库,不需要安装 PySwarms。

from math import isclose
x, velocity = 4.0, 1.0
personal, global_best = 2.0, 1.0
w, c1, c2, r1, r2 = 0.5, 1.5, 1.5, 0.2, 0.4
parts = [w * velocity, c1 * r1 * (personal - x), c2 * r2 * (global_best - x)]
new_velocity = sum(parts)
new_position = x + new_velocity
print([round(v, 3) for v in parts], round(new_velocity, 3), round(new_position, 3))
assert isclose(new_velocity, -1.9) and isclose(new_position, 2.1)
objective = lambda z: (z - 1.0) ** 2
print("cost before/after:", objective(x), objective(new_position))

应得到速度 -1.9、位置 2.1。演示目标 (x−1)² 的成本从 9 降到约 1.21,这只说明这一步朝更低成本移动,不证明以后每一步成本都下降。粒子算法允许位置走坏,历史最优只有在新成本确实更小时才更新。

扩展成迭代时要检查什么

完整流程是初始化各粒子位置与速度、计算成本、更新各自最优与群体最优、采样随机系数、更新速度位置,再重新评估。保存最佳解的副本,避免位置数组原地变化把历史最优一起改掉。多维任务需要逐维向量运算,并保证随机系数的维度符合算法约定。

越界时如何反弹、截断或重新采样,会改变实际搜索行为;任务分配等离散问题也不能直接把连续位置当执行者编号。参数和拓扑需要在实际目标上评估。本例没有完整群体迭代、约束优化或收敛测试,下一步可以用一个已知最小值的二维函数核对完整循环。

资料与核对依据

Ai菜鸟网。发布者:AI小管家,转载请注明出处:https://www.alyyhw.com/33003.html

赞 (0)
AI小管家的头像AI小管家
多智能体遗传算法怎么做任务分配?用三件任务核对编码与最优对照
上一篇 14小时前
蚁群算法里的多智能体怎么协作?算出选路概率与信息素更新
下一篇 14小时前

相关推荐

联系我们

联系我们

1

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信
关注微信
分享本页
返回顶部