2

我开始用 JavaScript 和一些 Node.JS 编写国际象棋程序,如果我发现需要让服务器参与国际象棋 AI 逻辑,至少在我可能无知的观点中,这仍然是合理的。我的问题很简单:JavaScript 的客户端 FileSystem API 是缓存极小极大结果以供将来参考的合理方法,还是生成的数据太多而无法存储在任何地方?我的想法是,它可以用作一种方式,让 AI 能够通过访问以前的决策而不是每次手动重新确定它们来适应用户并“学习”。这是一个合理的计划还是我低估了这需要的内存使用量?如果您的回答是这似乎是合理的,那么有关以这种方式存储数据的最有效方法的一些提示也会很好。

4

1 回答 1

2

我以前用 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 可以容纳 160k 条目。通常对于国际象棋位置分析,您使用超过 1 GB 的内存用于转置表。无论如何,对于 javascript 引擎,我认为 2.5 MB 是一个很好的折衷方案。

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

于 2013-02-18T00:33:32.483 回答