我开始用 JavaScript 编写一个国际象棋程序,如果我发现需要将服务器纳入国际象棋 AI 逻辑中,可能还会使用一些 Node.JS,至少在我可能无知的情况下,这仍然是合理的。我的问题很简单:JavaScript 的客户端 FileSystem API 是否是一种缓存极小极大结果以供将来引用的合理方法,或者结果数据是否太多而无法存储在任何地方?我的想法是,它可以作为一种方式让人工智能适应用户并通过能够访问以前的决策来“学习”,而不是每次都手动重新确定它们。这是一个合理的计划还是我低估了所需的内存使用量?如果您的答案是这是合理的,那么有关以这种方式存储数据的最有效方法的一些提示也会很好。
最佳答案
我以前用 C++ 编写过国际象棋引擎,但没有用 Javascript。
你所描述的情况通常是通过换位表来解决的。您计算一个标识位置的哈希键并用它存储附加数据。 看: https://www.chessprogramming.org/Transposition_Table https://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 可以容纳 16 万个条目。通常,对于国际象棋位置分析,您需要使用超过 1 GB 的内存来存储换位表。无论如何,对于 javascript 引擎,我认为 2.5 MB 是一个很好的折衷方案。
为了确保 javascript 引擎使用最佳存储,我建议您将数据转换为某种二进制表示形式。然后,我将通过 Zobrist 哈希键对 localStorage 进行索引,并存储与其关联的所有其他信息。
关于JavaScript FileSystem API 作为 Chess Alpha Beta 数据存储,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14038927/