如何使 Minimax/Alpha-Beta 剪枝优先考虑较短的路径?
How can I make Minimax/Alpha-Beta pruning prioritize shorter paths?
我在国际象棋引擎中实现 minimax 算法时遇到问题。我怎样才能让算法偏向于最短的获胜路径?
以本板配置为例:
.
此处最好的一步是移动最后一行的皇后,但如果算法具有更高的搜索深度,则是否发生将死并不重要"faster"。
一些相当直接的更改:
- 更改搜索函数的 return 类型,这样 returning 一对像 (move, q) where q 是衡量着手好坏的指标,它 return 是一个三元组,例如 (move, q, m) 其中 m 是该移动之后的序列长度。
- 更改 return 语句以包含正确的序列长度;要么 0 表示游戏立即结束,要么 (m + 1) 其中 m 是递归调用找到的后续序列的长度。
- 使用序列长度作为决胜局来比较相等的移动 q;较低的 m 是首选。
- 如果您一发现就 return 取胜,请更改此条件,以便 立即 获胜移动短路。
请注意,这通常会降低算法的效率,因为您必须在找到获胜着法后探索更多分支,以防在未探索的分支中有更快的获胜着法。
我在国际象棋引擎中实现 minimax 算法时遇到问题。我怎样才能让算法偏向于最短的获胜路径?
以本板配置为例:
此处最好的一步是移动最后一行的皇后,但如果算法具有更高的搜索深度,则是否发生将死并不重要"faster"。
一些相当直接的更改:
- 更改搜索函数的 return 类型,这样 returning 一对像 (move, q) where q 是衡量着手好坏的指标,它 return 是一个三元组,例如 (move, q, m) 其中 m 是该移动之后的序列长度。
- 更改 return 语句以包含正确的序列长度;要么 0 表示游戏立即结束,要么 (m + 1) 其中 m 是递归调用找到的后续序列的长度。
- 使用序列长度作为决胜局来比较相等的移动 q;较低的 m 是首选。
- 如果您一发现就 return 取胜,请更改此条件,以便 立即 获胜移动短路。
请注意,这通常会降低算法的效率,因为您必须在找到获胜着法后探索更多分支,以防在未探索的分支中有更快的获胜着法。