井字棋AI:如何构建树?

我在制作井字棋机器人的时候,遇到了理解“树”的巨大障碍。我理解这个概念,但我不知道如何实现它们。

有没有人可以展示一个如何为这种情况生成树的例子?或者一个关于生成树的好的教程? 我想困难的部分是生成部分树。我知道如何实现生成整棵树,但不知道如何生成部分树。


回答:

想象一下,在井字棋棋盘的任何时刻,每一个可能的走法都是一个分支。棋盘的当前状态是根。一次走法是一个分支。现在假设(一次一个),每个分支都变成当前状态。每个可能的走法都变成一个新的分支。树的叶子是做出最后一步棋并且棋盘满了的时候。

你需要一棵树的原因是,一旦它被构建,你需要找出哪个分支拥有最多的’赢’场景的叶子。你构建所有可能结果的分支,将获胜的总数加起来,然后做出最有机会最终赢得最多胜利的走法。

把树做成这样:

class Node {public:   std::list< Node > m_branches;   BoardState m_board;   int m_winCount;}std::list< Node > tree;

现在,你遍历树中的分支列表,并为每个分支,遍历它的分支。这可以用递归函数完成:

int recursiveTreeWalk( std::list< Node >& partialTree){   for each branch in tree       if node has no branches           calculate win 1/0;       else           recursiveTreeWalk( branch );   partialTree.m_winCount = sum of branch wins;}// initial callrecursiveTreeWalk( tree )

非常伪的代码。

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

发表回复

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