【问题标题】:A Genetic Algorithm for Tic-Tac-Toe井字游戏的遗传算法
【发布时间】: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


【解决方案1】:

我对 GA 的了解非常有限,但是在建模板配置方面,您不是问错问题了吗?你的任务不是列举所有可能的获胜配置——你要做的是找到导致获胜配置的一系列动作。也许您应该关注的人口不是一组棋盘,而是一组移动序列。

编辑:我并没有考虑从一个特定的棋盘开始,而是从一个空棋盘开始。很明显,在 3x3 棋盘上,从 (1,1) 开始的移动序列最适合 X。重要的不是最终棋盘中间有一个 X,而是 X 放在中间 首先。如果 X 有一个或多个最佳第一步,也许 X 也有最好的第二步、第三步或第四步?经过几轮适应度测试和重组后,我们会发现X的第二步通常是相同的,还是一小组值中的一个?那么第三步呢?

这不是极小极大,因为您不是根据棋盘的先前状态一次寻找最佳走法,而是同时寻找所有最佳走法,希望收敛到一个制胜法宝。

我知道这并不能解决您的问题,但如果您的想法是制定一个制胜策略,那么您自然会希望查看移动序列而不是棋盘状态。

【讨论】:

  • 你是说给定一个特定的棋盘,人口是一组将带你走向获胜条件的动作?这似乎是变相的 min-max,但我可能误解了你的答案。你有机会举一个简单的例子吗?
【解决方案2】:

这似乎是一个非常古老的对话,但引起了我的注意。认为它可能有助于公众讨论,这是我的意见。

我认为您分配的任务中的目标需要更明确地定义:

  1. 您是否正在寻找一组获胜的棋盘?我不这么认为,因为这对于 3x3 板子来说非常简单,甚至可以用手解决,并且可以外推到更大的板子上。 GA 可以用于更大的董事会,但这只是一个 GA 练习。

  2. 您是否尝试利用 GA 来训练井字游戏给 AI 玩家?我认为应该是这样的。在这种情况下,您的 GA 字符串/染色体不应该代表获胜的棋盘,而是应该代表玩家的有序移动序列,以赢得比赛。不过,正如预期的那样,这确实有点难以建模,而且这将是一个真正的 AI 训练编程练习。

我希望这个观点会有所帮助。

【讨论】:

    猜你喜欢
    • 2011-04-23
    • 2015-12-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-07
    • 1970-01-01
    • 2016-08-31
    • 1970-01-01
    相关资源
    最近更新 更多