St. Pius X HS (131)/Interim Report

Interim Report
http://mode.lanl.k12.nm.us/get_interim1112.php?team_id=131

Problem Definition
Game Theory is the theory behind playing, strategizing, betting, and discerning when to perform various game maneuvers (bet, check, fold, bluff, etc.). Game theory will be used to play Poker, and more specifically, Pot-Limit Texas Hold'em. The ultimate goal of the project is to write a program in Java that will consists of three parts: a Texas Hold'em game engine, an Intelligent Agent, and a Graphical User Interface, all of which will be able to utilize game theory, as well as various algorithms with the purpose of minimizing losses, maximizing gains, and outlasting opponents.

Problem Solution
In order to solve the aforementioned problem, our program will integrate a complex algorithm which will value the AI’s hand with the cards that are currently available on the table. This algorithm will help the AI discern what to do every time it is called to perform an action. The program will also track patterns in players. These patterns will be utilized further in the game to track and detect concurring actions done by human participants. A random factor will also be introduced into the AI of the program, so it will be capable to bluff and trap (slow playing).

Progress to Date
Currently, several classes have already been written in Java that define the multiple objects that will be used in our Pot-Limit Texas Hold’em program. These classes define the individual card objects, the table, the card dealer, and the card deck. We also have several classes that are responsible for evaluating hands through the use of our algorithm. Presently, we also have a runner that runs a very simple Pot-Limit Texas Hold’em game.

