国际象棋位置哈希扭曲

问题描述 投票:1回答:1

国际象棋引擎通常使用Zobrist散列来快速查找。 Zobrist散列的理想(与一般的散列一样)是生成的键与类似位置尽可能不同。

那么问题是 - 如何将类似的位置映射到类似的键?简而言之,我想要的是一种快速而又脏的方法来对象棋位置进行分类(仅通过哈希函数)。谁有任何有趣的想法?

这里国际象棋位置的定义不仅仅是棋盘位置,而且还包括游戏的当前状态(无论是铸造还是使得传球捕获成为可能等)

理想情况下,国际象棋的位置概念应该包含在散列函数中。也许应该有两个哈希表,一个用于黑色移动,一个用于白色移动,因为这些位置本质上可能非常不同。我发现了几个类似的问题,例如efficient storage of a chess position在stackoverflow和其他地方,但答案很少。

这个问题可能是针对stackoverflow的国际象棋,但它对于https://chess.stackexchange.com/来说也是面向编程的

编辑:道歉,如果遇到好像我期待一个完整的解决方案,而不是自己做任何工作,但我只是希望有一些讨论或有趣的想法,我自己对主题知之甚少。到目前为止,我发现的所有东西都旨在尽可能地将键分开,而不是故意将它们组合在一起,例如http://chessprogramming.wikispaces.com/Zobrist+Hashing

编辑:一个相关的问题(以及解决潜在问题的另一种方法)是设计两个国际象棋位置之间的某些相似性度量。有没有人对这种方法有任何想法?

hash language-agnostic puzzle chess
1个回答
0
投票

寻找国际象棋位置的良好相似性措施是一个非常难的问题。我建议将位置分成不同的位置元素,这在国际象棋中通常很重要:例如

  1. 材料
  2. 典当结构
  3. 国王的位置
  4. 沉重的位置
  5. 轻件的位置......

为每个元素生成哈希值(hash1 ... hashn)。

两个位置的相似性可以通过相应的散列值的相等来表示。

© www.soinside.com 2019 - 2024. All rights reserved.