几年前,研究人员宣布他们已经完成了一个针对跳棋的蛮力综合解决方案。
我对另一个应该有更少状态的类似游戏很感兴趣,但是在任何合理的时间范围内运行完整的求解器仍然是不切实际的。我仍然想尝试一下,因为即使是部分解决方案也可以提供有价值的信息。
从概念上讲,我希望拥有一个包含每个已知位置以及后续位置的游戏状态数据库。一个或多个客户端可以从数据库中获取未探索的状态,计算可能的移动,并将新状态插入到数据库中。一旦找到一个残局状态,所有导致它的状态都可以用极小极大信息更新以构建决策树。如果做出明智的决定来选择可能的分支进行探索,我可以为最重要的分支构建信息,然后随着时间的推移逐渐构建完成。
忽略这个想法的优点或可行性,实现这样一个数据库的最佳方法是什么?我在 sql server 中制作了一个快速原型,该原型存储了每个状态的字符串表示形式。它有效,但我的求解器客户端运行非常缓慢,因为它一次输出一个状态并计算所有移动。我觉得我需要在内存中做更大的块,但是搜索空间肯定太大了,无法一次将它们全部存储在内存中。
有没有更适合这种工作的数据库系统?我将进行许多插入、大量读取(以检查状态(或等效状态)是否已经存在)以及很少的更新。
另外,我怎样才能并行化它,以便许多客户可以解决不同的分支而不会重复太多工作。我正在考虑类似于检查分配,生成几百万个状态并将其提交回以集成到主数据库中的程序。我只是不确定这样的事情是否会很好地工作,或者是否有以前的工作方法来做这种事情。