skent259 / crapssim

Simulator for craps with various betting strategies
MIT License
32 stars 17 forks source link
casino-games craps python

:game_die::chart_with_upwards_trend: crapssim

PyPI GitHub Repo stars

When playing craps in a casino, there are unlimited combinations of ways that that players can place their bets. But, with this freedom comes complexity, and players deserve to know how a strategy could perform in each session. The 'crapssim' package is designed answer these tough questions: What's a fun strategy involving multiple numbers where the house edge doesn't increase too much? What's the best amount of passline or don't pass odds for my bankroll? Does hedging my bet improve my net winnings?

Crapssim is a python package which runs all of the necessary elements of a Craps table. The package follows some natural logic:

With these building blocks, crapssim supports

These powerful options can lead to some unique analysis of the game of craps, such as the following figure comparing 4 strategies with a budget of $200:

best-budget-strategies

It's easy to get started

There's a few good resources for getting started:

  1. Try the interactive google collab notebook to test a single strategy and see how the interface works
  2. Check out Corey Brown's scripts to define strategies and compare them: https://github.com/coreyabrown/CoreyCrapsSim
  3. Looks at the minimal working examples below

To see how a single session might play out for you using a pass line bet with double odds, over 20 rolls, one might run:

import crapssim as craps
from crapssim.strategy import BetPassLine, PassLineOddsMultiplier

table = craps.Table()
your_strat = BetPassLine(5) + PassLineOddsMultiplier(2)

table.add_player(strategy=your_strat)
table.run(max_rolls=20, verbose=True)

To evaluate a couple of strategies across many table sessions, you can run:

import crapssim as craps

n_sim = 20
bankroll = 300
strategies = {
    "place68": craps.strategy.examples.PassLinePlace68(5),
    "ironcross": craps.strategy.examples.IronCross(5),
}

for i in range(n_sim):
    table = craps.Table()
    for s in strategies:
        table.add_player(bankroll, strategy=strategies[s], name=s)

    table.run(max_rolls=float("inf"), max_shooter=10, verbose=False)

    for p in table.players:
        print(f"{i}, {p.name}, {p.bankroll}, {bankroll}, {table.dice.n_rolls}")

For more advanced strategies, you can either write your own custom Strategy class or add strategy components together. Some building blocks and examples can be found in the strategy module. We plan to have a more detailed tutorial and more strategy examples available soon.

Installation

For a normal user, it is recommended to install the official release. You will need an installation of python version 3.10 or newer. Then, run the following code in your terminal:

pip install crapssim

Development installation instructions are also available.

Results

Some results from this simulator have been posted to http://pages.stat.wisc.edu/~kent/blog:

Contributing

If you discover something interesting using this simulator, please let me know so that I can highlight those results here. You can find me at skent259@gmail.com.

Those looking to contribute to this project are welcome to do so. Currently, the top priority is to improve