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]

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.

- AA@10, KK@8, QQ@5 - Aces weight 10, kings weight 8, queens weight 5
- AK:xx@10, AK:xy@5 - Ace-king suited weight 10, Ace-king offsuit weight 5
- 15%@10, 16%-50%@5, 51%-100%@1 - Top 15% weight 10, 16%-50% weight 5, everything else weight 1

- AK, JT -> legal
- AK@10, JT@2 -> legal
- AK@10, JT -> illegal

- AK@2,JT@3 -> legal
- AK@0, JT@105 -> illegal
- AK@5, JT@1.5 -> illegal

- AA-22@5, AA@10 -> aces has weight 10.
- (AA-22@2) @4, AA@1 -> aces has weight 4
- omaha - AA**@10, KK**@5 -> KKAA has weight 10

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

- AA@10, KK@5 equals (AA@10), (KK@5)
- AK:xx!ss@10, KK@2 equals ((AA:xx!ss)@10), KK@2

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

- AA:xx@10,KQ !xy@5 -> legal
- AA@10:xx -> illegal
- (AK,JT,23) @10, JT@4 -> legal

- AK-A2:xx@10 -> legal
- (AK-A2@10) : (xx@5) -> illegal
- AK!JT@10 -> legal
- (AK@10)!(JT@2) - > illegal

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

AA | * | |
---|---|---|

Equity % | 85.2037% | 14.7963% |

22 | * | |
---|---|---|

Equity % | 50.3340% | 49.6660% |

AA,22 | * | |
---|---|---|

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

AA@2,22@1 | * | |
---|---|---|

Equity % | 73.5803% | 26.4197% |