Uncategorized

Simple Postflop – A Different Yet Familiar Approach on GTO Solvers

Welcome to 2020, where GTO Solvers are mandatory if you are serious about working on your poker game!

What do solvers do exactly? Well, a Poker GTO Solver uses computing power and very efficient optimization algorithms to figure out the perfect, or close to perfect (exploitable for a certain amount of bb/100 hands that can be precisely calculated), and uses two ranges which are in position and out of position, respectively, and makes them play against each other for millions of iterations (nGTO) or all possible scenarios, so that it can evaluate which are the most +EV moves, so you know how to play your range against your opponents in every poker postflop (and preflop! We’ll see that in a later article) spot.

In game theory, the Nash equilibrium is a concept that describes the perfect solution of a non-cooperative game involving two or more players in which each player is assumed to know the strategies of the other players. If each player has chosen a strategy and no player can benefit by changing strategies while the other players keep theirs unchanged, then the current set of strategy choices and the corresponding payoffs constitutes a Nash equilibrium. The Nash equilibrium is one of the foundational concepts in game theory.

This is what you call GTO in poker, or Game Theory Optimal. Having the best strategy against your opponent’s strategy that will be the best against yours. The applications of  this theory in poker are tremendous, and based on this scientifically proved theorem, poker solvers appeared.

Usually, to calculate such complexity, you’re going to need a supercomputer, but luckily the ingenuity of the Simple Poker programming team has made it possible to solve very complex poker trees on relatively cheap and less powerful desktop PCs, even on low end machines, with very high precision (close to perfect accuracy). This is possible through implementations of different algorithms that cater to computer speed and the amount of RAM that the computer has. Tree compression is being used so that even if you have insufficient memory, you can still get the solution solved for you.

This way, users with powerful PC could use the fastest and most resource-intensive algorithm, while owners of weak computers can use less resource-intensive algorithms.

When browsing the solved tree, you will realize that the program includes a set of different representations of solutions that allow for a comprehensive and qualitative analysis of the solutions obtained. Sets of metrics in the reports characterize the parameters of decisions, and also serve as valuable sources of information for analyzing the solution.

Due to the flexible configuration, the program can be used to calculate Holdem with both fixed (Fixed limit) and unlimited sizes of bets. The user can build different betting trees, depending on which version he plays – NL Holdem or FL Holdem.

The Solving Part

Starting out in the software we have an easy to use interface that helps us configure the tree so that it’s relevant towards our situation.

As you can see, this is the basic configuration and I already introduced a few variables into the main window, the flop and the Effective Stack (98.00 meaning 98 blinds effective), and the Main Pot which you can change to the size of the pot on the flop. This is relevant size for CO minraise and BB call. If CO would be minraising and SB would have 3bet to 10bb and CO would have called, we’d have made Eff. Stack 90 blinds which the players could have behind and Main Pot 21(10+10+1 that Big Blind folded).

After choosing flop and stacks, it’s time to choose bet sizes. You get a bet sizing distribution window for both players where you can actually save and load presets, and customize to your heart’s content. There are also a few cool options like rounding bets to integer sizes, which is really useful for learning.

Now, we need to select the ranges being played.

You can load and save ranges for immediate action, and here you can see I selected an example BB vs CO defending range by calling. I excluded the top of the range because that’s going into the 3betting range.

It’s time to make some calculations! Click Calculate Flop to calculate everything now, or Add Job to add this scenario to the queue. If you press the combination Shift+J you will get shown a list of pending jobs which you have added previously. You can run as many as you want, solve, go make some coffee, come back later on, pause, do some important stuff, prioritize certain solves, come back, start solving again. You know, rip and tear until it’s done.

You can see at the top that you can even select the respective algorithm and precision with which you want to calculate the trees. Simple Postflop has three algorithms, A1, A2 respectively A3. These differ in the following aspects:

A1 is the most RAM-efficient one. If you have a computer that has 8GB of RAM for example, I’d recommend going with this one. It uses tree compression to fit the tree into your memory and make it solvable even on low end PCs. Slow in speed but gets jobs done that would have otherwise been impossible.

A2 is the most stable one, it uses a moderate amount of RAM, it has the best precision results and it outputs the closest to GTO solutions. It is faster than A1 but you’ll need a medium spec PC at least.

A3 is the top-of-the-line algorithm, by far the fastest cruncher, it takes a lot of RAM (18GB for SRP situation), and reaches in great speeds the optimal solution. You’re going to need a lot of memory for this one but if you DO have at least 32gb of RAM I’d recommend going for this one. It just solves faster and outputs solutions sooner.

