Tic-Tac-Toe AI:如何制作树?

2024-04-26

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

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


想象一下,在井字棋盘上的任何一点,每一个可能的动作都是一个分支。董事会的当前状态是根。一动即为枝。现在假装(一次一个)每个分支都成为当前状态。每个可能的移动都会成为一个新的分支。树的叶子是当最后一步走完并且棋盘已满时。

您需要一棵树的原因是,一旦构建完成,您需要找出哪个分支具有最多的叶子,这些叶子是“获胜”场景。您建立所有可能结果的分支,将获胜的总数相加,然后采取有机会获得最多胜利的举动。

使树像这样:

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 call
recursiveTreeWalk( tree )

非常伪代码。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Tic-Tac-Toe AI:如何制作树? 的相关文章

随机推荐

  • 如何绘制 NxN 圆数组?

    我想绘制一个 NxN 的圆数组 为了形象化 我附上了我想要实现的目标的图像 我是 MatlLab 的新手 所以我尝试先绘制一个圆 下面是示例代码 n 2 10 size of mask M zeros n I 1 n x I n 2 mas
  • 将 freebase 向量与 gensim 一起使用

    我正在尝试使用 Google 发布的 freebase 单词嵌入 但我很难从 freebase 名称中获取单词 model gensim models Word2Vec load word2vec format freebase vecto
  • 无法安装 Visual Studio C++ 包含文件“excpt.h”

    我正在尝试编译一个 Visual Studio C 项目 但由于编译器报告 无法打开包含文件 excpt h 没有这样的文件或目录 我无法到达任何地方 该问题已在互联网上多次报告 但我找不到有关我的具体情况的任何帮助 问题不在于项目的包含路
  • Python:UnicodeDecodeError:“utf8”编解码器无法解码字节

    我正在将一堆 RTF 文件读入 python 字符串中 在某些文本上 我收到此错误 Traceback most recent call last File 11 08 py line 47 in
  • 用于“重复上一个命令”的 Visual Studio Code 命令

    是否有一个命令可以 重复上一个命令 如果没有 我该如何设置这样的东西 Basically what I want is to press some shortcut and for it to repeat whatever the las
  • 将模型的 IEnumerable 属性传递给控制器​​后操作 - ASP MVC

    我正在开发一个 asp MVC 应用程序并面临以下问题 这是一个工作代码 div for var i 0 i lt Model Filter itemDetails Count i table tr td Html TextBoxFor m
  • 在Javascript中查找多维数组的索引

    我在 JavaScript 中创建了一个多维数组 我想找到特定值的确切索引 该值将是用户输入 var array var k 0 for var i 0 i lt 10 i array i for var j 0 j lt 100 j k
  • 用于嵌入式服务器的 Web 技术

    我最近开始了一个针对嵌入式设备的新 Web 开发项目 并希望征求一些有关使用技术的建议 该设备将提供 HTML 页面 其中包括用于从 JSON 服务器检索数据的 AJAX 代码 我们暂时使用 Cherokee 作为 Web 服务器 但我们并
  • Apache Commons CLI - 在帮助输出中打印尾随参数

    我正在使用 Apache Commons CLI 1 2 来解析最后带有选项和额外参数的命令行 前任 mycmd d DIR extra stuff 我知道如何使用获得 额外 和 东西 CommandLine getArgs 但我不知道如何
  • 以十进制打印变量的地址

    我试图以十进制而不是十六进制打印数组元素的地址 但它不起作用 下面是代码和输出示例 include
  • mysql 查询多边形内的点 - 没有结果

    我很确定我在这里做错了很多事情 但我不确定是什么 该表 减去一些字段 CREATE TABLE IF NOT EXISTS stuff id int 10 unsigned NOT NULL AUTO INCREMENT lat decim
  • 使用标签强制 IE 11“用户代理字符串”

    我的网站在 IE11 中无法正常工作 我们都知道HTML标签允许开发者强制IE兼容模式 在例子中 效果很好 解决了 IE10 的可视化问题 但实际上在 IE11 上 即使Compatibility mode被设定为IE9 User agen
  • 如何使用 Fluent Assertion 比较两个属性不同的集合?

    我有公开课RuleInfo它是从内部类创建的Rule private static RuleInfo CreateRuleInfo Rule r return new RuleInfo RuleCode r RuleId DisplayNa
  • UIScrollView 中的 UIControll 未接收触摸事件

    I use 七开关 https github com bvogelzang SevenSwitch在我的项目中 我需要将其添加到UIScrollView但当我将其添加到滚动视图时 该控件似乎无法接收触摸事件 我尝试过子类化scrollvie
  • 使用媒体编解码器将 PCM 转换为 AAC

    我正在 Android Jelly Bean 中使用媒体编解码器类将 PCM 格式编码为 AAC 该文件已编码 但没有音乐播放器能够播放该文件 我在网上找不到任何工作代码或正确的文档 这是我的代码 public void doConvert
  • 将到期日期作为 TIMESTAMP 列的默认值

    有没有办法将列的默认值设置为过期日期 从CURRENT TIMESTAMP 我已经尝试过 ALTER TABLE table ADD COLUMN expire TIMESTAMP NOT NULL DEFAULT TIMESTAMPADD
  • Chrome 控制台和 Javascript 对象类型

    我想找到 Javascipt 对象的类型 构造函数的名称 但我一直只是用我尝试过的所有方法得到一个通用的 对象 我在网上搜索过 但没有找到对我有用的 Javascript 方法 它始终只返回对象构造函数类型作为通用 对象 然而当我在 Chr
  • Jquery 单击事件不会在使用 jquery 动态创建的元素上触发

    我正在尝试创建一个简单的功能 用户从下拉列表中选择一些值 然后单击 添加 按钮以标签的形式在下面的 div 中添加所选项目 每个添加的标签都有一个删除锚点 单击该锚点即可删除该标签 现在 当单击添加按钮时 标签将被正确插入 但是当我单击标签
  • 如何以编程方式获取 iOS 应用程序中的日志消息?

    我正在使用中定义的方法https developer apple com documentation os logging https developer apple com documentation os logging在 iOS 应用
  • Tic-Tac-Toe AI:如何制作树?

    在制作井字游戏机器人时 我在尝试理解 树 时遇到了巨大的障碍 我理解这个概念 但我不知道如何实现它们 有人可以向我展示一个如何为这种情况生成树的示例吗 或者关于生成树的好教程 我想最困难的部分是生成部分树 我知道如何实现生成整棵树 但不知道