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:
- All user simulations start with a class that inherits from
Simulatorand implements thesimulationmethod.- The
simulationmethod defines the vectorized logic for the simulation. It should return a NumPy array of results. - Optionally, the
compile_resultsmethod can be implemented to process the results array once the simulation is complete.
- The
- Parameters are defined as class attributes.
- Parameters can be either static or dynamic. Static parameters are fixed values, while dynamic parameters are generated randomly according to a distribution.
- Distributions are specified using the concrete implementations of the
Paramclass, such asUniformParamandGaussianParam. - When accessed, parameters return NumPy arrays containing the random values, enabling vectorized operations.
- Custom distributions can be created by subclassing the
Paramclass and implementing thegeneratemethod to return a NumPy array.
- The number of samples used in the simulation are specified when creating an instance of the
Simulatorsubclass.
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
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
2525d2716d458fd9f097f5353cc072fdb1eeb1363751fb01fcb31f66e460f9eb
|
|
| MD5 |
1f03f93174f4de1a6e4c3a53893cda09
|
|
| BLAKE2b-256 |
e27c136e0cb600850f71fe3c0880237ed97723570bd38783f1b202bc1f71e59c
|
File details
Details for the file baccarat_sim-0.1.0-py3-none-any.whl.
File metadata
- Download URL: baccarat_sim-0.1.0-py3-none-any.whl
- Upload date:
- Size: 17.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.5.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
6824f8a782dc196aacb0a41f29d601a524b32f450a0422783b0b5dd9c06d9fee
|
|
| MD5 |
00b0cb3cce3c43e394bdc0d074c8e124
|
|
| BLAKE2b-256 |
fd8e6ac52d2b79de310f71c5e248e2e3d32763fa627458abc80e9612e7687b31
|