Skip to main content

Calculation, strategies and other concepts

Why is solver sometimes choosing action with negative EV?

The EVs are calculated against current solution (against current opponent's strategy). This means those are not perfect equilibrium EVs as those are unknown. The more precise the solutions gets the smaller EV differences between mixed actions become. In a perfect equilibrium (and only then) all the EVs for mixed actions have the same EV. Perfect equlibirum has exploitability of 0.

Is it possible that GTO is making negative plays to increase EV of other actions?

No, perfect GTO always maximizes EV with each hand in every spot. There is no room for -EV actions. When perfect GTO mixes actions those have the same EV. The mixing is done to guarantee the opponent can't get higher EV.

Why so many options, bet and check, raise or call so frequently have basically the same exact EV?

This is one of the biggest surprises about gto solutions. It turns out that especially on the flop there aren't really a clear bets or very few of them. Usually the differences are quite clear between calls and folds (at least for most hands) but check/bet decisions and often call/raise ones turn out to be close.

It doesn't mean you can just start checking all those mixed hands or betting them as that would open a huge opportunity for the opponent to exploit you. This means it's a good idea to focus on general range composition for actions but not necessirily exact hands and frequencies.

What are two numbers returned by solver command calc_ev_pp?

The two numbers returned for each hand are evs and matchups. The solver always returns evs in global format though (so calling 100$ and then folding is -100$, not 0 as the viewer shows).

What are matchups?

You can think of it as probability, although it's not normalized to 1 (so for example if there are 3 events, and they have 2,3,3 matchups it means probability is 2/8 3/8 3/8 respectively). It's the real probability of certain action happening given current starting ranges and strategies of both players.

The thing is that if you for example have a range of AA and 77 on 972 flop and you wonder what average EV is you can't just take (EV(AA) + EV(77)) / 2 because AA is more probable than 77. You have to use matchups for that (EV(AA) * matchups(AA) + EV(77) * matchups(77)) / (sum of matchups).

Technically one matchup is counted when hand of weight 1 plays a single hand against other hand of weight 1. E.g. on on the river case if OOP has total of 2 combinations and IP has 4 combinations, there will be total of 8 matchups.

  • Two matchups of hands with smaller weights (against 0.5 against 0.4) will be counted as multiplication of their weights (0.2 in this case).

  • Matchups represent the real frequencies of things happening. Matchups are the occurences that special flop happened ... like if there are two flops A, B and the matchups are A-3, B-6, that means, A happened three times and B happened twice as often, namely 6 times.

  • Matchups in a split point (e.g. decision of new street) are calculated as a sum of matchups in children, and EV are averages of EV in children weighted with matchups.

  • Matchups have some interesting properties:

    • Total matchups OOP = Total Matchups IP (that is because each matchup is played by both players)
    • matchups from equity calculation = matchups from EV calculation (this is because they iterate the same number of hands - equity represents EV assuming check-down of all hands)
    • In aggregation plugin Sum of matchups for all flops will be the same number as sum of matchups of all player’s hands. (this is because it’s the same thing, but splitted by different criteria).

What is the difference between Range and Strategy?

They are similar in a sense that they both are related to probabilities. Weight of a hand in Range is the relative probability of having a certain hand. So if AA has weight 1 and KK has weight 0.5 it means that probability of having AA is twice as high as having KK.

Strategy is a relative probability of performing a certain action with particular hand. In a single node strategies for all possible actions always add to 1 for a given hand.

Range of a player in any spot can be calculated as his starting Range multiplied by Strategies of all decisions a player has made.

So for example after flop check-raise from OOP player his range is equal to is his starting range multiplied by strategy of checking the flop multiplied by strategy of raising after opponent bet.

If starting range had AJs with weight 0.75, opening strategy for AJs was 70% Check / 30% bet, and after opponents Bet strategy was Fold 0% / Call 60% / Raise 40% then checkraise Range of AJs would be 0.75 * 70% * 40% = 0.21

What is the frequency / real frequency presented in the viewer?

In the viewer you can see two different numbers denoting action frequency. One is the number of combos (e.g. 60 combos CHECK, 40 combos BET) and these numbers depend only on the range of a player. However in reality the frequency of plays will be different as they will be affected by villain's range with card removal effect.

In an extreme case - Let's assume that hero range is either As or Ks, and villain's range is only As. If hero checks all his Ks and bets his As then he checks 50% of his combos, but because he never really has an Ace (because the villain always has it!) the real check frequency will be 100%.

I have saved a small tree (without rivers). What happens when I load this save and navigate to a river node?

Even if the save doesn't have rivers it's possible to browse the whole tree.

The single river is a very small part of the whole tree and the solver is capable of recalculating it on the fly almost instantly.

There are few exceptions:

  • The ranges are empty. The solver is unable to recalculate strategies in the nodes where one of the ramges is empty.

  • Aggregation reports. Resolving a single node is negligible, but doing river reports requires resolving thousands of lines and can cause cosiderable delays. Therefor it's not recommended to run aggregation reports on the rivers on small trees.

Aggregation Report: How is total average in "Runouts aggregated frequencies analysis over multiple files" calculated?

It's the weighted average of EV over all flops weighted by real frequency (Matchups times Flop Weight).

Aggregation Report: I calculated total averages myself and it doesn't match output in report – why is that the case?

The most common mistake are mistakes regarding Action EV's and EQR. To calculate actions EV's weights must include both Matchups and Action freq (Weight = Matchups times Action Frequency). The formula for EQR is: 100 times (Sum of (Player EV times Matchups) / Sum of (Player EQ times Matchups)). See Example There still might be minor discrepancies, but – if calculated correctly – differences should be negligibly small (we output data with certain accuracy).