Agent-based Modeling with Blazingly Efficient Records
Project description
AMBER (Agent-based Modeling with Blazingly Efficient Records)
AMBER is a Python framework for agent-based modeling that uses Polars for efficient data handling and analysis. AMBER provides a clean, robust API for creating parallel, high-performance simulations in Python.
🚀 Performance
AMBER achieves high performance through its columnar memory layout (SoA), KD-Trees, and SIMD-vectorized operations.
Benchmark vs Other Frameworks (5,000 Agents, 100 Steps)
| Framework | Language | Architecture | Speed Rank |
|---|---|---|---|
| Agents.jl | Julia | Vectorized | 🥇 1st (0.02s - 0.9s) |
| AMBER | Python | Vectorized | 🥈 2nd (0.1s - 2.3s) |
| SimPy (Dense) | Python | Process/DES | 🥉 3rd (0.3s - 4.3s) |
| Melodie | Python | Hybrid | 4th (0.4s - 20s) |
| AgentPy | Python | Object | 5th (2s - 30s) |
| Mesa | Python | Object | 6th (50s - 30s) |
*SimPy is exceptionally fast for sparse models (like SIR) due to its event-driven nature, but AMBER is faster for dense/movement-heavy models.
AMBER is the state-of-the-art for dense simulation in Python, while SimPy offers an alternative for event-driven logic.
🚀 Quick Start
import ambr as am
# Define a custom agent
class MyAgent(am.Agent):
def setup(self):
self.value = self.p.initial_value
def step(self):
self.value += self.model.random.randint(-1, 2)
self.record('value', self.value)
# Define a model
class MyModel(am.Model):
def setup(self):
self.agents = am.AgentList(self, self.p.agents, MyAgent)
def step(self):
self.agents.call('step')
def update(self):
super().update()
self.agents.record('value')
# Run a simulation
parameters = {
'agents': 10,
'initial_value': 5,
'steps': 100
}
model = MyModel(parameters)
results = model.run()
⚡ Advanced: Vectorized Updates
For maximum performance, access the underlying Population manager to perform SIMD-vectorized state updates, bypassing Python loop overhead:
def step(self):
# Create a batch update context
with self.population.create_batch_context() as batch:
# Queue updates logic (executed in Rust/Polars)
batch.add_update(target_ids, 'wealth', 1)
batch.add_update(source_ids, 'wealth', -1)
# State is applied atomically here
🔬 Optimization
AMBER includes powerful optimization capabilities for parameter tuning:
from ambr.optimization import ParameterSpace, grid_search
# Define parameter space
parameter_space = ParameterSpace({
'agents': [10, 50, 100],
'initial_value': [1, 5, 10],
'steps': 100
})
# Run optimization
results = grid_search(MyModel, parameter_space, 'some_metric')
best_params = results[0]['parameters']
📦 Installation
pip install ambr
🏗️ Features
- Simple API: Intuitive interface for agent-based modeling
- High Performance: Efficient data handling with Polars DataFrames
- Optimization: Built-in parameter optimization with grid search, random search, and Bayesian optimization
- Environments: Support for grid, network, and continuous space environments
- Experiments: Run multiple simulations with parameter sampling
- Random Number Generation: Reproducible simulations with controlled randomness
📚 Examples
Working examples are available in the examples/ directory:
- Wealth Transfer Model: Economic inequality simulation
- Virus Spread Model: Epidemiological SIR model
- Flocking Simulation: Boids flocking behavior
- Forest Fire Model: Cellular automata fire spread
- Network Simulations: Graph-based agent interactions
📖 Documentation
- Documentation: https://ambr.readthedocs.io/
- Paper: https://arxiv.org/abs/2601.16292
📝 How to cite?
If you use AMBER in your research, please cite our paper:
@article{pham2026amber,
title={AMBER: A Columnar Architecture for High-Performance Agent-Based Modeling in Python},
author={Pham, Anh-Duy},
journal={arXiv preprint arXiv:2601.16292},
year={2026}
}
🤝 Contributing
We welcome contributions! Please see our contributing guidelines for more information.
📄 License
This project is licensed under the BSD 3-Clause License - see the LICENSE file for details.
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
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 ambr-0.1.4.tar.gz.
File metadata
- Download URL: ambr-0.1.4.tar.gz
- Upload date:
- Size: 254.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.12.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
402f36be4e58b758ef3205d88eb6afac0c5f4a7f6ce6f07864b60ed771aba405
|
|
| MD5 |
24dae2956a496f4134d4d0c0e1811379
|
|
| BLAKE2b-256 |
78135254d48dd7d86a28a9e345ab473570d55fd6940c8bc5853602376b9b6c9f
|
File details
Details for the file ambr-0.1.4-py3-none-any.whl.
File metadata
- Download URL: ambr-0.1.4-py3-none-any.whl
- Upload date:
- Size: 31.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.12.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
52dcb214f8a868f3adcefe373ecd763bcf73897bb8c2e7d3af3423ec9a37b630
|
|
| MD5 |
f920415578cb8864529ef0aea53cb5c3
|
|
| BLAKE2b-256 |
121303d5fe6bb07bfccf4c47a9539e0dafa4155fa4140fd41bdee05bea28e277
|