中国象棋估值策略

23 2025-10-02 09:33

估算体系(Evaluation Systems)并不是单一的,而是多层、多阶段、多用途的。它们各司其职不直接累加,而是通过逻辑顺序、条件判断、选择性启用的方式协同工作。

✅ 一、估算体系总览

表格
 
复制
估算体系名称 所在文件 作用阶段 主要用途 是否参与最终评估
PreEval 静态预评估 preeval.cpp 搜索前 初始化棋子位置价值 ✅ 是,基础输入
Material 子力价值 position.cpp 搜索中 快速子力对比 ✅ 是,评估起点
AdvisorShape 士象形状评估 evaluate.cpp 搜索中 士象布局合理性 ✅ 是,逐步加分
StringHold 牵制评估 evaluate.cpp 搜索中 车炮牵制威胁 ✅ 是,逐步加分
RookMobility 车机动性 evaluate.cpp 搜索中 车活动范围 ✅ 是,逐步加分
KnightTrap 马陷阱评估 evaluate.cpp 搜索中 马是否被憋 ✅ 是,逐步加分
MVV-LVA 吃子排序估值 genmoves.cpp 搜索中 吃子走法排序 ❌ 否,仅用于排序
Quiescence Eval 静态搜索评估 search.cpp 叶子节点 吃子延伸评估 ✅ 是,替代静态评估

✅ 二、评估流程与判断顺序

🔍 步骤 1:PreEval(搜索前)

  • 作用:为每个棋子赋予位置价值(中局/残局插值)
  • 结果:写入 vlWhite, vlBlack,作为评估起点

🔍 步骤 2:Material(搜索中)

  • 作用:快速计算子力总价值
  • 代码
    cpp
     
  • 复制
    vl = this->Material();
     
  • 是否累加:是,作为评估基准

🔍 步骤 3:逐步加分评估(evaluate.cpp)

这些评估按顺序执行逐步累加,但每一步都可提前返回(剪枝优化):
cpp
 
复制
vl += this->AdvisorShape();  // 士象形状
vl += this->StringHold();    // 牵制
vl += this->RookMobility();  // 车机动性
vl += this->KnightTrap();    // 马陷阱
 
⚠️ 注意:每一步后都检查是否超出 vlAlpha/vlBeta,若超出则立即返回,不再继续累加。

🔍 步骤 4:Quiescence Search(叶子节点)

  • 作用:在叶子节点进行吃子延伸,避免“水平线效应”
  • 是否替代静态评估:是,不再使用 Material + Evaluate,而是使用 SearchQuiesc() 返回的值

✅ 三、总结:是否累加?

表格
 
复制
体系 是否累加 累加方式 备注
PreEval 初始化时累加 作为基础价值
Material 评估起点 可单独使用
AdvisorShape 等 逐步累加 可中途剪枝
MVV-LVA 不参与评估 仅用于走法排序
Quiescence 替代静态评估 在叶子节点使用

✅ 四、一句话总结

ElephantEye 使用“分层评估 + 逐步累加 + 条件剪枝”的策略,PreEval 和 Material 是基础,形状/机动性/陷阱等是可选加分项,MVV-LVA 仅用于排序,Quiescence 在叶子节点替代评估。

全部评论

·