Besides their state, an agent always has access to their context. The context is the parts of the simulation that the agent is exposed to; another way of thinking about it is that an agent's context are the parts of the simulation that the agent "can see".
The context
object is passed to each behavior, and it has the following methods:
neighbors
messages
globals
data
step
All values accessed through context
are read-only, and if modified, will not directly change the state of the simulation or any other agent.
The context.neighbors()
method returns a collection of the agent's neighbors. The agent must have a "position"
field defined, and either its own "search_radius"
field or globals.json
must have "search_radius"
defined in the topology.
const behavior = (state, context) => {
for (neighbor of context.neighbors()) {
pos = neighbor.position;
// ...
}
};
An agent can read the state of its neighbors, but agents cannot directly modify another agent's state. However, agents may communicate by sending messages to each other.
Neighbors are calculated at the beginning of every time step, for every agent that has a search_radius
value. For best performance, only assign a search_radius
to an agent that needs to call context.neighbors().
The context.messages()
method returns a collection of messages received by the agent in this step of the simulation. For more details see Handling Messages.
The context.globals()
method returns an immutable JSON object of the simulation's constants, as defined in globals.json
. For more details see Globals.
The context.data()
method returns an immutable JSON object of the simulation's datasets that have been added through the "Add to Simulation" toolbar. For more details see Datasets.
The context.step()
method returns the current step number of the simulation. Simulation steps start at the number 1.
const behavior = (state, context) => {
console.log("The current step is", context.step());
};
Previous
Next