First Model
This page shows how to build a minimal ABMForge model.
Basic Structure
An ABMForge model usually has two classes:
- an
Agentsubclass - a
Modelsubclass
The agent defines individual behavior. The model defines setup, scheduling, recording, and simulation logic.
Example
from abmforge import Agent, Model, Scenario
from abmforge.scheduling import RandomActivation
class Person(Agent):
def step(self) -> None:
self.wealth += 1
class WealthModel(Model):
def setup(self) -> None:
self.agents.create(Person, n=100, wealth=0)
self.scheduler = RandomActivation(self)
self.record.metric(
"total_wealth",
lambda model: model.agents.sum("wealth"),
)
def step(self) -> None:
self.scheduler.step()
scenario = Scenario(
model=WealthModel,
seed=42,
steps=10,
)
result = scenario.run()
print(result.dataset.model_records)
What Happens?
Persondefines agent-level behavior.WealthModel.setup()creates agents.RandomActivationactivates agents in random order.record.metric()records model-level data.Scenarioruns the model reproducibly.result.datasetstores output records.
Agent
Agents are Python objects with access to:
self.modelself.unique_idself.rng
Model
Models define:
- parameters
- random generator
- agents
- event queue
- recorder
- world or space
Scenario
A scenario describes one reproducible model run.
Dataset
The dataset stores:
- run metadata
- model-level records
- agent-level records
- event records
- lifecycle records