Although Environments inherit Agent methods
like Agent.set, Agent.get, etc. they have
a different constructor signature.
Pass in predefined Environment options for:
torus — Whether the Environment should wrap around in 2d space (with Agents that move off the right reappearing on the left, off the top reappearing on the bottom, etc.)width — The width of the Environment (used when torus = true)height — The height of the Environment (used when torus = true)An array of the renderers associated with this Environment.
An Environment can have multiple renderers, usually one to render
the Agents spatially and others for data visualization,
such as a LineChartRenderer, Histogram, etc.
This property will always equal the number of tick cycles that
have passed since the Environment was created. If you call
tick so that it goes forward multiple time steps, it will
increase the time by that value (not by just 1, even though
you only called tick once).
const environment = new Environment();
environment.time; // returns 0
environment.tick();
environment.time; // returns 1
environment.tick(3);
environment.time; // returns 4
Add an Agent to this Environment. Once this is called,
the Agent's environment property
will automatically be set to this Environment.
Whether to rebalance if there is a KDTree (defaults to true)
Remove all agents from the environment.
Decrement a numeric piece of data associated with this Agent
(decreasing its value by 1). This method is synchronous —
it immediately decreases the value (to asynchronously decrease it,
the rule function should instead return a new value.
agent.set('x', 50);
agent.decrement('x');
agent.get('x'); // returns 49
If the second parameter n is included, decrements by that amount.
agent.set('x', 50);
agent.decrement('x', 10);
agent.get('x'); // returns 40
If the value has not yet been set, calling this method sets it to -1
(or to -n).
Retrieve an arbitrary piece of data associated by name.
If the data has not been set, returns null.
Get an agent in the environment by its ID.
Get an array of all the agents in the environment.
Retrieve all the data associated with this Agent at once.
agent.set('x', 3);
agent.set('color', 'blue');
agent.set('active', false);
agent.getData();
// returns {
// x: 3,
// color: 'blue',
// active: false
// }
increment a numeric piece of data associated with this Agent
(increasing its value by 1). This method is synchronous —
it immediately increases the value (to asynchronously increase it,
the rule function should instead return a new value.
agent.set('x', 50);
agent.increment('x');
agent.get('x'); // returns 51
If the second parameter n is included, decrements by that amount.
agent.set('x', 50);
agent.increment('x', 10);
agent.get('x'); // returns 60
If the value has not yet been set, calling this method sets it to 1
(or to n).
Pass a function to cache and use the return value within the same environment tick.
The function to memoize.
The return value of the function that was passed.
Remove an agent from the environment.
Remove an agent from the environment by its ID.
Set a piece of data associated with this agent. Name should be a string while value can be any valid type. Alternatively, the first parameter can be an object, which merges the current data with the new data (adding new values and overwriting existing). Ex. agent.set('x', 5); agent.set('color', 'red');
Get an array of data associated with agents in the environment by key.
Calling environment.stat('name') is equivalent to calling
environment.getAgents().map(agent => agent.get('name'));
By default, calling this will calculate the result at most once per time cycle, and return the cached value on subsequent calls (until the next time cycle, when it will recalculate).
The key for which to retrieve data.
Whether or not to cache the result.
Array of data associated with agent.get(key) across all agents.
environment.addAgent(new Agent({ name: "Alice" }));
environment.addAgent(new Agent({ name: "Bob" }));
environment.addAgent(new Agent({ name: "Chaz" }));
environment.stat('name'); // returns ['Alice', 'Bob', 'Chaz']
Runs the Environments tick cycle. Depending on the parameters, one,
some, or all of the Agents in the Environment
might be activated, and all renderers associated with the
Environment will update. After the tick cycle finishes, any rules that were enqueued will be run and the Environment's time property will have incremented.
environment.tick(); // ticks once
// To run multiple tick cycles, you can pass a number
environment.tick(5); // ticks 5 times
Passing a configuration object (instead of a number) allows you to have finer control over the tick cycle. The object can have the following keys:
activation: Either "uniform" or "random" (defaults to "uniform").activation = "uniform" — All Agents in the Environment are activated with every tick cycle.activation = "random" — One or more Agents are randomly selected to be activated every tick cycle (see activationCount below).activationCount: For "random" activation, this many Agents will be activated with each tick cycle. Defaults to 1. If activationCount is greater than the number of Agents in the Environment, then all the Agents will be activated exactly once in random order.count: The number of tick cycles to run.randomizeOrder: When activation = "uniform", if randomizeOrder = true, Agents will be activated in random order, otherwise in the order they were added to the Environment. This currently defaults to false but will default to true in v0.6.0.// Ticks three times, activating 10 random agents with each tick cycle.
environment.tick({
activation: "random",
activationCount: 10,
count: 3
});
Generated using TypeDoc
An environment provides the space and time in which Agents interact. Environments are themselves Agents, and can store data in key-value pairs that can be manipulated just like Agent data.
0.0.5