Weighted Ranges


Use the '@' symbol at the end of a sub-range to weight it (example: "AK@100, AQ@50, AJ@10"). For a weighted range, all sub-ranges must be given a weight between 1 and 100, and weights belong at the end of each comma-separated sub-range (or after closing parentheses). If a hand is weighted more than once, the largest weight 'wins'.


Conventional (un-weighted) ranges of hands can be thought of as sets of hands, where we define a set in the usual way as a collection of distinct elements. For instance, "AA,22" maps to the set of hands [AsAh, AsAd, AsAc, AhAd, AhAc, AdAc, 2s2h, 2s2d, 2s2c, 2h2c, 2h2d, 2c2d]

Weighted ranges, on the other hand, correspond to weighted sets; a weighted set is a convential set combined with a function that maps each entry in the set to a weight. We will use the '@' symbol to denote weights. For instance, if we want the weighted range of aces and deuces where aces are twice as likely as deuces, we could write it as "AA@2,22@1", which would correspond to the weighted set [AsAh@2, AsAd@2, AsAc@2, AhAd@2, AhAc@2, AdAc@2, 2s2h@1, 2s2d@1, 2s2c@1, 2h2c@1, 2h2d@1, 2c2d@1]

Semantics of Choosing Random Weighted Hands

When we choose a random hand from an unweighted range such as "AA,22", we can think of this process as reaching our hand into a bag with 12 hands and pulling one out. With a weighted range, we use the same process, but each hand appears in the bag a number of times equal to its weight. For instance, our "AA@2, 22@1" 'bag' contains 18 elements - each pair of aces appears twice, and each pair of deuces appears once.

Note that weights are relative - there is no difference in choosing a random hand from "AA@2, 22@1" and "AA@100, 22@50".


We add the '@' symbol to Generic Range Syntax for weights.

Weighted Range Rules Details

All weights or no weights

Weights are integers between 1 and 100

Highest weight 'wins'


The '@' symbol is given precedence just after the ':' and '!' symbols:


Weights must come at the end of every comma-separated sub-range or after parentheses:

The right hand side of a '!' or ':' cannot be weighted. The precedence rules means this usually isn't a problem if you always put weights at the end of each sub-range:

Building our Intuition

If we race "AA,22" vs a random hand, we expect the equity to be the average of "AA" vs a random hand, and "22" vs a random hand, and indeed, it is:

ProPokerTools Odds Oracle Results (2.1 Professional)
All-in Equity

Equity %85.2037%14.7963%
Equity %50.3340%49.6660%
Equity %67.7689%32.2311%

If we race "AA@2, 22@1" vs a random hand, aces are twice as likely. Therefore, we expect the equity to be (85.2% * 2 + 50.33%) / 3, which comes to 73.58% Happily, our intuition is confirmed:

ProPokerTools Odds Oracle Results (2.1 Professional)

600000 trials (randomized)
All-in Equity
Equity %73.5803%26.4197%