首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PSO算法中的动态目标函数

PSO算法中的动态目标函数
EN

Stack Overflow用户
提问于 2015-10-27 11:02:12
回答 1查看 280关注 0票数 1

我在人工智能领域做一个类似游戏的项目,在这个项目中,我用粒子群算法为敌人寻找玩家的位置。以下是我的问题:

如何对粒子群算法进行优化,找出一个非静态的、不断变化的目标?

我想在这个游戏的不同级别上实现一些群体智能算法。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-12-06 01:14:40

在粒子群算法中,在更新粒子速度之前(以及之后,在限制速度、位置后),粒子最优位置和群最优位置都被更新。在当前迭代中,对群中每个粒子的目标函数值。让我们分别表示这些位置particleBestPos (对于每个粒子)和swarmBestPos。最后,对于每个粒子,让particleCurrentPos表示当前位置。

对于每一粒子,考虑到f(.)描述的一些静态目标,要尽量减少,床的位置是根据以下情况更新的:

代码语言:javascript
复制
if f(particleCurrentPos) < f(particleBestPos)
    particleCurrentPos <-- particleBestPos
if f(particleCurrentPos) < f(swarmBestPos)
    swarmBestPos <-- particleBestPos

现在,让f(.)是一个“动态”函数,描述从参数(particleCurrentPos)到玩家的距离。问题是,如果玩家不断移动,那么particleBestPos和swarmBestPos位置就没有什么价值了。

解决这一问题的方法之一是保存每个粒子的历史,比如说最近的位置。在上面的粒子/群最优更新步骤中,对于每个粒子:滚动粒子的历史(n最近的位置),让particleBestPos成为此时玩家当前位置的最佳(和swarmBestPos类似)。

在这一步之后,粒子速度(和位置)会像往常一样被更新,但同时保证认知成分(向particleBestPos的权重)和社会成分(相对于swarmBestPos的权重)都是最新的。球员目前的位置。每个粒子的最新位置的历史将作为粒子的记忆:

从我和我的队员们的位置历史来看,哪个历史位置,我自己的,以及我的群体,对于球员目前的位置来说是最有利的

你允许的历史记忆越长,蜂群跟踪移动玩家的效果就越好(或者更危险)。

加法:由于您的目标函数(评估和得分粒子)非常琐碎(当前距离球员的距离),并且最优解(位置)总是已知的(x* = player位置),在这种情况下,也许PSO有点过分,所以您可以简单地将敌人建模为boid,请参阅Boids模型

您可以使用原始的空隙模型,但添加一个额外的(重加权)对齐规则,以转向玩家。

注意,Boids模型并不是和优化模型,而是一种模拟群体行为的方法,因为它受到鸟类的絮凝作用的启发。就你的情况而言,我认为这就足够了。重量的大小对你的额外调整规则也将是一个整洁的方式,以直接控制你的敌人如何跟踪球员。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33366244

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档