database - 将数据库用于人工智能?
问题描述
我正在研究一个玩具问题:它是让代码在井字游戏中只有通过自己玩才能学会无与伦比。我是这类事情的新手......我只是决定我会通过使用随机数生成器来选择 X 和 0 的移动......然后将记录保存在一个应该移动的文本文件中永远不要再玩了(算法的那部分有一些复杂性,但没关系)。
我的问题是:我应该使用关系数据库管理系统而不是文本文件来存储“游戏状态”来避免吗?我很想这样做,因为这样我就可以为每个游戏状态拥有唯一的 ID……并将特殊表添加到数据库中以跟踪,例如,在失去“游戏状态”之前出现的所有“游戏状态”(例如,一个“游戏状态”映射到许多“先前的游戏状态”)。在我看来,通过巧妙地使用表格,关系数据库管理系统比粗略的文本文件更容易钓鱼。我假设缺点是代码自我训练所需的运行时间(因为对数据库的所有调用都可能需要一段时间)。
任何智慧将不胜感激。考虑使用数据库是否明智?我对利弊的分析准确吗?谢谢!
解决方案
井字游戏有 9 个字段。
在任何字段中,您都有 3 个值选项(''、'X'、'O')。这使得 3^9 = 19.683 种可能的组合。
您需要为任何字段(0,1 或 null)存储 9 位。这产生了 177.147 位数据,更不用说元数据了。
此外,并非所有可能的组合都有效(您的字段中不能有 3 个 O,只有 1 个 X)。这使得上面的数字更小。
换句话说,如果您没有任何极高的时间限制,那么您的数据库的选择就不是性能驱动的。
如果您使用关系数据库,您仍然应该阅读有关索引的内容。
但是,我不建议您将数据存储在文本文件中(不是说 no-sql db,而是硬盘上的真实文本文件)。因为这使得访问变得复杂,如果没有很好地编程,可能会很慢。
最后的推荐是关系数据库系统,因为在这里你有更多的限制,比如唯一的 id 并且没有不需要的数据类型。这通常会导致更少的错误/错误。您还可以为任何可能的组合提供唯一键,并让您的 RDBMS 使用 unique_constraint 为您强制执行此操作。之后,您制作了一个“链接表”,仅链接您唯一组合的 id。
推荐阅读
- c# - 如何运行 BackgroundService 的单个实例?
- javascript - 如何使用 addEventListener 到由 javascript 而不是内联 js 呈现的元素
- python - pathlib 文件夹在 Windows 资源管理器中不可见
- jsp - 如何解决“在本地启动 TomCat v9.0 Server 遇到问题”的问题?
- flutter - 无法点击月份,SfCalender
- react-native - 为什么当我按下按钮时我的应用程序会关闭?
- c++ - 如何为多维数组赋值?
- python - 如何将 v-rep edu 上的 Nao 模拟与 Choregraphe 软件连接起来。我尝试了很多,但都失败了。这让我更直观,当我使用真正的机器人时
- nunjucks - 在 Nunjucks 模板中访问父上下文变量
- php - 如何在不知道变量/数组名称的情况下从另一个 php 文件中获取每个数组/变量