database - 将数据库用于人工智能?

标签 database algorithm performance artificial-intelligence

我正在研究一个玩具问题:它是让代码在 Tic Tac Toe 中只有通过自己玩才能学会无懈可击。我是这类事情的新手......我只是决定我会通过使用随机数生成器来选择 X 和 0 的移动......然后将记录保存在应该移动的文本文件中永远不会再播放(算法的那部分有一些复杂性,但没关系)。

我的问题是:我应该使用关系数据库管理系统而不是文本文件来存储“游戏状态”以避免吗?我很想这样做,因为这样我就可以为每个游戏状态拥有唯一的 ID……并将特殊表格添加到数据库中以跟踪,比如说,在失去“游戏状态”之前出现的所有“游戏状态”(例如,一个“游戏状态”映射到许多“前一步游戏状态”)。在我看来,通过巧妙地使用表格,关系数据库管理系统比粗略的文本文件要容易得多。我假设缺点是代码 self 训练所需的运行时间(因为对数据库的所有调用都可能需要一段时间)。

任何智慧将不胜感激。考虑使用数据库是否理智?我的利弊分析准确吗?谢谢!

最佳答案

井字游戏有 9 个字段。

在任何字段中,您都有 3 个值选项(' '、'X'、'O')。这使得 3^9 = 19.683 种可能的组合。

您需要为任何字段(0,1 或空)存储 9 位。这产生了 177.147 位数据,更不用说元数据了。

此外,并非所有可能的组合都是有效的(您的领域中不能有 3 个 O 而只有 1 个 X)。这使得上面的数字更小。

换句话说,如果您没有任何极高的时间限制,那么数据库的选择就不是性能驱动的。

如果您使用关系数据库,您仍然应该阅读有关索引的内容。

但是,我不建议您将数据存储在文本文件中(不是谈论 no-sql 数据库,而是硬盘上的真实文本文件)。因为这会使访问变得复杂,如果编程不好,可能会很慢。

最后一个推荐是关系数据库系统,因为在这里你有更多的限制,比如唯一 ID 和没有不需要的数据类型。这通常会减少错误/错误。您还可以为任何可能的组合提供一个唯一键,并让您的 RDBMS 使用 unique_constraint 为您强制执行此操作。稍后你制作了一个“链接表”,它只链接你独特组合的 ID。

关于database - 将数据库用于人工智能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53494249/

相关文章:

mysql - 如何获取不在表 "ids"中的 "service_gos"(Laravel)

c# - 模拟一场大战

c - 将所有 C 代码写在一个源文件中真的会使程序运行得更快吗?

performance - 为什么纹理查找比直接计算慢得多?

java - 电子邮件已使用 jsp 注册?

mysql - 数据库从两个时间戳行获取持续时间

javascript - 冒泡排序不交换 Javascript 中的数组元素

python - 从两个列表中添加值时的效率

c# - 如何更快地在 Visual Studio 中编写代码?

android - Android应用开发时持久化数据比较常用的是什么?