Poker Helper is a web-based application that can be run alongside a poker game. This allows a player to input data in real time from which useful calculations can made. Using this system should enhance a user’s ability to play poker by displaying accurate statistics and recommendations on the play to make.
Latest version of poker helper (last updated 07-March-2010)
Latest version of poker helper (Feb 2010)
The application is aimed at all players regardless of their standard. Assuming there was a game of poker and the user had this application running as an aid. A new poker player would be able to play relatively well, assuming they only played when they had an advantage with their statistics. Rather than a user purely being a medium between the game and the aid if they were to remember the calculated statistics they would learn how to play more effectively much quicker. An example of this could be, if the final communal card is to be of a required suit being 9/46 or 19.57% (assuming an opponent does not hold one of these 9 remaining suited cards). At intermediate player could realise the actual suit and card values are irrelevant but that the chance of getting the desired card is ~20%. The application could therefore be seen as a learning aid, being better than alternative products as it shows further information that just the final percentage or odds.
More experienced and better players are likely to have learnt the odds for common situations such as the above (a flush draw). As the odds and statistics are shown, the players could test their knowledge by estimating the odds before clicking the calculate button. Many intermediate players miscalculate their odds, using this application would give the exact values which in some common hands would surprise players in which they have overestimated their hand strength. A common situation is counting cards multiple times for instance a card may give both a straight and four of a kind, yet it is still only one card.
The project involves creating a web-based solution to be used as an aid to people playing the card game Texas hold’em poker. The web application will contain many “Web 2.0” features. Web 2.0 can be defined as a heavily dynamic application allowing high levels of user interaction and customisation, very different from a traditional static page. How a user interacts with the application should be very apparent, meaning there should be no need for users to read instructions before using the application; though there will be some help available displaying help as tooltips. Once a user visits the page it should be obvious what the next step should be; only the relevant information and buttons being displayed as required.
To achieve this, a powerful user interface will be created using JavaScript allowing users to select cards. From these cards the system will then calculate odds and percentages and output relevant data. This output data may simply be text, for instance “Your hand is strong, you will win X% of the time”. However where the data is more complex it could be presented as a table or other appropriate format. A good example of this would be using a table to display the hand ranks and which cards are required to create a stronger hand. From calculating this information should enhance a user’s poker ability. Having accurate odds, statistics and recommendations displayed on the screen will allow players to make more informed decisions on the play to make.
The aims of the project as outlined within the preliminary project have been adapted to coincide with my industrial placement. Subsequently the aims of the project were modified; rather than creating an actual poker game with a playable bot instead an online poker tool would be created to aid a user whilst in a poker game.
The original functional requirements have generally been achieved, with statistics being calculated at the four key stages of the game; pre-flop, post-flop, turn and river. A hand evaluator has been written specifically for 5 cards, an encapsulating function has been written allowing this to work with 7 cards. The functional requirement dropped was creating a game engine and a playable bot. These were replaced with the need for the application to be entirely web based, adding a variety of new challenges. These included requiring the application to work cross-browser and have client-side and server-side communication to allow the level of interaction required. This web application would consist of an enhanced version of what was previously explained as the ‘poker calculator’ – calculating odds and percentages ultimately advising the user the play to make.
The web application has been created allowing users to select cards using client side methods. This is sent to pre-written server side functions determined by the current game state. This is run server side meaning it is highly secure and does not require any user resources to run the algorithms.
Poker is an excellent domain for artificial intelligence for a variety of reasons. A poker game has a finite number of states as only a deck of cards is used, but is stochastic and only partially observable as some information (the opponents cards) are unknown. However, the rules are very clear in terms of structure and the rankings of hands. This distinguishes poker and other games with imperfect information from games such as chess where for a particular state all possible moves are visible. This makes a game such as poker much more difficult to solve and more interesting as an AI challenge. Poker is being used as a test environment for creating AI solutions, from which the techniques learnt can be scaled to real-world problems.
Playing poker online has strict time constraints of typically less than 20 seconds for a user to make a play or they will automatically make a play depending on their preferences. Though a standard deck has only 52 cards the number of 5 card combinations within this is 2,598,960. Within the strict time constraints it is not feasible to loop through all these combinations, when considering all possible 7 card combinations from a deck of 52 this number becomes 133,784,560. These complexities force sophisticated techniques to be developed as it is unfeasible to simply use brute force.
This project is not concerned with the learning elements of profiling other poker players and determining the possibility of them making a mistake or attempting a bluff (where an opponent holds a hand weaker than would be expected from their betting pattern). Instead the application will be concerned with calculating statistics with a general hint on the play to make but this is left up to the player.