So I’m not sure if that makes me a strange person, but I tend to like to analyze things I find interesting (you may have noticed this already). I like to find solutions, optima to problems that challenge me. The instrument for this is usually math, and when it fails or cannot be applied, coding (this is the real challenge, as I know just enough programming to make very simple codes work). Sometimes I just think, “I could totally write a program for this problem,” and sometimes I do, but more often than not I just start it, and at some point I realize it would be too tedious either mathematically or technically to go further, and I leave it altogether.
A few weeks ago I went on holiday with my friends, and among others we played a game that is most commonly known as Liar’s Dice. We play this game from time to time and I have to say it’s pretty funny, calling each other liars and all that. (Tip: put on some epic music in the background and time your “Liar!” calls with a particularly epic part for maximum fun ) On a side note, I totally won all the games, with a good amount of luck, but also maybe solid play (hehe). After coming home, I started to wonder about strategies to play the game and how they could be optimized. The game itself is simple enough for some very basic probability theory to do the work, I thought.
Rules of the game: there are several variants of Liar’s Dice, the one I usually play plays like this:
The players are sitting around a table, each of them has 5 dice. The dice are rolled, and the starting player calls a face value (2 to 6) and a number he thinks there are of said face value among all the dice on the table. Ones are always wild, counting as the face value called. The next player has 3 options:
Bid higher: make a call by increasing the face value while leaving the count unchanged, or increasing the count and naming a face value of their choice (except 1).
Call lie: doubting the previous statement, saying that there aren’t as many of the called face values as stated. If there are indeed fewer than what the previous player called, he loses a die; if there are at least as many as called, the doubting player loses a die. The player who lost a die proceeds to make a new call. If they don’t have any left, they are eliminated, and the next player calls.
Call truth: stating that there are exactly as many dice as called previously. If there are indeed as many as in the call, the player who made the true call loses a die; if there are fewer or more than in the call, the player calling truth loses a die. The player who lost a die proceeds to make a new call. If they don’t have any left, they are eliminated, and the next player calls. The option to call truth stabilizes the game, as in low-dice situations it could otherwise happen that both a lie and a higher bid is pretty unlikely.
The game goes on until only one player has dice left – that player wins the game.
So that’s where coding comes in. I was thinking about writing a program where you can observe AIs playing each other (and also play against them possibly), and see how they do. The end goal of the project is to create an AI that plays the game reliably well, and to compare how different AIs fare against one another.
The fun part is figuring out how the AIs should work. An AI is able to exactly know the probabilities of different calls in all situations, but what it does then with these values is not trivial at all. That’s what I’ll be trying to figure out.
I would be really happy if you could also contribute with your ideas, hopefully even posting you AI ideas. It does not have to be very complicated or technical, just general ideas, for example “Always call the most likely bid, and never call lie,” or “Call a lie if it’s probability is at least 30%, otherwise bid the most likely one”. If enough AI suggestions come in, I can run a mini-tournament, simulating games between them, and determine which one does the best in the long run.
Cheers,
Sholip