Poker Toy Games III

Chill lowkey blog post. Mostly unfiltered stuff. Pretty impartial to posting this. But deciding to put it up because hey, maybe someone will find it valuable.

Sim 1: Enabling turn bets on AA/A2o/A3o vs KK on 888 flop

We slowplay AA a lot less. This is because AA reward when check-raising with AA is higher because not only does KK have to defend the flop at some frequency, it also has to defend the turn at some frequency. So we don’t need to have as many AA in our checking range to allow it to realize its full equity.

We also bring along more A2o/A3o because not only do we need to bluff on the flop, we also need to bluff the turn.

8 and A turns are nutted for us, K turns are shit, and everything else is very straightforward.

Turn strategy is also super interesting. On the turn, we have basically a mirror situation like on the flop. Basically, we fastplay AA at some frequency along with bluffs to make KK indifferent to calling or folding. But we also slowplay AA at some frequency to realize the equity of our checking range. That’s very, very cool.

Sim 1 nodelock 1 - An opponent who plays mostly GTO but will get very scared against a check-raise

If we nodelock KK to always fold to a check-raise (and lock its betting frequency facing a check) we always slowplay AA, and then check-raise our entire range if KK bet. I think what happens is the following sequence of adjustments:

And then the entire OOP range slowplays, hoping for a bet from KK. If KK bet, then the entire range check-raises and gets to win immediately. If KK check, then OOP has to play the turn.

Sim 1 nodelock 2 - An opponent who plays very passively but is an overcaller - Always calls a flop bet, but always checks back when checked to

AA never slowplay. It brings along some A2o/A3o to bluff with on the turn.

Rest of the A2o/A3o check the flop and get to see a free turn! Don’t need any protection.

Sim 2: Enabling turn and river bets on AA/A2o/A3o vs KK on 888 flop

Again, we slowplay AA a lot less because when we check-raise with them, KK has to defend not only on the flop but also on the turn and river, so we can win much bigger pots and the EV is greater. So in order to realize all the equity of our checking range we don’t need to slowplay as much.

When we fastplay AA we also bring along even more A2o/A3o because not only do we need bluffs for the flop and turn but we also need bluffs for the river.

Also, KK has incentives to deny equity on the flop and turn, so it wants to bet, but it never bets the river when checked to. So on the river, we never slowplay AA.

Sim 2 nodelock: KK always folding turn on a blank to a bet

I wanted to try a sim where I nodelock bad turn strategies across all turn runouts just to see how GTO thinks. For this sim, I made KK always fold on a blank turn to a bet (typically it mixes at the right frequency to prevent us from being able to bet our bluffs profitably as opposed to indifferently).

I was pretty sure what happens here is that OOP will bluff ATC on the flop because on most turns it can win the pot for free.

What ended up happening is that KK adjusted its flop strategy - it mostly folded (to prevent itself from getting exploited on the turn) and raised the other part of the time.

Obviously that’s not what I wanted so I then nodelocked KK original strategy of call/folding at the right frequency.

And indeed OOP bet ATC on the flop, to bring ATC to the turn, to win the pot undisputed on most turns.

Also, just a fun fact - Pio does this great thing where if you nodelock a turn, it will nodelock all other turns that are conceptually the same suit. So if you nodelock something on a 2c turn on a 8c8s8h flop, it will also nodelock the same strategy for 2s and 2h, because they are conceptually the same (same suit as one of the 8 on the flop). It doesn’t nodelock for 2d.

Sim 3: Flop bets only, AA/KQo/A2o/A3o vs JJ on 888 flop

Interesting. So we check our entire range. JJ always bet to deny equity. And when we raise, we raise with AA and KQo only. Muck everything else. Call with the remainder of KQo cause we’re getting the right pot odds to make a +EV call.

The reason we don’t call KQo 100% and use A2o/A3o to bluff is because when we can bluff with higher equity hands, JJ is forced to call more frequently to make us indifferent to bluffing with our worst bluff. Consequently, AA get value more frequently.

