如何测试我的井字游戏A.I.是否完美?

我制作了一个井字游戏的A.I. 对于每一个棋盘状态,我的A.I.会返回一个确切的位置来移动。(即使有多个正确的位置,它每次都会选择同一个位置,而不是随机选择)

我还制作了一个函数来循环遍历所有可能的A.I.的移动方式。

这是一个递归函数,它让A.I.在给定的棋盘上移动,然后让另一个玩家进行所有可能的移动,并在每个可能的移动中调用自身的递归函数,生成新的棋盘。

我对A.I.先手和对方先手的情况都进行了这样的操作,并将结果相加。最终得到418种可能的胜利,115种可能的平局,以及0种可能的失败。

但现在我的问题是,如何最大化胜利的数量?我需要将这个统计数据与某些东西进行比较,但我不知道该与什么进行比较。


回答:

你读过维基百科上的文章了吗? 链接

终止位置的数量

仅考虑棋盘状态,并考虑棋盘对称性(即旋转和反射)后,只有138个终止棋盘位置。假设X每次都先走:

  • 91个独特的位置由(X)赢得
  • 44个独特的位置由(O)赢得
  • 3个独特的位置为平局

可能游戏的数量

不考虑对称性,可能游戏的数量可以通过手动计算得出,具体公式可以得出255,168种可能的游戏。假设X每次都先走:

  • 131,184个完成的游戏由(X)赢得
  • 77,904个完成的游戏由(O)赢得
  • 46,080个完成的游戏为平局

你可以从第一段生成138个终止棋盘位置

或者

你可以在随机字段上运行足够的测试,并将你的结果与此处的统计数据进行比较 链接

5步内获胜    1440     0.6%
6步内获胜    5328     2.1%
7步内获胜    47952   18.8%
8步内获胜    72576   28.4%
9步内获胜    81792   32.1%
平局          46080   18.1%
总计          255168 100.0%

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注