0

我正在尝试开发一个国际象棋程序。这将是对树的常规蛮力搜索,唯一不同的是评估。最初,我将使用 Claude Shannon 设计的标准评估器,以便更容易测试它是否在基础上工作正常。移动列表生成和它周围的所有其他基础设施都可以正常工作。

现在进行搜索:我想使用wikipedia的 alpha/beta 修剪代码示例。这就是一个问题:它对一件事模棱两可;应该从谁的角度进行评估?我已经用谷歌搜索了好几天(字面意思),但没有一个例子明确说明这一点。所以:评估应该是

  • 从那个深度的“当前推动者”的角度来看
  • 从那个深度的“当前行动的对手”的角度来看
  • 从树根的移动者的角度来看,例如正在为其进行树搜索的人(AI 玩家)
  • 从树根的移动者的对手的角度来看

?

我实验性地尝试了 rootSide、side、rootOpponent,基本上所有选项,然后让它们互相对抗。这样做的结果是,“在那个深度的当前推动者”将是使用的那个(它最常获胜),但是针对任何其他引擎测试该版本会导致 100% 的损失。

当然,维基百科会更新得更清楚!(请忽略维基百科历史中的注释:那是我自己写的,可能不正确,所以我删除了它)

4

1 回答 1

1

评估应该从调用它的节点的角度进行。这是您的第一个案例,也是唯一一个真正有意义的案例。

如果您正在针对其他完整引擎测试您的非常基本的引擎,那么是的,您可能会输掉每场比赛。您缺少很多技术,因此与其他引擎对抗现在不是一个好的测试方法。一旦你的引擎更强大,那么是的,你可以使用这种方法来提高强度或执行回归测试。

我建议设置简单的位置并手动使用它来查看它是否可以看到基本的捕获、检查、将死等。请注意,即使完美地实现了 alpha-beta 和简单的评估,你的引擎仍然会出错有时。这是因为固定的搜索范围,所以接下来您可能想要研究静止搜索。

于 2013-08-31T04:08:47.957 回答