Anyone who has read Expert Heads Up No Limit Holdem knows that there is tons to learn from solving model games and analyzing the GTO strategies that result. The ability to solve large poker games was directly responsible for many of the insights in EHUNL and set it apart from poker advice available elsewhere. Unfortunately, this sort of work involves large computations, and software to perform these calculations was not publicly accessible – until now.
This video series will walk you through the development of computer code to solve for maximally exploitative and equilibrium strategies of arbitrary HUNL decision trees, to visualize the trees, and to investigate the resulting strategies and the EVs of playing them. You will learn to leverage the powerful but user-friendly iPython (interactive python) programming enviroment and create a tool that allows you to perform many of the calculations described in the books. Moreover, in learning how to build it rather than how to use a pre-existing software package, you will gain the understanding necessary to go beyond published work and to perform game theoretic studies of your own imagination. It’s an exciting time to be a poker player.
Note: This video pack is protected by a sharing protection system. These videos can be played on both your laptop and desktop, using Windows XP, Windows Vista, Windows 7, Windows 8 and / or Windows Server computers and both online and offline after a single entry of your serial key.
When writing my Range class,
__repr_svg__ doesn’t seem to work: trying to display a range gives something like
<__main__.Range instance at 0x0638DD00>.
That text is the default representation of a range (the name of the class and its memory address). This happens because it can’t use the image-generating display function we’ve written. There could be two reasons for this: (1) it can’t find the function, or (2) there’s an error when it tries to run it – in this case, it silently falls back on the default representation.
To address (1), make sure you’ve named the function correctly:
_repr_svg_. One underscore at the beginning and end and one in the middle. Also make sure that indentation/whitespace is correct as in the video. If it is incorrect, python may not know that that function should be associated with the Range class.
To address (2), run the function manually. In other words, if you have a range called
bob._repr_svg_(). This way, if an error occurs, it will be displayed, and you can debug.
Note: some errors were made in early videos and then tracked down and corrected in later ones. This gave us a chance to demonstrate the debugging process, which is itself a very important skill. Only bugs that were not found by the end of the series are listed here.
In setMaxExplEVsAtNatureDP() and setMaxExplEVsAtVillainDP(), the loop over all hands is over numCards twice, as usual. In the video, one of the loops was over numHands by mistake. (Thanks erdnase!)
getRange function of the
StrategyPair class, “range[n]” should be “ranges[n]”
setRangeString function of the
Range class, there’s an issue with the case which covers unsuited (XYo) hands. As written, it only covers 6 of the 12 combos, e.g. AhKd but not AdKh. The following code fragment corrects this (only the 3rd and 4th lines changed). Thanks PN Houle!
else: # unsuited hands for i in range(numSuits): for j in range(numSuits): if i != j: self.setFrac(pe.string2card([rank1+suits[i], rank2+suits[j]]), value)
In video 11, we add a directory to the end of the Windows PATH variable. This directory should be the “bin/” subdirectory of the place where we installed GraphViz. What was shown on screen when I did this was correct, but I forgot the “bin/” part when describing it.
When renaming the argument to getEquityVsHand from “board” to “b”, I forgot to change it everywhere in the function body! After making the change, every instance of “board” except one in the function should have been changed to “b”. Furthermore, this led to incorrect EVs when solving the turn and river game. After 300 iterations, the correct numbers there are SB EV: 19.00 BB and BB EV: 21.04 BB. See this post and the surrounding discussion for more info. Keep in mind that if you were affected by this bug when you generated some EquityArrays, you’ll need to delete and re-generate them!