Parameter System
2.5 Parameter System
The parameter system provides Python descriptors (Input, Variable, Constant) that attach discoverable metadata to agent and model attributes. This enables automatic UI generation, config loading with validation, parameter sweeps, and gradient-based optimisation.
Input
A user-configurable parameter loaded from config.json. Supports min/max range validation, type checking on assignment, and grouping for UI panels.
class Input:
def __init__(
self,
default: Any,
*,
min: Optional[float] = None, # Minimum allowed value
max: Optional[float] = None, # Maximum allowed value
description: str = "", # Human-readable description
units: str = "", # Units of measurement (e.g., "USD", "bps")
group: str = "", # Logical group for UI panels
type_hint: Optional[Type] = None, # Explicit type (inferred from default if omitted)
differentiable: bool = False, # Candidate for gradient-based optimisation
) -> None
The differentiable flag is forward-looking: it marks parameters that the planned JAX backend will treat as differentiable variables for gradient-based calibration.
Variable
An observable model state value. Variables are writable by model code and readable by external tools (dashboards, output recorders, experiment runners).
class Variable:
def __init__(self, description: str = "", units: str = "",
type_hint: Type = Any) -> None
Constant
A fixed value set once and never changed. Assignment after initialisation raises AttributeError.
class Constant:
def __init__(self, value: Any, description: str = "",
type_hint: Optional[Type] = None) -> None
Usage Example
from simudyne.engine.sdk import Agent
from simudyne.engine.params import Input, Variable, Constant
class Bank(Agent):
__state_schema__ = {"cash": float}
# Inputs: configurable via config.json, sweepable via ExperimentRunner
interest_rate = Input(default=0.05, min=0.0, max=1.0,
description="Annual interest rate", units="fraction",
group="Finance")
leverage_limit = Input(default=10.0, min=1.0, max=50.0,
description="Maximum leverage ratio",
differentiable=True)
# Variables: observable model state
total_assets = Variable(description="Total asset value", units="USD")
# Constants: fixed after creation
bank_type = Constant(value="commercial", description="Bank classification")
The introspection API (get_inputs(), get_params(), get_constants()) enables tools to discover all parameters on a model or agent class without instantiating it, which is used by the experiment runner, calibrator, and REST API for automatic parameter discovery.