Alpha-Beta Pruning

The following pseudo-code illustrates the Minimax algorithm with alpha-beta pruning.


//This top-level function computes the best action for MAX to take
ALPHA-BETA(state)
    (best_value, best_action) ← MAX-VALUE(state, -∞, +∞)
    return best_action
end


MAX-VALUE(state, α, β)
    if TERMINAL-TEST(state)
        return UTILITY(state)
    end

    value ← NEGATIVE-INFINITY
    action ← null
    for each a in ACTIONS(state)
        // Compute the highest possible utility (for MAX) if MAX were to take this action
        u ← MIN-VALUE(RESULT(state, a), α, β) 
        
        //Determine if this action resulted in a higher utility
        if u > value
            value ← u
            action ← a        
        end

        //MIN is guaranteed a value of β elsewhere, so MIN would never allow the game to progress to this state
        // Return back...no need to keep checking actions
        if value ≥ β
            return (value, action)
        end

        //Determine if this action resulted in the highest utility we've seen so far in the game tree
        if value > α
            α ← value
        end
    end

    return (value, action)
end


MIN-VALUE(state, α, β)
    if TERMINAL-TEST(state)
        return UTILITY(state)
    end

    value ← POSITIVE-INFINITY
    action ← null
    for each a in ACTIONS(state)
        // Compute the lowest possible utility (for MAX) if MIN were to take this action
        u ← MAX-VALUE(RESULT(state, a), α, β)

        //Determine if this action resulted in a lower utility
        if u < value
            value ← u
            action ← a
        end

        //MAX is guaranteed a value of α elsewhere, so MAX would never allow the game to progress to this state
        //Return back...no need to keep checking actions
        if value ≤ α
            return (value, action)
        end

        if value < β
            β ← value
        end

    end

    return (value, action)
end