As of selected precision, you don’t need to go to Very High, because the solutions converge very closely on High too. The difference is extremely minimal and it won’t help you in real game.

One thing I see here and I really liked and I haven’t encountered in other solvers is the ability to select how many threads your processor will use, so that maybe if you want to browse the Internet or still play poker while solving your batch you’ll leave some processor room for that too!

Job list and also general settings

Once we calculate the flop, it sends the tree into RAM and starts the calculation, using how many threads you allocated it. I did this using 18/24 threads, so I can still write this article while solving. 🙂 Alternatively, you can click on Add Job so it adds the current tree to the job list and you can solve it later.

Upon completion, you get presented with the full solution strategy and EVs. Right off the bat, one thing that I really like about Simple Postflop is that you get to save the solutions into very small files, usually lower than 1MB, compared to other solvers that might take a few gigabytes for one solution. Imagine if you’re scripting 184 flops and each takes a few gigabytes or even 10+, how much space that would take!

This is how an solution folder would look like, so you don’t need a few terabytes of space for solutions and all these would fit into any low-end spec laptop.

The solution on the flop presents itself as we see that we 2/3 the flop quite a high percentage of times, 52.89%, and we only bet the 1/3 sizing 3.89% of times. At this point, we can definitely simplify the solution and make it more accurate by removing the 1/3 bet sizing completely from the flop. Removing a bet size from the tree not only makes it simpler and more accurate, but it also changes it completely, so you’re going to have to click Calculate Flop again. Thankfully, this time it will take way less, because the tree is more simplistic (and with better IRL applicability!).

And there we have it, after a short while, we got the full solution. Apparently, CO likes to polarize on this board to 55% of range. You can see all the hand groups that are being bet. Top pair is getting bet a lot, while 2nd pair and 3rd pair less and less, and this is also true for kickers. The lower TP kicker, the less often we bet, the more we include it in our checkback range.

We try to maximize the solution usability in real life poker by appending only the 1/3 pot bet and resolving the tree. This time, we’re faced with a 75% bet / 25% check solution. The EV of this 1/3 pot bet only solution is 2.889(top mid where it says Player 2, if you click on Flop) compared to the previous EV of 2.928 when we were doing both bet sizes and 2.929(same as mixed solution) when we were doing 2/3 pot only. The 2/3 pot bet is the route to take here, for sure, with zero EV loss. Now let’s see what happens if we bet 1/3 full range and 2/3 full range. We’re going to node lock to 0 hands the checking node from CO on the flop and resolve both of them, to see if we can get a decent EV that’s close to the original mixed solution and very easy to implement. This will take way less time due to reducing the number of options to be calculated.

We see that by betting 2/3 full range our EV drops drastically to a 2.808. This is not a great line to take, considering we’re lowering our share of the pot by a lot, and if we bet 1/3 full range, our EV also drops to 2.872(less significant loss). Considering the drop is too much in the 2/3 full range case, we conclude that it is best to stick to a full range 1/3 bet on the flop, for the easier implementation. EV dif in percentage from original pot for 1/3 will be 2928 – 2872 = 56, we divide 56/2928 = 1.91%. That’s quite a bit even if this solution is way better than 2/3 full range where we’d lose ~4% if we implemented that strategy.

This flop CO vs BB is such a case that a part of our range has massive advantage against BB’s calling range, and the other part is not doing amazingly well. This is why we drop so much in EV if we either bet full range 1/3, we don’t value the really strong nutted hands at their real potential, or if we bet 2/3 full range, we overplay a lot of hands that are weak in nature and invest too much money with them. A lot of hands have very high equity, and a lot of hands have very low equity vs opponent’s range. Usually I’d continue with 2/3 mixed with checks, but for the sake of this example, we’re going to use 1/3 full range(not a huge mistake by any means, we just sactifice a bit of EV for simplicity, and also IRL BB will not be perfect).

We’re going to try a flush turn, the 7c, where both players are going to have a lot of Axcc and Kxcc and bunch of backdoors that resonate well with this turn.

We see that now, on this turn, CO chooses to polarize and always goes either for the check or the pot bet! Considering the board created some need for protection with the flush draw and some extra straight draws coming in on the turn, polarization and a bigger bet size is normality here. Very rarely do we see a raise in GTO against a really big sized bet, because if your opponent’s range is polarized, then all you’re accomplishing is folding his bluffs and getting called by really strong hands!

On the river, Player 1 elects to check most of the time, we still have range advantage on most rivers, so I’m going to remove the donks on turn and river for BB, making the tree more accurate, and recalculating (attention! You do not need to recalculate flop! You can just press Calculate turn and it will almost be instant for all turns and rivers). Also, removing CO’s half pot bet will make it even more accurate, as that bet is not used.

