【问题标题】:dynamic objective function in PSO algorithmPSO算法中的动态目标函数
【发布时间】:2015-10-27 11:02:12
【问题描述】:

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

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

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

【问题讨论】:

    标签: artificial-intelligence particle-swarm


    【解决方案1】:

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

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

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

    现在,让 f(...) 成为一个“动态”函数应该没有问题,例如,从参数 (particleCurrentPos) 到玩家的距离。问题在于,如果玩家不断移动,particleBestPosswarmBestPos 位置几乎没有价值。

    对此的一种解决方案是保留每个粒子的历史记录,例如 n 个最近的位置。在上面的粒子/群最佳更新步骤中,对于每个粒子:滚动遍历粒子的历史(n 个最新位置),并让 particleBestPos 成为与 players 相关的那些中最好的此时的当前位置(和 swarmBestPos 类似)。

    在这一步之后,粒子速度(和位置)像往常一样更新,但要保证认知部分(权重对 particleBestPos)和社会部分(权重对 swarmBestPos) 在某种程度上是最新的 wrt球员的当前位置。每个粒子的 n 个最新位置的历史将作为粒子的记忆:

    “从我和我的群体的 n 个位置的历史来看:我自己和我的群体的哪个历史位置对玩家当前的位置最有利"

    您允许的历史记忆越长,蜂群就越能更好地(或更危险:))跟踪移动的玩家。


    补充:由于您的目标函数(对粒子进行评估和评分)非常简单(当前到玩家的距离)并且最优解(位置)始终是已知的(x* = 玩家位置),因此 PSO 在在这种情况下,您只需将敌人建模为 boid 就可以了,请参阅 Boids model

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

    请注意,Boids 模型不是优化模型,而只是一种模拟群体行为的方法,其灵感来自于成群结队的鸟类。在你的情况下,我相信它应该足够了。附加对齐规则上的权重大小也是直接控制敌人跟踪玩家的好方法。

    【讨论】:

    • 感谢您的回复,到目前为止,我正在做一个不同的项目,但是当我回到这个项目时,我会告诉您这是否适用于该框架.
    猜你喜欢
    • 2017-04-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-28
    • 2016-01-24
    • 1970-01-01
    • 1970-01-01
    • 2023-02-10
    相关资源
    最近更新 更多