Lazy loaded image
Part 2 理解
Words 578Read Time 2 min
2025-5-29

✅ Part 2:理解 winning_statistics(file_name, depth, tolerance) 的问题与思路


🎯 问题核心是什么?

你有一个 PGN 棋谱数据库(可以认为是一个 CSV 格式的游戏记录集合),你想找出一种“开局走法序列”:
在所有真实对局中,这种走法在前 depth 步之内出现过,至少出现了 tolerance 次,而且白方赢的概率最高。
这可以理解为:
  • “根据数据统计,最能帮助白方获胜的开局序列是哪一种?”
  • 但前提是:这个序列不能太冷门,必须是出现次数够多的(≥ tolerance)。

📦 每个对局数据是什么样的?

每盘棋被拆分成一个“顺序走法字典”,比如:
你可以从每盘棋中提取前几步的走法(构成一个走法列表),然后看哪些对局用了这些走法序列。

📂 分析的步骤是什么?

  1. 读取所有对局数据,并能按需要从中提取出某个深度的前 n 步走法。
  1. 递归地从起始状态开始尝试每一种可能的走法
      • 每一步都生成一个新的走法序列(比如 ['e4']['e4', 'e5'],等等)。
      • 然后你查阅你的数据库,看看有多少对局以这个走法序列开局。
      • 如果这个走法序列出现的次数 ≥ tolerance,你就统计白方赢了几次。
      • 然后记录这个走法序列的胜率。
  1. 继续往下一步延伸,直到达到设定的 depth 步数,一路上你记录下胜率最高的那个走法序列。

✅ 你要找的是什么?

你最终要找到的是一个三元组:
比如:
意思是:“在数据库中,有 40 局走了这个开局序列,其中 85% 是白方赢。”