PSO算法中的动态目标函数

时间:2015-10-27 11:02:13

标签: artificial-intelligence particle-swarm

我正在从事人工智能领域的游戏项目;其中我使用PSO算法为敌人找到玩家的位置。这是我的问题:

如何优化PSO以找到非静态且不断变化的目标?

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

1 个答案:

答案 0 :(得分:2)

在更新粒子速度之前(此后,在限制速度,位置之后),通常在PSO中,粒子最佳位置和群体最佳位置都会更新w.r.t.当前迭代中群中每个粒子的目标函数值。让我们分别表示这些位置 particleBestPos (对于每个粒子)和 swarmBestPos 。最后,对于每个粒子,让 particleCurrentPos 表示当前位置。

对于每个粒子,考虑到f(...)描述的一些静态目标,要最小化,床位置根据以下内容更新:

if f(particleCurrentPos) < f(particleBestPos)
    particleCurrentPos <-- particleBestPos
if f(particleCurrentPos) < f(swarmBestPos)
    swarmBestPos <-- particleBestPos

现在,让f(...)成为一个“动态”函数应该没有问题,比如描述参数( particleCurrentPos )到玩家的距离。问题是,如果玩家不断移动, particleBestPos 以及 swarmBestPos 位置几乎没有价值。

对此的一个解决方案是保留每个粒子的历史记录,比如n个最近的位置。在上面的粒子/群体最佳更新步骤中,对于每个粒子:滚动粒子的历史(最新位置),让 particleBestPos 成为球员'中最好的此时的当前位置(和 swarmBestPos 类似)。

在此步骤之后,粒子速度(和位置)照常更新,但确保认知组件(重量朝向 particleBestPos )和社交组件(重量朝向 swarmBestPos < / em>)有点是最新的球员目前的位置。每个粒子的最新位置的历史将作为粒子的记忆:

“从我和我的群体的n个位置的历史来看:我自己以及我的群体的哪个历史位置对于球员当前的位置是最有利的“

您允许的历史记录越长,群体跟踪移动播放器的效果就越好(或者更危险:)。

补充:由于你的目标函数(评估和评分粒子)非常微不足道(当前到玩家的距离)并且最佳解决方案(位置)总是已知的(x * =玩家位置),或许PSO有点矫枉过正了在这种情况下,您可以将敌人模型化为boids,请参阅Boids model

您可以使用原始空洞模型,但添加额外(重度加权)对齐规则;引导玩家。

请注意,Boids模型不是而不是和优化模型,而只是一种模拟群体行为的方式,受到鸟群的启发。在你的情况下,我认为它应该足够了。额外对齐规则的权重大小也将是一种直接控制敌人跟踪玩家状态的简洁方法。