JavaScript文件系统API作为象棋Alpha Beta数据存储

JavaScript FileSystem API as Chess Alpha Beta data storage

本文关键字:Alpha Beta 数据 存储 文件系统 API JavaScript      更新时间:2023-09-26

我开始用JavaScript编写象棋程序,如果我发现需要将服务器涉及到象棋AI逻辑中,可能会使用一些Node.JS,至少在我可能无知的观点中,这仍然是合理的。我的问题很简单:JavaScript的客户端文件系统API是缓存minimax结果以供将来参考的合理方式,还是结果数据太多而无法存储在任何一个地方?我的想法是,它可以作为一种方法,让AI能够适应用户,并通过能够访问以前的决策而不是每次都手动重新确定它们来"学习"。这是一个合理的计划吗?还是我低估了所需的内存使用量?如果您的答案是这是合理的,那么一些关于以这种方式存储数据的最有效方法的技巧也会很好。

我以前用c++写过象棋引擎,但没有写过Javascript。

你所描述的通常是用置换表来解决的。计算一个标识位置的散列键,并用它存储其他数据。看到的:https://www.chessprogramming.org/Transposition_Tablehttps://www.chessprogramming.org/Zobrist_Hashing

Web存储提供每个源:

2.5 MB for Google Chrome
5 MB for Mozilla Firefox
10 MB for Internet Explorer

每个表项通常包含:

Zobrist Hash Key: 8 byte
Best Move: 2 byte
Depth: 1 byte
Score: 2 byte
Type of score (exact, upper bound, lower bound): 1 byte
= 16 byte

例如Google Chrome可以容纳160k个条目。通常,对于象棋位置分析,您将使用超过1gb的内存来存储换位表。无论如何,对于javascript引擎,我认为2.5 MB是一个很好的折衷方案。

为了确保javascript引擎使用最佳存储,我建议您将数据转换为某种二进制表示。然后我将通过Zobrist哈希键索引localStorage并存储与之相关的所有其他信息。