Expected Results
After coding, and running multiple trials of our program with the help of human participants that can point out some errors in our program, we expect that our program will be able to win, not every showdown (which is the moment at which hands are compared at the end of several betting rounds; the winner of this will take the pot), but rather every session (which defines a continuous play of Texas Hold'em, until there is only one player remaining on the table due to the complete loss of money from the other players). It will be able to accomplish this by using its complex algorithm, examining patterns of players, and being able to ‘bluff’ and ‘trap’ by using its random component, which will all allow it to gain the most money per round and lose the least possible. In addition to algorithm and game engine, or model, a GUI, or view, will also be implemented. Through the utilities included in the NetBeans java IDE, which are quite helpful for generating GUI classes and implementations, the program will provide a “neat looking” user interface, rather than the poker game being a text-based adventure.

References:
Bewersdorff, J. "Bluffing in Poker: Can It be Done without Psychology?" Ch. 35 in Luck, Logic, & White Lies: The Mathematics of Games. Wellesley, MA: A K Peters, pp. 374-379, 2005.

Cheung, Y. L. "Why Poker is Played with Five Cards." Math. Gaz. 73, 313-315, 1989.

Conway, J. H. and Guy, R. K. "Choice Numbers with Repetitions." In The Book of Numbers. New York: Springer-Verlag, pp. 70-71, 1996.

Gadbois, S. "Poker with Wild Cards--A Paradox?" Math. Mag. 69, 283-285, 1996.

Jacoby, O. Oswald Jacoby on Poker. New York: Doubleday, 1981.

Packel, E. The Mathematics of Games and Gambling, 2nd ed. Washington, DC: Math. Assoc. Amer., 2006.

Rubens, J. Win at Poker. New York: Dover.

Introduction
Hi,

My name is John-Mark Collins, a Computer Engineering student at UNM & a technical intern at Sandia National Labs. See the biography on my User Page.

Progress
As of your interim report it sounds like you have a good start, with classes written in Java and a good project focus. How is it coming along? I would suggest getting a working program going so that you can see where the difficulties are and what needs work. Do you have a visual representation of your interface? How do you plan on representing the computer player and each move? How do you intend on the user 'playing' their hand?

Mentors
Are you currently working with any mentors? If so, who are you working with and have you had the opportunity to get your program in front of them or other users to be tested? I might recommend getting even a small part of the program working, so that you can test as you go (if you haven't already). My email address is johnmark@unm.edu [mailto:johnmark@unm.edu] and I am proficient in JAVA, so if you need any assistance down the road, please contact me with any questions.

Model
I have pasted your interim report here, with comments:

Game Theory is the theory behind playing, strategizing, betting, and discerning when to perform various game maneuvers (bet, check, fold, bluff, etc.). Game theory will be used to play Poker, and more specifically, Pot-Limit Texas Hold'em. The ultimate goal of the project is to write a program in Java that will consists of three parts: a Texas Hold'em game engine, an Intelligent Agent, and a Graphical User Interface, all of which will be able to utilize game theory, as well as various algorithms with the purpose of minimizing losses, maximizing gains, and outlasting opponents.

''Notes: game theory is an excellent model to study, particularly the ability to decipher moves and be able to 'bluff'. Have you written code for each of the scenarios listed above: betting, checking, folding, bluffing, etc..? So, you are essentially writing two classes: a Texas Hold'em game engine, and an Intelligent Agent, then incorporating them into one visual interface, taking the user input into account. This sounds like a huge undertaking, although writing a program to make decisions based on a number of inputs is manageable. Writing an entire poker program would be enormous, so be sure to focus on a few simple actions first, then move on to more complicated ones. Are you going to have some type of metrics to show how the computer is making its decisions (strictly for the presentation)?''

Problem Solution: In order to solve the aforementioned problem, our program will integrate a complex algorithm which will value the AIâs hand with the cards that are currently available on the table. This algorithm will help the AI discern what to do every time it is called to perform an action.

''Notes: This is an interesting project in itself - attempting to 'value' the cards in the hand and combinations of these cards. Do you have a system for 'valuing' the cards and their combinations? I might suggest some sort of mathematical model for the cards and their combinations (a 10 is worth 10, but 2 10s is worth 30 & 3 10s is worth 60 & so on), then plotting these numbers on a scale based on poker rules and what trumps what (i.e. 3 of a kind is worth more than 2 of a kind, but 3 kings is worth more than 3 queens). I'm sure you have thought about all of this at length, but I just wanted to through it out there in case you were still in the working process. Computers are good with numbers, and numbers are easy to compare, just FYI.''

The program will also track patterns in players. These patterns will be utilized further in the game to track and detect concurring actions done by human participants. A random factor will also be introduced into the AI of the program, so it will be capable to bluff and trap (slow playing).

''Notes: This is much more challenging than the part above, because it needs to take in to account some type of memory element - how does it 'remember' moves? In terms of the programming side - I would set up a group of variables or an array that stored the values of the moves (again, you will probably have to assign moves some sort of number - check is worth 5, bet is worth 10, etc...). Then you could access the variables and compare the cards in the hand, possible combinations and the users previous moves. Sounds daunting - I might suggest that you complete the previous part of just playing based on the cards in the hand first, then move onto the ability to remember moves once you have that working. Getting a computer to play poker at all is an incredible feat, let alone getting it to play intelligently. Don't sell yourself short, but also don't try to take on to much - it is better to have a good working program that does 1 or 2 things, than to have a non-working program that could potentially do 10 things, just food for thought.''

Progress to Date Currently, several classes have already been written in Java that define the multiple objects that will be used in our Pot-Limit Texas Holdâem program. These classes define the individual card objects, the table, the card dealer, and the card deck. We also have several classes that are responsible for evaluating hands through the use of our algorithm. Presently, we also have a runner that runs a very simple Pot-Limit Texas Holdâem game.

''Notes: Sounds like you are off to a great start, how are each of these classes interacting? Again, I might suggest taking the runner that is playing a game and gradually add more and more functionality.''

Expected Results

After coding, and running multiple trials of our program with the help of human participants that can point out some errors in our program, we expect that our program will be able to win, not every showdown (which is the moment at which hands are compared at the end of several betting rounds; the winner of this will take the pot), but rather every session (which defines a continuous play of Texas Hold'em, until there is only one player remaining on the table due to the complete loss of money from the other players). It will be able to accomplish this by using its complex algorithm, examining patterns of players, and being able to âbluffâ and âtrapâ by using its random component, which will all allow it to gain the most money per round and lose the least possible. In addition to algorithm and game engine, or model, a GUI, or view, will also be implemented. Through the utilities included in the NetBeans java IDE, which are quite helpful for generating GUI classes and implementations, the program will provide a âneat lookingâ

''Notes: I think that overall, you have an excellent project with a specific focus. Getting the program to 'think' is going to be quite a challenge and even if you get the computer to win individual hands, you should be quite proud of yourselves - getting the computer to win over the course of many hands would be incredible and I wish you the best of luck. I would recommend thinking about the best way to display your information and algorithms for the presentation - just watching someone play poker would be intriguing, but something explaining and diagramming what is happening while they are playing would be even more intriguing and ultimately the goal of this challenge. ''

Rubrics
The judges will use these rubrics to evaluate your projects. Use them as checklists for what you need to communicate to the judges.

Expo Judges Rubric