Skip to main content

Monte Carlo simulation framework in Python

Project description

baccarat

Monte Carlo simulation framework in Python, with a focus on ease of use and flexibility.

Motivation

I wanted to create a framework that would allow users to easily create Monte Carlo simulations without having to worry about boilerplate or optimization. The goal of baccarat is to provide a simple and intuitive interface for building simulations

Getting Started

Installation

To get started with baccarat, you can install it using pip (or uv or poetry or your package manager of choice):

pip install baccarat

Usage

A simple example using baccarat to approximate pi:

from baccarat import Simulator, UniformParam, StaticParam

class PiSimulator(Simulator):
    radius = 1
    # These parameters are descriptors, used to generate random values when accessed
    x = UniformParam(-radius, radius)
    y = UniformParam(-radius, radius)
    # Strictly speaking, this could be a constant, but we use a Param for consistency
    r = StaticParam(radius)  
    
    def simulation(self):
        # Use assignments since attribute access will generate the random value
        x, y, r = self.x, self.y, self.r
        # Check to see if the random point is inside the circle
        return x**2 + y**2 <= r**2
    
    def compile_results(self):
        return 4 * len([res for res in self.results if res]) / len(self.results)

approx_pi = PiSimulator(1_000_000).run()

Notes:

  1. All user simulations start with a class that inherits from Simulator and implements the simulation method.
    1. The simulation method defines the vectorized logic for the simulation. It should return a NumPy array of results.
    2. Optionally, the compile_results method can be implemented to process the results array once the simulation is complete.
  2. Parameters are defined as class attributes.
    1. Parameters can be either static or dynamic. Static parameters are fixed values, while dynamic parameters are generated randomly according to a distribution.
    2. Distributions are specified using the concrete implementations of the Param class, such as UniformParam and GaussianParam.
    3. When accessed, parameters return NumPy arrays containing the random values, enabling vectorized operations.
    4. Custom distributions can be created by subclassing the Param class and implementing the generate method to return a NumPy array.
  3. The number of samples used in the simulation are specified when creating an instance of the Simulator subclass.

Examples

For more examples, see the examples folder.

About the name

Baccarat is a popular card game in casinos around the world. I first learned about baccarat when reading Ian Fleming's Casino Royale, the first novel in the James Bond series.

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

baccarat_sim-0.1.0.tar.gz (36.1 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

baccarat_sim-0.1.0-py3-none-any.whl (17.2 kB view details)

Uploaded Python 3

File details

Details for the file baccarat_sim-0.1.0.tar.gz.

File metadata

  • Download URL: baccarat_sim-0.1.0.tar.gz
  • Upload date:
  • Size: 36.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.5.2

File hashes

Hashes for baccarat_sim-0.1.0.tar.gz
Algorithm Hash digest
SHA256 2525d2716d458fd9f097f5353cc072fdb1eeb1363751fb01fcb31f66e460f9eb
MD5 1f03f93174f4de1a6e4c3a53893cda09
BLAKE2b-256 e27c136e0cb600850f71fe3c0880237ed97723570bd38783f1b202bc1f71e59c

See more details on using hashes here.

File details

Details for the file baccarat_sim-0.1.0-py3-none-any.whl.

File metadata

File hashes

Hashes for baccarat_sim-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 6824f8a782dc196aacb0a41f29d601a524b32f450a0422783b0b5dd9c06d9fee
MD5 00b0cb3cce3c43e394bdc0d074c8e124
BLAKE2b-256 fd8e6ac52d2b79de310f71c5e248e2e3d32763fa627458abc80e9612e7687b31

See more details on using hashes here.

Supported by

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