4

我正在为零和 4 人棋盘游戏制作 AI。这其实不是零和游戏(4个玩家失去所有生命都会“死”,所以会有一个玩家先死,第二个,第三个玩家活下来。但是,我告诉AI只有活下来算赢,其他都是输)经过一些研究,我想我会结合使用一个极小极大算法和一个启发式函数。我遇到了这个问题,并决定和那个问题的 OP 一样——写一个进化算法,给我最好的权重。

但是,我的启发式函数与该问题的 OP 所具有的不同。我的需要 9 个权重并且速度要慢很多,所以我不能让代理玩 1000 场比赛(花费太多时间)或用交叉方法繁殖它们(我如何用 9 个权重进行交叉?)。

所以我决定想出我自己的方法来确定健康和繁殖。而这个问题只是关于适应度函数。

这是我的尝试。

第一次尝试

对于A随机生成的 50 个智能体群体中的每个智能体,从种群中再选择 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 的理解(如果我错了,请纠正我),平均适应度应该会增加,而表现最好的个人的适应度不应该随着时间的推移而下降。

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

笔记

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

我怎样才能写出这样的适应度函数?

4

1 回答 1

4

七代似乎不足以获得有用的结果。尤其是对于一款游戏,我希望像 200 多代这样的游戏会更真实。你可以做很多事情:

  • 实施精英主义,以确保最佳个体的生存。

  • 进化的力量源于重复的变异和交叉,所以我建议让智能体每代只玩几场比赛(比如 5 到 10 场),至少在开始时,然后进化种群。您甚至可能希望每一代只做一款游戏。

  • 在这方面,您可以采用持续进化策略。这意味着一旦代理人死亡,他们就会发生突变,一旦代理人获胜,他们就可以产生后代。或两者的任意组合。关键是比赛正在进行中,每个人都可以与其他人比赛。这有点“有机”,因为它没有严格定义的世代,但它应该加速这个过程(特别是如果你可以并行化评估)。

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

于 2017-10-26T22:50:37.970 回答