Edge Rewrite
// HTMLRewriter · presentation

This page was redesigned at the edge.

Cloudflare fetched the original article and streamed it through HTMLRewriter to apply an entirely new visual system without rebuilding the source page.

// request.cf · coarse context

A page that knows where it met you.

Only coarse request metadata is shown. This demo does not display or persist visitor IP addresses.

Country
US
Cloudflare location
CMH
Connection
HTTP/2
Language
Not provided

Ray ID: a222082a6f6419ef

Jump to content

// Workers AI · dad joke modeWhy did the "Effective hand strength algorithm" go to therapy? It had a grip on its issues.

From Wikipedia, the free encyclopedia

Effective Hand Strength (EHS) is a poker algorithm conceived by computer scientists Darse Billings, Denis Papp, Jonathan Schaeffer and Duane Szafron that was published for the first time in the "Opponent Modeling in Poker" (PDF). AAAI-98 Proceedings. 1998.

It has since then been considered as a reference in the realm of poker artificial intelligence and has been the basis of further research such as:

Algorithm

[edit]

The algorithm is a numerical approach to quantify the strength of a poker hand where its result expresses the strength of a particular hand in percentile (i.e. ranging from 0 to 1), compared to all other possible hands. The underlying assumption is that an Effective Hand Strength (EHS) is composed of the current Hand Strength (HS) and its potential to improve or deteriorate (PPOT and NPOT):

where:

  • is the Effective Hand Strength
  • is the current Hand Strength (i.e. not taking into account potential to improve or deteriorate, depending on upcoming table cards
  • is the Negative POTential (i.e. the probability that our current hand, if the strongest, deteriorates and becomes a losing hand)
  • is the Positive POTential (i.e. the probability that our current hand, if losing, improves and becomes the winning hand)

Pseudocode

[edit]

Hand Strength (HS) will enumerate all possible opponent hand cards and count the occurrences where our hand is strongest (+50% of the cases where we are tied):

HandStrength(ourcards, boardcards) {
    ahead = tied = behind = 0
    ourrank = Rank(ourcards, boardcards)

    for each case(oppcards) {
        opprank = Rank(oppcards, boardcards)
        if (ourrank > opprank) ahead += 1
        else if (ourrank == opprank) tied += 1
        else behind += 1
    }

    handstrength = (ahead + tied / 2) / (ahead + tied + behind)

    return handstrength
}

In addition, EHS will consider the hand potential (i.e. its probabilities to improve or deteriorate):

HandPotential(ourcards, boardcards) {
    // Hand potential array, each index represents ahead, tied, and behind
    integer array HP[3][3] // initialize to 0
    integer array HPTotal[3] // initialize to 0
    ourrank = Rank(ourcards, boardcards)

    // Consider all two card combinations of the remaining cards for the opponent
    for each case(oppcards) {
        opprank = Rank(oppcards, boardcards)
        if (ourrank > opprank) index = ahead
        else if (ourrank == opprank) index = tied
        else index = behind
        HPTotal[index] += 1

        // All possible board cards to come
        for each case(turn, river) {
            // Final 5-card board
            board = [boardcards, turn, river]
            ourbest = Rank(ourcards, board)
            oppbest = Rank(oppcards, board)
            if (ourbest > oppbest) HP[index][ahead] += 1
            else if (ourbest == oppbest) HP[index][tied] += 1
            else HP[index][behind] += 1
        }
    }

    // Ppot: were behind but moved ahead
    Ppot = (HP[behind][ahead] + HP[behind][tied] / 2 + HP[tied][ahead] / 2) / (HPTotal[behind] + HPTotal[tied])
    // Npot: were ahead but fell behind
    Npot = (HP[ahead][behind] + HP[tied][behind] / 2 + HP[ahead][tied] / 2) / (HPTotal[ahead] + HPTotal[tied])

    return [ Ppot, Npot ]
}

Applicability

[edit]

EHS is applicable to a variety of poker games, including Texas hold 'em and Omaha hold 'em. Due to the complexity of the algorithm, it cannot be computed manually and is typically used in artificial intelligence contexts.

References

[edit]