对于零和游戏的AI,什么是良好的健身功能?

时间:2017-10-22 07:18:51

标签: swift artificial-intelligence evolutionary-algorithm fitness

我正在为一款零和四人棋盘游戏制作AI。它实际上不是零和(4名球员会#34;死亡#34;当他们失去一生时,所以会有一名球员先死,第二,第三和一名幸存的球员。但是,我告诉人工智能,只有幸存才算是赢,其他任何东西都是失败的。经过一番研究,我想我会使用minimax算法和启发式函数。我遇到了这个问题question并且决定和那个问题的OP做同样的事情 - 编写一个进化算法,给我最好的权重。

然而,我的启发式功能与该问题的OP不同。我需要9个砝码并且速度要慢得多,所以我不能让代理人玩1000场比赛(花费太多时间)或用交叉方法训练它们(我如何用9个砝码进行交叉?)。 / p>

所以我决定想出自己的方法来确定健康和繁殖。这个问题只涉及健身功能。

以下是我对此的尝试。

第一次尝试

对于随机生成的50个代理群体中的每个代理A,从群体中选择3个代理(具有替换但与A本身不同的代理)并让4个代理播放A是第一个玩家的游戏。选择另一个3并玩A是第二个玩家的游戏,依此类推。对于这4个游戏中的每一个,如果A首先死亡,它的适应性不会改变。如果A死亡第二,它的适应度增加1.如果它死亡第三,它的适应度增加2.如果它存活,它的适应性增加3.因此,我得出结论,最高健身可以得到是12(幸存/赢得所有4场比赛 - > 3 + 3 + 3 + 3)。

我跑了7代,从第一代开始,最高适应度高达10。我计算了前10名特工的平均适应度,但平均值并没有增加一点。 7代。它甚至有所下降。

我认为这不起作用的原因是因为必须有一些幸运的代理人并且让一些表现不佳的代理人成为其对手。

第二次尝试

游戏设置与我的第一次尝试相同,但不是测量每个游戏的结果,而是决定测量该代理人在死亡之前做了多少次移动。

经过7代之后,前10名的平均健康状况确实增加了,但仍然没有像我想的那样增加。

我认为这次失败的原因是游戏是有限的,所以在你死之前你可以做出有限数量的动作,而表现最好的特工几乎达到了这个极限。没有增长空间。另一个原因是幸存的玩家的健康状况和死亡的玩家的健康状况差别很小。

我想要什么

根据我对EA的理解(如果我错了,请纠正我),平均适应度应该增加,表现最佳的个人健康状况不应该随着时间的推移而降低。

我的两次尝试都失败了。由于对手是随机选择的,第一代中表现最好的代理可能会在下一代中获得更强的对手,因此其适应性会下降。

注释

在我的尝试中,代理人每代玩200场比赛,每一代最多需要3个小时,所以我不想让他们玩太多游戏。

如何编写这样的健身函数?

1 个答案:

答案 0 :(得分:4)

七代似乎不足以获得有用的结果。特别是对于一款游戏,我希望200多代人更加真实。你可以做很多事情:

  • 实施elitism以确保最佳个人的生存。

  • 进化的力量源于反复的突变和交叉,所以我建议让代理人每代只玩几场比赛(比如5~10),至少在开始时,然后进化人口。你甚至可能想要每代只做一场比赛。

  • 在这方面,您可以采用持续进化策略。这意味着,一旦代理人死亡,他们就会受到突变,一旦代理人获胜,他们就会产生后代。或者两者的任意组合。关键是锦标赛正在进行中,每个人都可以与其他人比赛。这是一个更多的"有机"从某种意义上说,它没有严格定义的代,但它应该加快这个过程(特别是如果你可以并行评估)。

我希望有所帮助。您引用的帖子中接受的答案对您实现交叉的方式提出了很好的建议。