Coming from AnyLogic¶
Like AnyLogic, Naga runs discrete-event, system-dynamics and agent-based parts in one model on one clock. Unlike AnyLogic it is an engine only: a JSON model file, a command line and a Python API. There is no editor, no animation beyond a replay file, and no code attached to events.
What maps to what¶
| AnyLogic | Here |
|---|---|
| Process Modeling Library: Source, Sink, Delay, Service, Seize, Release, SelectOutput, Batch, Hold, Match | CREATE, DISPOSE, DELAY, PROCESS, SEIZE, RELEASE, DECIDE, BATCH, HOLD, MATCH |
| ResourcePool, schedules, failures | resources, resource_sets, schedules, failures |
| Material Handling Library: transporters, paths, conveyors | TRANSPORT with fleets on a path network, CONVEYOR, batteries and chargers |
| An agent type with a statechart, parameters and variables | an entry in agent_types: states (composite states too), transitions by timeout, rate, condition or message, parameters and attributes |
| An agent population | an entry in populations |
| Agents in continuous space, in a grid, in a network | space of an agent type: continuous, grid with patches, or the model's path network; links between agents |
| A process entity that is also an agent | CREATE with a population: the entity has an agent, and each reaches the other |
| System dynamics: stocks, flows, dynamic variables, table functions | levels, flows, auxiliaries, tables, delays, subscripts, units (System dynamics) |
| Parameter variation, Monte Carlo | naga doe, naga scenarios |
| Optimization experiment | naga optimize |
| Calibration experiment | naga calibrate |
| Java in "On enter" and "On exit" fields | expressions in ASSIGN, DECIDE, HOLD and RECORD; a restricted grammar, not a language |
In AnyLogic an entity, a resource unit and an agent are all agents. Here they are three
different things: an entity flows through blocks, a resource is seized and released, and an
agent lives in a population and runs its statechart. They meet through expressions
(COUNT("People", "I"), NQ("Server")), messages (SEND) and actions (an agent can make an
entity enter a block, or transfer an amount between levels).
What is missing here¶
- Arbitrary code. No Java, and no Python on events either. Behaviour is blocks, statecharts and expressions. The exceptions are deliberate and need you to opt in: a LOGIC block or a plugin (Python you install), and an agent type's Python behaviour, which runs only with your consent (Security).
- Pedestrian, rail, road and GIS libraries. None of them.
- A fluid library. Levels and flows model tanks, silos and batteries at rates, with exact crossing times; there is no pipe network.
- Nested agents and links across populations. A population holds agents of one type; an agent does not contain a population, and a link joins two agents of the same population.
- 3D, a model canvas, a run-time UI with controls. Not in this repository.
- A cloud service. Runs are local processes.
What you gain¶
- The model is a text file:
naga diff,naga merge, review in a pull request, assertions in CI (naga check). - An LLM agent can build, validate, run and debug a model through tools that return structured problems.
- Python around it: results are pandas frames (Python API).
Models that mix the methods, to read first: ed_patient_agents.json (entities that are
agents, gallery) and agents_machine_repair.json
(gallery).