Skip to main content

A toolbox for the calibration and evaluation of simulation models.

Project description


Python pypi License Ruff pre-commit Lint Test Publish Build CodeQL Advanced Run with Docker

PyPI | Documentation | API | Changelog | Examples | Releases | Docker

A toolbox for the calibration and evaluation of simulation models.

Table of contents

Introduction

calisim is an open-source, low-code model calibration library that streamlines and standardises your workflows, while aiming to be as flexible and extensible as needed to support more complex use-cases. Using calisim will speed up your experiment cycle substantially and make you more productive.

calisim is primarily a wrapper around popular libraries and frameworks including Optuna, PyMC, scikit-learn, and emcee among many others. The design and simplicity of calisim was inspired by the scikit-learn and PyCaret libraries.

Features and Functionality

  • A standardised and streamlined interface to multiple calibration procedures and libraries.
  • A low-code library, allowing modellers to rapidly construct multiple workflows for many calibration procedures.
  • An object-oriented programming architecture, allowing users to easily extend and modify calibration workflows for their own complex modelling use-cases.
  • An unopinionated approach to working with simulation models, allowing users to calibrate both Python-based and non-Python-based models.
  • Optional integration with PyTorch for access to more sophisticated Gaussian Process and deep learning surrogate models, state-of-the-art evolutionary algorithms, and deep generative modelling for simulation-based inference.

Quickstart

# Load imports
import numpy as np
import pandas as pd

from calisim.data_model import (
	DistributionModel,
	ParameterDataType,
	ParameterSpecification,
)
from calisim.example_models import LotkaVolterraModel
from calisim.optimisation import OptimisationMethod, OptimisationMethodModel
from calisim.statistics import MeanSquaredError
from calisim.utils import get_examples_outdir

# Get model
model = LotkaVolterraModel()
observed_data = model.get_observed_data()

# Specify model parameter distributions
parameter_spec = ParameterSpecification(
	parameters=[
		DistributionModel(
			name="alpha",
			distribution_name="uniform",
			distribution_args=[0.45, 0.55],
			data_type=ParameterDataType.CONTINUOUS,
		)
	]
)

# Define objective function
def objective(
	parameters: dict, simulation_id: str, observed_data: np.ndarray | None, t: pd.Series
) -> float | list[float]:
	simulation_parameters = dict(
		alpha=parameters["alpha"],
		beta=0.024, h0=34.0, l0=5.9,
		t=t, gamma=0.84, delta=0.026,
	)

	simulated_data = model.simulate(simulation_parameters).lynx.values
	metric = MeanSquaredError()
	discrepancy = metric.calculate(observed_data, simulated_data)
	return discrepancy

# Specify calibration parameter values
specification = OptimisationMethodModel(
	experiment_name="optuna_optimisation",
	parameter_spec=parameter_spec,
	observed_data=observed_data.lynx.values,
	outdir=get_examples_outdir(),
	method="tpes",
	directions=["minimize"],
	n_iterations=100,
	method_kwargs=dict(n_startup_trials=50),
	calibration_func_kwargs=dict(t=observed_data.year),
)

# Choose calibration engine
calibrator = OptimisationMethod(
	calibration_func=objective, specification=specification, engine="optuna"
)

# Run the workflow
calibrator.specify().execute().analyze()

# View the results
result_artifacts = "\n".join(calibrator.get_artifacts())
print(f"View results: \n{result_artifacts}")
print(f"Parameter estimates: {calibrator.get_parameter_estimates()}")

Installation

The easiest way to install calisim is by using pip:

pip install calisim

calisim's default installation will not include all optional dependencies. You may be interested in one or more extras:

# Install PyTorch extras
pip install calisim[torch]

# Install Hydra extras
pip install calisim[hydra]

# Install TorchX extras
pip install calisim[torchx]

# Install multiple extras
pip install calisim[torch,hydra,torchx]

Usage with Docker

You may also want to execute calisim inside of a Docker container. You can do so by running the following:

# Change the image version as needed
export CALISIM_VERSION=latest

# Get docker-compose.yaml file
wget https://raw.githubusercontent.com/Plant-Food-Research-Open/calisim/refs/heads/main/docker-compose.yaml

# Pull the image
docker compose pull calisim

# Run an example
docker compose run --rm calisim python examples/optimisation/optuna_example.py

Communication

Please refer to the following links:

Contributions and Support

Contributions are more than welcome. For general guidelines on how to contribute to this project, take a look at CONTRIBUTING.md.

License

calisim is published under the Apache License (see LICENSE).

View all third party licenses (see third_party)

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

calisim-0.3.1.tar.gz (60.4 kB view details)

Uploaded Source

Built Distribution

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

calisim-0.3.1-py3-none-any.whl (99.7 kB view details)

Uploaded Python 3

File details

Details for the file calisim-0.3.1.tar.gz.

File metadata

  • Download URL: calisim-0.3.1.tar.gz
  • Upload date:
  • Size: 60.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.7.1 CPython/3.10.16 Linux/6.8.0-1021-azure

File hashes

Hashes for calisim-0.3.1.tar.gz
Algorithm Hash digest
SHA256 2d7db151ec3d8214a4794d718b4b051cc4cb9becc310f5a8e445dcdd7bf8e42c
MD5 8ad3ab246a4df5e6dc4f8bd559e914ff
BLAKE2b-256 5e6d1c1d92411b8e15380600f4b8f7e3457bcb85eb80f9320053cf8e134a4c44

See more details on using hashes here.

File details

Details for the file calisim-0.3.1-py3-none-any.whl.

File metadata

  • Download URL: calisim-0.3.1-py3-none-any.whl
  • Upload date:
  • Size: 99.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.7.1 CPython/3.10.16 Linux/6.8.0-1021-azure

File hashes

Hashes for calisim-0.3.1-py3-none-any.whl
Algorithm Hash digest
SHA256 c4959c1a3a59e26da247ae5da7af499372f5139bc30c6e8c7455049a558e0900
MD5 9112a09acbe83900bec461478a05d858
BLAKE2b-256 76dffa7f024cc1570f8ad1ec336ff64e92295b1a79f46b6b875ccaaf2b37287d

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