Why don’t AA ever fastplay? Obviously it’s because its EV is higher on a check. That’s because JJ is forced to fastplay because that denies equity from all our weak hands. But that allows AA to get more value by slowplaying.

Sim 3 nodelock 1: JJ always check flop back

So here I guessed that we would always fastplay AA, and mix in KQo for our bluff to get the maximum calling frequency from JJ. And just check to realize equity with the rest of our range. And I was right!

Sim 3 nodelock 2: Adding in K2o/K3o/Q2o/Q3o to OOP

Nothing changes. We check our whole range, then raise with the same range of AA and KQo, and then muck the rest. I only tested this to make sure that EV of JJ betting goes up when we add more weaker hands to OOP’s range, which it does.

Sim 4: Flop/turn bets, AA/KQo/A2o/A3o vs JJ on 888 flop

My first reaction to this sim was confusion. In the previous sim, when only flop bets were allowed, OOP checks range and then JJ always bets.

Now, OOP fastplays AA (and some bluffs) some portion of the time. Why?

Sim 4 nodelock 1: Nodelock OOP to check range

I nodelocked OOP to check its range on the flop and JJ check back 100% of the time. I don’t get why it’s different.

I feel like there’s a connection I still don’t understand about what it means when OOP range is indifferent to slowplaying/fastplaying it’s nuts, and IP is indifferent to realizing equity or checking, etc.

Sim 4 nodelock 2: Nodelock OOP to check range, and JJ to always bet when checked to

Ok I nodelocked OOP to check its range on the flop, and made JJ bet 100% of the time, just like sim 3. Sim 3 is the same setup except only flop bets are allowed.

What happens is KQo never calls. Why? Well KQo can’t profitably call anymore. Previously, KQo could call and go straight to showdown which means we could use its equity to calculate pot odds. Now, KQo can’t go straight to showdown, because it has to face another bet on the turn. So it’s no longer getting the right pot odds to call.

Here’s another interesting question. KQo and A2o/A3o are all indifferent to bluffing or folding (0 EV) yet AA mixes in A2o/A3o as bluffs instead of KQo at some frequency. KQo has more equity against JJ than A2o/A3o, so if AA always bluffed with KQo, AA could mix in more combos of bluffs. So why do we mix in A2o/A3o?

I believe it’s so that on K and Q turns, we can still have some bluffs.

Here’s one more interesting detail. Facing a check-raise, JJ GTO mixing frequency between call/fold is now 87% call, whereas it was 78% call when only flop bets were allowed. I think this mixing frequency is based on KQo - if it was lower, we could always profitably bluff KQo.

I nodelocked the calling frequency of JJ facing a check-raise to be lower and indeed, KQo is check-raising at a 100% frequency instead of mixing now.

But here’s the question. Why does JJ have to call at an 87% frequency instead of 78% frequency now?

I have two theories why:

If X is JJ folding frequency, KK EV is:

This formula holds up in sim 3 (correctly calculates JJ folding frequency). But in this sim, it doesn’t hold up. So, what gives?

I think we need to change the formula because we don’t go straight to showdown in this sim. And I took a look at some turns and realized what’s going on.

Basically, on a blank turn (2-7, 9-T) which doesn’t improve either player’s range, KQo actually gets to realize its equity some of the time. This is evident because on these blank turns after checking KQo at some frequency (along with AA to protect it), JJ also checks back at some frequency.

Additionally, we can’t use the equity of KQo to calculate the EV of its actions on the flop because we don’t go straight to showdown. We have to calculate its EV across the various turns.

On an 8/Q/K/A turn (13/49), KQo gets to win the pot outright because these turns improve too many of OOP’s bluffs, and IP has to fold JJ to a bet 100% of the time.

On a J turn (4/49), KQo loses the pot, so no harm there.

