Experiment

class ambr.experiment.Experiment(model_type: Type[Model], sample: Sample, iterations: int = 1, record: bool = True)[source]

Bases: object

Container for running multiple model simulations.

run() Dict[str, Any][source]

Run the experiment.

Returns:

Dictionary containing results from all runs

class ambr.experiment.IntRange(start: int, end: int)[source]

Bases: object

Range of integer values for parameter sampling.

Semantics follow Python’s range(): start is inclusive, end is exclusive (i.e. IntRange(1, 10) yields values 1..9).

class ambr.experiment.Sample(parameters: Dict[str, Any], n: int)[source]

Bases: object

Container for parameter combinations.

The experiment module provides tools for running multiple model configurations and parameter sweeps.

Experiment Class

class ambr.Experiment(model_type: Type[Model], sample: Sample, iterations: int = 1, record: bool = True)[source]

Bases: object

Container for running multiple model simulations.

run() Dict[str, Any][source]

Run the experiment.

Returns:

Dictionary containing results from all runs

Run multiple model configurations:

from ambr import Experiment, Sample, IntRange

# Define parameter variations
params = Sample({
    'n_agents': IntRange(50, 200),
    'steps': 100,
    'seed': [1, 2, 3, 4, 5]  # Multiple seeds for robustness
})

# Create and run experiment
experiment = Experiment(
    model_class=MyModel,
    parameters=params,
    iterations=20  # Number of parameter combinations
)

results = experiment.run()

Sample Class

class ambr.Sample(parameters: Dict[str, Any], n: int)[source]

Bases: object

Container for parameter combinations.

Parameter sampling for experiments:

# Sample with ranges and fixed values
sample = Sample({
    'population': IntRange(100, 1000),
    'mutation_rate': [0.01, 0.05, 0.1],
    'selection_pressure': 0.8,  # Fixed value
})

# Generate parameter combinations
for params in sample.generate(n=50):
    model = MyModel(params)
    results = model.run()

IntRange Class

class ambr.IntRange(start: int, end: int)[source]

Bases: object

Range of integer values for parameter sampling.

Semantics follow Python’s range(): start is inclusive, end is exclusive (i.e. IntRange(1, 10) yields values 1..9).

Integer range specification:

# Define integer ranges
population_range = IntRange(50, 500)  # 50 to 500 inclusive

# Use in parameter definitions
params = {
    'n_agents': population_range,
    'max_steps': IntRange(100, 1000)
}