On a river brick like the 2h, we see that CO tries to go for the really big size, favoring that, but places some hands also in the lower sizing bet ranges.


Generally, on rivers you’re going to either use a half pot size or an overbet size, rare cases using another bet size efficiently rather than these two. Thus, we can remove the 150% pot bet and just leave half pot and all in. The explanation why CO is going all in with such a large range on the river, here, is because we didn’t get raised by CO so he’s not on top range and we have range advantage, having AA/KK/44/77/A4s/A7s/K4s/K7s and even 53s sometimes, that totally dominate BB’s range, thus we go for the bigger bet size so we can bluff more often and realize EV with more hands, basically wider postflop VPIP without getting exploited.

You can also easily adjust strategy colors by clicking on the colored square correspondent to that bet size and selecting a color. Here I marked the half pot with a dark blue color, so it’s a lot easier to distinguish it. You can do that for any street or situation. It looks slightly confusing that we are betting 22 half pot on the river. How often do we have these 22 though? There’s another view here called Normalize Weight, we select it so we can see exactly how much of each hand we have in this spot.

Not an awful lot of 22, now it’s a bit clearer. We’re going all in with the strongest of the strongest of hands, but also some mergy bluffs like 7x, and I think that this is a great choice as a bluff, because we block his 77 and also we block, for example, with T7,J7,Q7, AT, AJ and AQ which are probably his strongest calling hands. We need to sometimes place a hand like AA or AK, or 22 in this example in our half pot bet range, so that we don’t only have medium strength hands when we bet 1/2 pot, it would be really exploitable.

As you can see throughout the Simple Postflop images in this article, you can also check individual hand EV which is very helpful in understanding why a solver does what it does and why GTO works this way.

After you’ve drawn all the conclusions and studied the tree, you might want to open it at a later date, it’s time to save it. Simple Postflop files are very small saves, ranging around 100KB, which basically gives you an infinity of storage for all the trees you will ever want.

One more thing I really like about this software is scripting, which is organized by the job list (remember the SHIFT+J combo), but there’s another nifty thing you can do. There’s a flop generator!

There are 184 different strategic flops in Hold’em, all the other flops get included into one of the 184 categories depending on how close they are. For example, a flop like AT4r would be the same most of the time as AT3r.

Simplified a little bit more, there are 74 strategically different flops that encompass all flops in Hold’em. If you click on Generate Boards, a new window appears:

This is really good for training because it gives you the ability to either generate random flops and then you try and figure out what’s going on in different flop subsets, but also you can just paste either the 25/74/184 strategically different flops, or all 1755. Now, after generating or pasting your flops, you can just import them into the jobs window and run them, stop them whenever you want, come back to them later and so on.

I’ve actually solved 184 flops CO vs BB and then imported them into Simple GTO Trainer (there’s another software where you can play against your solutions, but more on that into a later article). There’s so many useful functions that it might seem overwhelming at first, but then it will get easier as you work with all of Simple Postflop’s functions. Just save the flops from that window and they will all be added to the Job Queue with the ranges and stacks and bet sizes that you originally set the tree with.

The jobs get automatically saved in files and you can open and close them at any time. It’s that Simple. 🙂

One more feature that you should know about and I think is important for studying is the flop aggregation. You want to see how two ranges interact on different flops but loading each one can be a tedious task. If you use the generate flop tool and then run all the jobs in one folder, there is another way Simple(r) possibility. Just load one tree from the folder you solved, and then click on “Merge Same Trees”

After getting this prompt, you will get a dropdown near the Merge Same Trees button showing EV aggregation.

You’ll get this window where you need to apply the weights for the selected flop subset:


After the weights have been applied, you get to see the EV of every hand! This is generally a true approximation over all strategic flops, so you understand the EV of your hand preflop and if you can or can not call a raise or a 3-bet, for example. The EV of your hand has to be higher than the amount you have to call, it’s that Simple. 🙂

Now, to get the final results, we go again to Merge Same Trees dropdown and now we have another button there, Flop Runouts. Clicking on that will aggregate a report containing all the flops that you have solved and giving you a very nice list like this one:

This is a pretty comprehensive list on which you can figure out how often you should be betting and which sizes. The cards on the left pane are filters, so for example if you want K high flops, you press one K and you get all the K flops in the list.

Selecting a board will place it directly into Simple Postflop where you can study all the action that’s going on. There are some more features, but I’ll let you discover those yourself.

Overall I really enjoyed this solver, I think it’s one of the best if not THE best solver out there right now, and for the price it sells for, it’s a knockout!

Head on down to https://simplepoker.com/ and check them out!

Leave a Reply