Welcome to the second project in our Artificial Opponents (Advanced AI) class, where we are tasked with creating an AI that will play and ideally beat our opponent.
As always, I am going to assume that you have a basic familiarity with the game. As far as I am aware, the current ruleset used in this version of Gin Rummy is as follows:
- Standard 52 Card Deck
- 2 players (My AI versus another classmate’s AI, tournament bracket style)
- 10 card hands
- A preset amount of rounds (flexible)
- Sets are 3 or 4 of the same rank
- Runs are 3 or more of the same suit in rank order
- A single card can be in either a set or a run but not both
- Cards in sets or runs are 0 points, all other cards are deadwood
- Aces are always low (rank of 1)
- Face cards are worth 10 points
- All other cards are worth their rank (2-10)
- Each turn the active player draws from either the deck or the discard pile, the top card of the discard is the only applicable draw, and the only card displayed
- After a draw the active player must discard a card from their hand
- When discarding the active player may knock if they have deadwood totaling 10 or less
- When discarding, the active player may declare Gin and collect a 25 point bonus. There is no Big Gin in this version of the game
- Ending the round
- The active player knocks, the active player has gin, or the active player attempts to draw from an empty deck
- A game ending in draw scores no points for anyone but the amount of rounds decrements by 1
- End of round scoring
- Gin grants 25 bonus points in addition to the points below
- If the active player knocks and has fewer deadwood than the other player they collect points equal to the sum of the losing player’s deadwood minus their own deadwood
- If the active player knocks but has a higher deadwood count than the opponent, the opponent collects 25 bonus points for undercutting and scores points as if they were the one who had knocked
While I certainly haven’t played Gin as much as I have minesweeper (though thankfully my dad taught me a large amount of card games when I was younger), I still believe the best way to write AI is as if it were taking a human-like decision making approach. However, if I learned anything from the last project (and my experience with card games), probability and counting cards is going to be vital to performing the best. This isn’t Vegas after all. So to rewrite a thesis, if it were, the best way to write AI is to create it as if it were using human-like decision making while also having perfect memory and instantaneous processing power (strangely enough traits that a computer has).
That said, with Gin, I’ll need to do more research and testing and a lot of iterations, but I believe my initial thoughts to the decision making process would follow similar to this:
- Save all known cards to a list, for later probability calculations.
- Determine any sets or runs and “lock” those cards, preventing the AI from discarding them.
- Find pairs of two or runs of 2, with lower values being a priority over high ones, and put those in a “hold” category.
- Draw the discard if it completes a set or run.
- Otherwise draw from the deck. (There will be some finnicking for pulling from discard without the above condition true).
- Discard the highest card that doesn’t qualify within the “hold” category.
Theories and Analysis
One thing I found while playing is that its dangerous to hold onto a large amount of pairs, especially if they’re face cards, as sometimes you may never complete any pairs and get knocked on with a lot of points sitting deadwood in your hand.
Other things I noticed is that it might be worth it to do the exact opposite and grab a lot of face cards, as many people see them as high value and discard them, allowing you to pick them up.
Which on that note reminds me that I need to keep track of what cards my opponent is picking up. There’s good odds that if the opponent has just picked up the seven you put down that you shouldn’t drop another seven. Odds also could be that they’re using it in a run, but that would be a test for comparing it to the known cards and determining the probability of that being the case.
Either way, this is a far more complicated than minesweeper, in terms of the actions that you can choose. On the bright side, a single move won’t make you lose to the same degree that a wrong click in minesweeper (usually on a 50/50 or random guess) would.
That, of course, doesn’t stop the random chance that occurs in a card game, but it’s just what happens with a deck of cards.
More to come in about 3 weeks, a long hiatus for this section of the blog, but I’ll be back then with spicy solutions.