CFR code at https://github.com/adamczheng/CFR
from https://github.com/mitpokerbots/engine-2020
check-folds every hand
an if statement bot from middle of week 1 that doesn't consider permutation
an if statement bot that attempts to determine permutation through particle filter + random swaps when # candidates drops under threshold of 200, uses OMPEval from https://github.com/zekyll/OMPEval, Note: if you want to run on other machines you may need to recompile OMPEval
script to format a gamelog.txt file
Our week 1 strategy (which is still basically the case) was to generate a lot of permutations (50,000) from the prior (0.25 geometric distribution) and then particle filter over showdowns we see. It drops really fast and could drop to 0 from pretty high numbers (>200) although unlikely. If we ever drop below the threshold (200), we go through each permutation and try each permutation with swap distance of <= 1 to see if they follow showdown rules. If they do we add them to the list. If our list becomes entirely one permutation, then we're done.
Before the end of week 2 we decided that moving an index i->j performs slightly better than swap(i,j) on average, although there would be double the permutations with distance 1 and its implementation is slower, so we didn't do it.
For playing, before 5 showdowns, we assume the permutation is 23456789TJQKA, but after 5 showdowns we randomly select from remaining candidate.
Against check-call bot, we determine the permutation about 30% of the time with our week 1 strategy, although we get a good idea of the permutation much more often. It sometimes takes too long (if we never generate the right permutation) so we don't allow this part of the program to exceed 20-25 seconds.
Currently, we're trying to implement Metropolis Hasting to see if it yields better results. Update: we implemented it and it did yield better results (at least in speed of determining permutation)
code for generating flop, turn, and river abstractions
169 buckets representing all strategically different hands
equity histogram (rounded to nearest 2%) + earth mover’s distance (100 buckets using kmeans++)
equity histogram (rounded to nearest 2%) + earth mover’s distance (100 buckets using kmeans++)
opponent cluster hand strength (vs 8 ranges) + l2 distance (100 buckets using kmeans++)
forget everything from the previous street
Bet sizes: 1/2 pot, pot, 2x pot, all in
Raise sizes: 1/2 pot, pot, 2x pot, all in
Other actions: check, fold
card abstraction, k-th action on street, street, pot, pot odds bucket (see report for more details)
external sampling, linear weighting
Lookup tables generated by simulating all possible boards and using Two Plus Two Hand Evaluator (https://github.com/christophschmalhofer/poker/tree/master/XPokerEval/XPokerEval.TwoPlusTwo)
https://github.com/mitpokerbots/lecture-notes-2020
http://modelai.gettysburg.edu/2013/cfr/
https://github.com/Fro116/Pokerbots
https://www.pokernews.com/strategy/artificial-intelligence-hold-em-1-23152.htm