我在人工智能领域做一个类似游戏的项目,在这个项目中,我用粒子群算法为敌人寻找玩家的位置。以下是我的问题:
如何对粒子群算法进行优化,找出一个非静态的、不断变化的目标?
我想在这个游戏的不同级别上实现一些群体智能算法。
发布于 2015-12-06 01:14:40
在粒子群算法中,在更新粒子速度之前(以及之后,在限制速度、位置后),粒子最优位置和群最优位置都被更新。在当前迭代中,对群中每个粒子的目标函数值。让我们分别表示这些位置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的权重)都是最新的。球员目前的位置。每个粒子的最新位置的历史将作为粒子的记忆:
从我和我的队员们的位置历史来看,哪个历史位置,我自己的,以及我的群体,对于球员目前的位置来说是最有利的
你允许的历史记忆越长,蜂群跟踪移动玩家的效果就越好(或者更危险)。
加法:由于您的目标函数(评估和得分粒子)非常琐碎(当前距离球员的距离),并且最优解(位置)总是已知的(x* = player位置),在这种情况下,也许PSO有点过分,所以您可以简单地将敌人建模为boid,请参阅Boids模型。
您可以使用原始的空隙模型,但添加一个额外的(重加权)对齐规则,以转向玩家。
注意,Boids模型并不是和优化模型,而是一种模拟群体行为的方法,因为它受到鸟类的絮凝作用的启发。就你的情况而言,我认为这就足够了。重量的大小对你的额外调整规则也将是一个整洁的方式,以直接控制你的敌人如何跟踪球员。
https://stackoverflow.com/questions/33366244
复制相似问题