Options
All
  • Public
  • Public/Protected
  • All
Menu

Class Environment

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.

since

0.0.5

Hierarchy

Index

Constructors

constructor

  • new Environment(opts?: EnvironmentOptions): Environment
  • 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)
    override

    Parameters

    • opts: EnvironmentOptions = ...

    Returns Environment

Properties

height

height: number

renderers

renderers: AbstractRenderer[] = ...

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.

time

time: number = 0

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
since

0.1.4

width

width: number

Methods

addAgent

  • addAgent(agent: Agent, rebalance?: boolean): void
  • Add an Agent to this Environment. Once this is called, the Agent's environment property will automatically be set to this Environment.

    since

    0.0.5

    Parameters

    • agent: Agent
    • rebalance: boolean = true

      Whether to rebalance if there is a KDTree (defaults to true)

    Returns void

clear

  • clear(): void

decrement

  • decrement(name: string, n?: number): void
  • 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).

    since

    0.0.8

    Parameters

    • name: string
    • n: number = 1

    Returns void

get

  • get(name: string): any
  • Retrieve an arbitrary piece of data associated by name. If the data has not been set, returns null.

    since

    0.0.5

    Parameters

    • name: string

    Returns any

getAgentById

  • getAgentById(id: string): Agent

getAgents

getData

  • getData(): Data
  • 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
    // }
    
    since

    0.1.0

    Returns Data

increment

  • increment(name: string, n?: number): void
  • 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).

    since

    0.0.8

    Parameters

    • name: string
    • n: number = 1

    Returns void

memo

  • memo(fn: Function, key?: string): any
  • Pass a function to cache and use the return value within the same environment tick.

    since

    0.3.14

    // Within the same time cycle, this function will only be called once.
    // The cached value will be used on subsequent calls.
    const blueAgents = environment.memo(() => {
      return environment.getAgents().filter(a => a.get('color') === 'blue');
    });
    

    Parameters

    • fn: Function

      The function to memoize.

    • Optional key: string

    Returns any

    The return value of the function that was passed.

removeAgent

  • removeAgent(agent: Agent, rebalance?: boolean): void

removeAgentById

  • removeAgentById(id: string): void

set

  • set(name: string | Data, value?: any): void
  • 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');

    since

    0.0.5

    Parameters

    • name: string | Data
    • Optional value: any

    Returns void

stat

  • stat(key: string, useCache?: boolean): any[]
  • 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).

    since

    0.3.14

    Parameters

    • key: string

      The key for which to retrieve data.

    • useCache: boolean = true

      Whether or not to cache the result.

    Returns any[]

    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']
    

tick

  • tick(opts?: number | TickOptions): void
  • 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
    });
    
    since

    0.0.5

    Parameters

    • Optional opts: number | TickOptions

    Returns void

use

  • use(helper: EnvironmentHelper): void

Generated using TypeDoc