【发布时间】:2023-09-28 13:26:01
【问题描述】:
alpha-beta剪枝算法如下:
function ALPHA-BETA-SEARCH(state) returns an action
v <- MAX-VALUE(state, -∞, +∞)
return the action in ACTIONS(state) with value v
function MAX-VALUE(state, α, β) returns a utility value
if TERMINAL-TEST(state) then
return UTILITY(state)
v <- -∞
for each a in ACTIONS(state) do
v <- MAX(v, MIN-VALUE(RESULT(state, a), α, β))
if v ≥ β then
return v
α <- MAX(α, v)
return v
function MIN-VALUE(state, α, β) returns a utility value
if TERMINAL-TEST(state) then
return UTILITY(state)
v <- +∞
for each a in ACTIONS(state) do
v <- MIN(v, MAX-VALUE(RESULT(state, a), α, β))
if v ≤ α then
return v
β <- MIN(β, v)
return v
该算法指出ACTIONS 函数将给出给定state 中所有可用操作的列表。
让我们例如参加跳棋游戏。假设一个棋子,比如A,与另一个棋子成对角线,比如B。如果A 可以采取B,那么这是一个(不可避免的,因为如果可以的话,我们必须采取另一个检查器)行动。或者,如果有多个镜头,这些都是动作。这种情况实际上可以用铅笔和纸来绘制。更具体地说,可以使用树来表示这种情况,其中每个节点代表一个状态,其子节点的边代表该状态的可能动作。
我认为您不需要显式存储树数据结构。但是,上面的算法包含以下语句:return the action in ACTIONS(state) with value v。现在,ACTIONS(state) 将从某个状态返回可能的操作(例如,A 需要播放的位置)。
如果我们把所有的算法都算出来,我们会得到一个值v,我们会跟随从终端节点传递过来的值v的节点。
现在,假设我没有存储来自每个状态的所有可能移动或动作的完整树。当return the action ACTIONS(state) with the value v 被执行时,我只会得到引导我进入下一个状态的动作,并且我知道其中一个动作会引导我走向最佳路径。但是,如果我没有额外的簿记,例如完整的树,我能否将操作与值 v 匹配?
【问题讨论】:
标签: algorithm artificial-intelligence minimax alpha-beta-pruning