我正在为一个零和4人棋盘游戏制作一个人工智能。这实际上不是零和(这4名玩家将“死亡”当他们失去他们的全部生命,所以会有一个球员谁死了第一,第二,第三和一个球员谁幸存下来。然而,我告诉AI,只有生存算作一场胜利,其他任何事情都是一场失败),经过一些研究后,我想我会使用一个极小极大算法结合一个启发式函数。我偶然发现了这个问题,并决定和这个问题的操作一样--编写一个给我最佳权重的进化算法。
然而,我的启发函数与这个问题的运算函数不同。我的重9重,速度慢得多,所以我不能让代理商玩1000场比赛(时间太长了),也不能用交叉的方法培育他们(我怎么做9重的交叉?)
所以我决定想出自己的方法来决定自己的健康和繁殖。这个问题只是关于健身功能。
这是我的尝试。
首次尝试
对于随机生成的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代后,前十名的平均体能确实增加了,但仍然没有我想的那么多。
我认为这个失败的原因是游戏是有限的,所以在你死前你可以做的动作是有限的,表现最好的经纪人几乎都达到了这个极限。没有增长的余地。另一个原因是幸存的球员和第三位死亡的球员的体能差别很小。
我想要的
根据我对EAs的理解(如果我错了,请纠正我),平均体能应该增加,表现最好的个体的体能不应该随着时间的推移而下降。
我的两次尝试都失败了。由于对手是随机选择的,第1代中表现最好的代理人可能会在下一代得到更强的对手,从而使其适应度降低。
备注
在我的尝试中,代理商每代玩200场游戏,每代需要3个小时,所以我不想让他们玩太多的游戏。
我怎么能写这样的健身功能呢?
发布于 2017-10-26 22:50:37
七代人似乎不足以获得有用的结果。尤其是对于一款游戏,我希望像200+这样的一代更现实一些。你可以做很多事情:
我希望这能帮上忙。你所引用的帖子中被接受的答案对你实现交叉的方式有很好的建议。
https://stackoverflow.com/questions/46871501
复制相似问题