【问题标题】:How to make a Self-Improving Tic Tac Toe Mega (10x10 board) game如何制作一个自我提升的井​​字游戏(10x10 棋盘)游戏
【发布时间】:2018-08-20 17:42:43
【问题描述】:

我制作了一个井字游戏(10x10 棋盘大小)机器人。它比普通人玩得更好。

棋盘尺寸为 10x10 而不是 3x3。必须放置连续 5 个 O 或 X 才能获胜,而不是 3 个。

因此,我使用 Minimax + 棋盘评估功能 + 有限的可用移动来制作该机器人以提高性能。

让我解释一下我的代码。

首先,我单独使用了 Minimax 算法,但我意识到了这一点。第一步后大约有 100 种可能的状态,第二步后有 100*99,第三步后有 100*99*98。

而且可能无法计算所有可能的棋盘状态。

所以,我所做的是创建了一个董事会评估功能。

我为棋盘评估功能设置了一些规则,无论Bot玩多少游戏都是一样的。

但我想制作一个板评估功能,它可以自我改进或给我一些数据,我可以用它来改进它。我想不出井字游戏的任何方法,你们可以吗?

谢谢

【问题讨论】:

  • 欢迎来到 StackOverflow。请按照您创建此帐户时的建议阅读并遵循帮助文档中的发布指南。 On topichow to ask... the perfect question 在此处申请。 StackOverflow 不是设计、编码、研究或教程服务。
  • 如果你在谷歌上搜索“Go-Moku”这个短语,你会发现比我们在这里的答案更能解释它的资源。

标签: machine-learning artificial-intelligence tic-tac-toe minimax alpha-beta-pruning


【解决方案1】:

执行此操作的一种方法是生成有关棋盘状态的统计信息。创建一个具有有效棋盘状态的 1:1 棋盘散列函数,并填充所采取的动作字典。记录每个棋盘状态下每一步棋的赢/输,并根据给定选项的获胜百分比对走棋选择施加权重。

这是内存密集型的,但您可以通过使用在板上旋转和镜像上不变的散列将其提高 8 倍(通常,您可以散列当前状态的所有 8 次旋转和翻转,并始终返回最小值,例如;可能有一个不那么暴力的选项。)

另外一项改进是,在预测窗口中不记录您保证会赢/输的任何游戏的移动,尽管这是一个较小的百分比改进。

【讨论】:

  • 我不知道到底有多少个棋盘状态,但至少有超过 10^20 个棋盘状态,并且移动了多少个棋盘状态,我最多可以存储多少个棋盘状态? 10万?如果我使用一个我不想使用的数据库,那么我仍然可以存储有限的可用板状态,也许是 10 亿?请记住,我需要在几秒钟内做出动作,否则玩起来会很无聊。
  • “哈希函数”是什么意思,对不起,我是新手。
  • 很抱歉回复晚了。散列函数是为任何棋盘状态返回唯一值的任何函数。它通过状态字典提供快速查找。就可扩展性而言,棋盘状态概率分布几乎肯定是帕累托或类似的,因此 90% 的收益可以通过学习一小部分棋盘空间来获得。尝试描述最常见的位置(可能按棋盘填充的百分比?我想大多数游戏会在 40% 之前结束。)并且只存储符合这些标准的统计数据。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多