【发布时间】:2011-08-03 08:42:56
【问题描述】:
因此,我被分配了使用遗传算法编写 5x5x5 井字游戏的问题。我的方法是从 3x3 开始,让它工作,然后扩展到 5x5,然后扩展到 5x5x5。
它的工作方式是这样的:
模拟一大堆游戏,并在每个游戏的每一轮中,在相应的表(X 表或 O 表实现为 c++ stdlib 映射)中查找响应。如果板不存在,则将板添加到表中。否则,做一个随机响应。
在我有完整的桌子之后,我初始化了一堆玩家(每个玩家都有一个棋盘表的副本,用随机响应初始化),让他们互相对战。
- 使用他们的赢/输来评估适应度,我保留了一定百分比的最佳值,然后他们继续前进。冲洗并重复 X 代,应该会出现最佳玩家。
对于 3x3,打折板是其他板的反射/旋转,以及移动是“赢得胜利”或“阻止胜利”的板,我会遇到的板总数是 53 或 38,取决于你是第一个还是第二个。极好的!不到一个小时就产生了一个最佳球员。很酷!
对 5x5 使用相同的策略,我知道桌子的大小会增加,但没有意识到它会急剧增加。即使不考虑轮换/反思和强制移动,我的表格也有大约 360 万个条目,而且看不到尽头。
好吧,那显然行不通,我需要一个新计划。如果我不列举所有的板,而只是一些板怎么办。好吧,这似乎也行不通,因为如果每个玩家只有一小部分他们可能看到的可能棋盘,那么他们将进行很多随机移动,显然会转向最优的相反方向。
解决这个问题的现实方法是什么?我会被卡在使用电路板功能吗?目标是尽可能少地硬编码游戏功能。
我一直在进行研究,但我阅读的所有内容都会导致 A-B 修剪作为唯一可行的选择的最小值/最大值。我当然可以这样做,但是 GA 真的很酷,我现在的方法在这里有点超出现实。
编辑问题已经基本解决了:
使用一个相似函数,它结合了开放空间的汉明距离、可能的获胜条件和一些其他措施,可以将桌子降低到非常易于管理的 2500 种可能性,std::map 可以在几分之一秒内处理。
【问题讨论】:
-
一个 小时 来解决 3x3 井字游戏!?你可以在这段时间内completely solve it by hand。
-
很高兴看到有人在转向 stackoverflow 寻求帮助之前在他们的作业中投入了一些想法。 +1
-
对,最佳策略是显而易见的,但我的生物体从完全随机的反应开始,并使用遗传修饰符来修改它们的“基因组”,也就是板/反应。实际上花了不到一个小时,我只是估计。
-
另外,如果有人知道为什么我无法在这个问题上设置(看不到选项)赏金,即使我有所需的声誉,我只是想知道。跨度>
-
因为太早了,你才发。等几天,然后你就可以设置赏金了。
标签: artificial-intelligence genetic-algorithm