【问题标题】:Solving tic-tac-toe through brute force [closed]通过蛮力解决井字游戏[关闭]
【发布时间】:2014-05-30 02:56:07
【问题描述】:

我已经为这个问题苦苦挣扎了一段时间。我需要通过蛮力解决井字游戏——也就是说,让计算机通过自己玩几百万次来“学习”。

现在,“设置”有效 - 我将简要介绍一下。我的电脑通过生成随机动作来玩自己,直到一方或另一方获胜。然后它存储代表游戏的列表,并将该列表与 1、0 或 -1 相关联,以表示获胜、平局或失败。

我目前使用的算法很简单;在当前棋盘可能产生的所有游戏中,我发现棋盘上的走法与最多赢和最少输有关,然后我就移到那里。

这几乎适用于任何情况;除了重要的:叉子之外的所有东西。

在这样的情况下:

o - -       o - x     o - x

- x -   >   - x -  >  - x -

- - o       - - o     o - o

计算机有下一步动作的地方,计算机总是进入一个角落,然后被分叉。

有没有办法仅通过“蛮力”解决井字游戏(不使用最小/最大、启发式、硬编码等)?

【问题讨论】:

  • 您确定要在井字游戏上实现机器学习吗?一段时间后,当计算机学会了最优动作时,它永远无法战胜自己:如果两个玩家都做出最优动作,那么结果总是平局。在我看来,您应该将机器学习应用到其他游戏中,例如国际象棋或跳棋。

标签: python artificial-intelligence tic-tac-toe


【解决方案1】:

几百万次可能是多余的。我认为只有大约 362,880 种可能的“游戏”(统计:第一个玩家有 9 个选项,下一个玩家有 8 个,然后是 7 个,等等。所以 9!= 362,880)。

我建议您不仅根据最终的赢/输来衡量您的移动选择,还需要根据获胜所需的移动次数来衡量。更少的动作 = 更好的决策。

另外,一旦你构建了一个“完整”的地图,你可以在某些情况下将某些动作映射为“死亡”动作,不可避免地导致损失。一个设计良好的称重指标会看到没有条路线可以获胜,并且永远不会选择那个移动(包括分叉)。

【讨论】:

  • 感谢您的回复。如果游戏是随机生成的,几百万倍是否过多?我曾尝试按游戏长度衡量所玩游戏,但我总是不确定从那里去哪里。我的直觉 - 不确定这是否值得信任 - 也告诉我,如果游戏是随机生成的,“较短的游戏”将更频繁地出现 - 因此将比不太可能出现的较长的游戏具有更多的“权重”。跨度>
  • 好吧,如果您真的在做“蛮力”,那么您可以手动生成 362,880 个板中的每一个,并为每种可能的情况建立一个完整的数据库。那么这只是一个数据库搜索问题。
  • 抱歉 - 在我输入之前没有完全添加这个 - 我认为随机生成游戏有优势的部分原因是游戏的时间更短长度的游戏比长度更长的游戏更有可能发生。这个假设正确吗?
  • 再次,可能游戏的空间是有限的。如果你建立所有可能的数据库,它们中的许多会在完整的 9 步之前结束,所以实际空间会比362,880。
猜你喜欢
  • 1970-01-01
  • 2020-10-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多