Skip to main content

A package and command line tool for Yahtzee

Project description

yahtzee

A Yahtzee-solving python package and command line tool.

The algorithm is mathematically guaranteed to have the best strategy. That is, it maximizes expected score for a single game of Yahtzee.

The command line tool (play_yahtzee) guides you through a game and advises you on the best moves to make.

The algorithm assumes "vanilla" rules. It attains an average score of ~230 points.

Installation

Clone the repository:

$ git clone git@github.com:dpmerrell/yahtzee.git

Make sure you have python >= 3.8. I recommend using a virtual environment:

$ source my_py38_env

Install via pip:

(my_py38_env)$ cd yahtzee
(my_py38_env)$ pip install .

Congratulations! The yahtzee package and play_yahtzee command line tool are now installed.

Command line tool

After installation, you can run the interactive command line tool play_yahtzee:

(my_py38_env)$ play_yahtzee

###### STARTING GAME ######

    Roll all of your dice!
    Enter all of your dice here:
    

The prompts will lead you through a game of Yahtzee and advise you on the best moves to make.

Python package

The yahtzee python package has the following components:

  • A dynamic programming algorithm that solves the whole game (solve_game, solve_turn)
  • Precomputed results for that algorithm (PRECOMP_STATE_VALUES) (you can compute those results for yourself, but it will take hours)
  • An object-oriented interface for the algorithm to interact with a game of Yahtzee (OptimalPlayer, InteractiveGame)
  • A command line script based on that interface (play_interactive_game())

The source code is small -- look through it for details.

Algorithmic ideas

Yahtzee is a Markov Decision Process. It has convenient properties that make it straightforward to solve.

The solver uses dynamic programming to iterate through every possible state and action in a game of Yahtzee. For each state, the algorithm computes the maximal expected score (subject to the game's randomness), and the corresponding action. The algorithm stores these expected scores and optimal actions in a pair of tables. The table of actions is called the policy.

It turns out Yahtzee's state space has an interesting structure that makes it economical to

  1. Store a cache of expected scores for a very small number (2^13 = 8192) of states.
  2. At play time, recompute a small portion of the entire game's policy at the beginning of each turn.

This design strikes a balance between memory and computation. A very small number of expected values are stored, but some computation is required during the game.

(In a fully automated setting where speed matters, it may be better to just store the entire policy.)

Legal stuff

This software is distributed under an MIT license, see LICENSE.txt.

The name "Yahtzee" may or may not be trademarked. I don't know, Hasbro can get in touch with me if they have problems with what I'm doing

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

yahtzee_solve-0.0.1.tar.gz (100.3 kB view details)

Uploaded Source

Built Distribution

yahtzee_solve-0.0.1-py3-none-any.whl (92.7 kB view details)

Uploaded Python 3

File details

Details for the file yahtzee_solve-0.0.1.tar.gz.

File metadata

  • Download URL: yahtzee_solve-0.0.1.tar.gz
  • Upload date:
  • Size: 100.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.1.1 pkginfo/1.4.2 requests/2.22.0 setuptools/45.2.0 requests-toolbelt/0.8.0 tqdm/4.30.0 CPython/3.8.10

File hashes

Hashes for yahtzee_solve-0.0.1.tar.gz
Algorithm Hash digest
SHA256 50d3325b865d684bff9d8a8ad06a2aa9331350fc322d40a1e6364e6ccef177d6
MD5 60c40b3b40672907d0591eaaffee9987
BLAKE2b-256 14bc4874e68d421d5f308044210a58a1905ece7b1d73a7d9667abc2dfe58ae42

See more details on using hashes here.

File details

Details for the file yahtzee_solve-0.0.1-py3-none-any.whl.

File metadata

  • Download URL: yahtzee_solve-0.0.1-py3-none-any.whl
  • Upload date:
  • Size: 92.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.1.1 pkginfo/1.4.2 requests/2.22.0 setuptools/45.2.0 requests-toolbelt/0.8.0 tqdm/4.30.0 CPython/3.8.10

File hashes

Hashes for yahtzee_solve-0.0.1-py3-none-any.whl
Algorithm Hash digest
SHA256 7d7b5ece140d8c92d25150b0602541efd681c98d6f0b13951bfafbee0acfc8e5
MD5 5db69f64588526f5c20686835cc54a62
BLAKE2b-256 abc24aa1e85753b98dcd4ca582dbc1fe7722105927b819ae871ffd505187a6e4

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page