A Toy Game Experiment on River Range Composition That I Can't Explain
I've been running a series of toy game experiments, and I've come across a result that seems to contradict my intuition about MDF and river equilibrium. I'm hoping someone with a stronger game theory background can explain what's happening.
Toy game setup
**Board:** 2♦ 2♣ 2♥ 2♠ 3x (effectively 22223)
**Pot:** 100
**Effective stack:** 250
**Street:** River
Both the flop and turn have already gone check-check.
Ranges
Both players start with exactly the same range: 11 pocket pairs from 44-AA
Bet sizes
- B10
- B33
- B75
- B100
- B150
- B250 (Jam)
The experiments below only concern the line where OOP checks, IP bets, and OOP responds.
---
Original equilibrium
OOP's checking range
Total checking range:
- **37.2 weighted combos**
Composition:
- QQ+: **6.265 combos**
- 44-99: **30.96 combos**
Observations:
- Strong hands account for only about 20% of OOP's checking range.
- Before checking, OOP has 50% equity.
- After checking, his range equity drops to roughly 39%.
---
IP's response to the check
IP checks roughly half of his range and only uses two betting sizes: B75 & B150
Range construction:
Checking: 66-JJ
Betting: QQ+
More specifically:
- QQ: pure B75
- KK: mixes between B75 (preferred) and B150
- AA: mixes between B75 and B150
Bluffs:
44-55 are used as bluffs and balanced appropriately.
---
OOP's response versus B75
QQ+: continue naturally
44-55: pure fold
66-99: These four bluff catchers **all mix between calling and folding at roughly 50% each**.
So the defense is **distributed across the entire bluff-catching region**, not concentrated at the top.
---
Experiment 1
I wanted to test whether this mixing actually matters.
So I node-locked OOP.
Instead of mixing every pair: 66-99 at about 50% each, I forced him to play a "top-up" strategy:
- 66: fold 100%
- 77: fold 100%
- 88: call ~100%
- 99: call 100%
Everything else stayed identical:
- QQ+ strategy unchanged
- overall defense frequency unchanged
The weighted calling combos are identical.
---
Result
IP completely changes strategy.
Originally:
- checks about 50%
- uses B75
- uses B150
After the node lock:
- checks about 34%
- uses B75
- jams
- B150 disappears
Value construction changes dramatically.
Originally:
- TT-JJ checked
- QQ+ value bet
Now:
- TT-KK all become pure B75 value bets
- AA jams
OOP loses roughly **4 bb** in EV.
This already surprised me because the overall defense frequency stayed the same.
---
Experiment 2
I then wanted to understand the follow-up node.
So I locked IP to this new betting strategy.
Against B75, OOP's equilibrium response was:
Value:
- KK-AA shove
Bluffs:
55-99
Each bluff hand mixes around 8%.
Against the shove, IP:
- calls roughly 37%
- folds roughly 63%
Specifically:
- KK pure calls
- TT-JJ mix
- 44 pure folds
---
Experiment 3
Now I repeated the same type of node lock.
Instead of bluff-shoving with all five pairs 55-99, I forced OOP to bluff only with the top of that bluff region.
First:
99 only
Later:
88 and 99 only
Importantly:
**The total weighted bluffing combos remained exactly identical.**
Original shove range:
55 = 0.39
66 = 0.39
77 = 0.44
88 = 0.44
99 = 0.44
Total bluffs = **2.10 combos**
Node-locked:
99 = **2.10 combos**
Total bluffs = **2.10 combos**
Value region stayed identical:
KK = 2.17
AA = 2.934
So the shove ranges become:
Original
Bluffs:
55
66
77
88
99
Value:
KK
AA
versus
Node-locked
Bluffs:
99
Value:
KK
AA
The weighted combos are exactly the same.
Only the **raw composition** changes.
---
Result
IP now folds around 80% and only calls KK.
TT and JJ become pure folds.
Repeating the experiment with bluffs spread across only 88 and 99 produces essentially the same defense strategy.
---
EVs
IP EV before facing the shove:
Original: 67.6638
99-only: 67.6663
88+99: 67.6662
---
After facing the shove:
Original: 14.6079
99-only: 14.4954
88+99: 14.5955
---
Why I'm confused
My understanding of river theory is:
If
- value combos stay identical,
- bluff combos stay identical,
- sizing stays identical,
then the optimal defense frequency should depend only on the bluff:value ratio.
The shove ranges are:
Original
Bluffs = 2.10 combos
Value = 5.104 combos
Node-locked
Bluffs = 2.10 combos
Value = 5.104 combos
The only difference is that the bluffs are concentrated into one (or two) hand classes instead of being spread across five.
Yet IP suddenly overfolds and TT/JJ disappear from the calling range.
I don't understand why the **raw composition alone** would matter if the weighted ranges are mathematically identical.
---
My questions
1. Is there a game-theoretic reason why concentrating the bluff support changes the equilibrium despite identical weighted bluff/value ratios?
2. Is this related to equilibrium support and indifference conditions rather than MDF?
3. Does raw combo distribution carry strategic information that weighted combos do not?
4. Or is this simply a solver artifact (tie-breaking, node-lock implementation, numerical tolerance, etc.)?
I'd really appreciate any explanation. At this point I'm less interested in the specific toy game and more interested in understanding the underlying game-theoretic principle, if there is one.
5 Replies
Nice to see some solver experiments in here!
In experiment 1, you inadvertently introduced small changes into OOP's strategy facing B75. Perhaps turning some of their 66-99 bluff raises into calls, incentivizing IP to bet more thin value. The 4bb EV drop you see is just a byproduct of measuring at the wrong node. You're measuring facing the bet, rather than EV at the root node.
Experiment 2 and 3 are likely similar types of user error.
Thanks for taking the time to look at the toy game and for pointing that out. I completely missed the fact that I may have unintentionally changed OOP's response to B75 while making the node lock. Looking back, measuring EV facing the bet instead of at the root node also seems like a very plausible explanation for what I was seeing.
Since I'm still fairly new to solver work and toy games, do you have any general advice on designing experiments or avoiding common mistakes when drawing conclusions from node locks? Are there any particular types of experiments that you think are especially valuable for developing a deeper understanding of poker strategy?
More specifically, if you could go back to when you first started working seriously with solvers, are there any experiments or concepts that produced outsized improvements in your understanding of the game? I'm trying to focus on the highest-leverage areas rather than just running random simulations, so I'd be very interested to hear your perspective.
Thanks again for the feedback.
Some useful advice for working with nodelocks:
Compare EV of some hand's actions before and after nodelocking. What parts of the range gain and lose?
Paying attention to what doesn't change after nodelocking is arguably more important than what does change. The invariants are important.
Similarly, if you notice that something doesn't seem to matter (e.g. every flop sizing you tests gives about the same overall EV), that is very important info. Most people dismiss the stuff that doesn't change, but imo, that's where the most profound insights are found.
Beware of fragile nodelocks. In this toy game you locked OOPs entire strategy (check-call), which means they have no way to push back, so IP maximally exploited microscopic imperfections in the opposing strategy.
Beware of stacked assumptions. If your exploit relies on a chain of 5 assumptions A -> B -> C -> D -> E, and any one of those assumptions makes your exploit bad, then it's probably not sound.
Feel free to experiment without modelling reality. You can start with gto ranges then just see what happens if OOP for somme reason doesn't have any middle pair. How does that change IP's strategy? The point is to understand cause->effect, not memorize.
Multistreet nodelocks are a pain because every community card leads to a different set of nodes. Instead, try using "incentives". These are very powerful because you can apply them across every turn and river card at once. GTOplus has an article about that here: https://www.gtoplus.com/special-menu/
When designing toy games, find the minimum representation needed. The point is to model something small enough that you can solve it with pen and paper.
The biggest conceptual upgrade for me was probably understanding this: https://blog.gtowizard.com/the-three-laws-of-indifference/
Thank you again for such a thoughtful reply. This is exactly the kind of advice I was hoping for.
I've actually watched all 12 of your GTO Wizard theory videos, and despite that, it still takes me a long time to figure things out on my own. Reading comments like this makes me realize how much practical experience goes into asking the right questions and designing good experiments, not just knowing how to operate the solver.
If you ever have the time, I think a video on this topic—how to design meaningful solver experiments, common pitfalls with node locks, and which experiments give the biggest conceptual breakthroughs—would help a lot of people. There are plenty of videos explaining *what* the solver does, but far fewer that teach people *how to learn* from a solver effectively.
Thanks again for taking the time to share your experience.