But on the rest of the blank turns, KQo can realize its equity some of the time. Its EV is 24 on blank turns, and the pot is 200, so let’s say its equity on these turns is 12%.

Then, KQo overall equity heading to the turn is 100%(13/49) + 12%(32/49) = 34%.

If we plug this new KQo equity number into the original equation, it goes from:

Which is too high. I was pondering what was wrong in my calculations until I figured it out. When we have KQo, we take away 2 of our outs. So the new calculation should:

The actual folding frequency of JJ facing a check-raise is 13%. It’s close enough I suppose…

Going back to the original sim 4

Okay so I went on a bit of a tangent. The simple reason why JJ doesn’t bet if OOP range checks is because OOP can raise more often than before because it can bluff not only on the flop but also on the turn. So AA fastplay more, and slowplay less, until JJ become indifferent to betting again when checked to.

Musings on EV and reasoning about solver

I’m realizing that when considering how play on future streets across all runouts affects a particular hand’s decision at any decision point, all the information from the future can be boiled down to the EV of the potential actions. If you can correctly distill the (relative) EVs of the potential actions of a given hand in any given spot, that’s all you need to know to make a decision.

The thing is, these decisions do cascade backward and affect the strategy. And that’s how GTO creates its strategy AFAIK - it plays smaller games on various river runouts, updates the EVs, and then that information cascades backwards and affects the strategy on prior streets.

Once you start to add in lots of hands, bet sizes, and multiple streets of betting, it’s pretty obvious that recreating an omniscient strategy is impossible. There are just way too many river spots and way too many hands. Then, exploitative poker becomes about navigating a dark jungle better than your opponent. No one can see the full jungle.

Think about balance from both sides of the equation

All the sims I’ve run so far, OOP has been polarizing against IP, and I always think about balance from what the IP defender should do to make OOP indifferent.

The thing is, OOP also needs to balance its ranges so that IP is indifferent to call/fold against a bet, or bet/check against a check.

If OOP is even slightly overbluffing on a bet, IP should always call. If OOP is even slightly underbluffing on a bet, IP should always fold. It’s that simple.

If OOP is even slightly slowplaying too much (assuming the rest of the strategies are GTO), IP should never bet to deny equity. If OOP is even slightly slowplaying too little, IP should always bet to deny equity.

It’s literally a leveling game.

Caveats of nodelocking to keep in mind

The issue with nodelocking on individual turn/river runouts is that GTO won’t adjust the strategy of previous streets as much because you’ve only nodelocked one runout among the various turn and turn/river runouts.

Additionally, even when you nodelock one line of action on a given street, GTO will adjust its strategy on all other streets and lines of action to adjust. If you don’t have a holistic and thorough understanding of how GTO creates its strategy, you won’t understand or even be aware of all the various adjustments that GTO makes.

Additionally, even when you nodelock one line of action to how you think your opponent is going to play, GTO makes its adjustments assuming that your opponent is still playing GTO on all other streets. So if you nodelock some flop mistake, GTO will make its adjustments assuming that player still manages to play perfect GTO on all turns and rivers.

This obviously doesn’t negate the utility of nodelocking as a tool, it just means you should keep these things in mind when you’re using it.

The simple discreteness with which GTO exploits non-GTO opponents

GTO against a GTO opponent is actually extremely difficult to replicate, but GTO is actually very discrete in how it exploits non-GTO opponents. So running exploits is actually very simple (although not necessarily easy).

For example, if you’ve nodelocked your opponent to overcall the flop (but play GTO on turns and rivers) GTO will never bluff its flop bet, but it will bring along enough bluffs to create the right bluffing frequency on turns and rivers. So net it’s still betting some bluffs on the flop but that doesn’t mean it’s actually bluffing the flop.

If you’ve nodelocked your opponent to overfold the flop (but play GTO on turns and rivers) GTO will bluff 100% of the time with its bluffs that are no longer indifferent to bluffing or giving up (higher EV on a bluff) but then balance properly on the turn and river.