用 C# 实现井字棋游戏中的人工智能

我做了一个供 2 名玩家玩的 井字棋 游戏。现在,我想给游戏添加 人工智能。

以便该游戏可以在 1 名玩家和电脑 之间进行。
请问,我该如何开始?


回答:

对于井字棋来说,与其说是人工智能,不如说是一个查找表:对于每一种可能的棋盘布局,找到最佳的落子位置。

XKCD 有这样一个查找表。 基本上,每个棋盘布局都有一个唯一的 ID,以及放置下一个标记的单元格地址。 维基百科以另一种格式提供了 那个表格

这个表格的工作方式如下:X 先走,然后是 O。X 将他的 X 放在 9 个单元格中的一个。当 O 走的时候,现在有 9 种可能的棋盘布局,这取决于 X 放在哪个单元格:

 X  |    |----+----+----    |    |----+----+----    |    |

如果你查看 O 的棋盘布局,它包含 9 个大网格,左上角的那个在左上角有一个 X,所以应该使用它。 将 O 放在中间。

现在,当 X 再次走的时候,它需要找到这个棋盘布局:

 X  |    |----+----+----    | O  |----+----+----    |    |

你会在中间找到它。红色的是在 XKCD 图像中放置 X 的位置,它显示你应该将其放在右下角:

 X  |    |----+----+----    | O  |----+----+----    |    | X 

现在,O 再次走,并查找上述棋盘布局,该布局位于左上角的大网格中的右下角小网格中。 O 需要放置在正下方的中间位置:

 X  |    |----+----+----    | O  |----+----+----    | O  | X 

以此类推。 该图一开始可能有点难懂(点击放大),因为它被嵌套了,但正如所说:你创建一个查找表,其中包含每个独特的棋盘布局以及放置下一个标记的位置信息。

这会创建一个完美的对手:电脑永远不会输。 如何让他更像人类,可以通过微调(例如,随机放弃选择并在随机单元格中放置标记)来实现。

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中创建了一个多类分类项目。该项目可以对…

发表回复

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