AnyLogic
Expand
Font size

Continuous space

The continuous space support includes ability to set and retrieve the current agent location, to move the agent with the specified speed from one location to another, to execute action upon arrival, to animate the (static or moving) agent at its location, to establish connections based on agents layout, and other useful services. Part of continuous space functionality does not even require the agents to belong to an explicitly specified space — the default space type assumed is continuous space.

To set the space type to continuous

  1. In the Projects view, click the container agent type where your agents live (e.g. Main). This shows the agent types properties in the Properties view.
  2. Open the Space and network section of the properties.
  3. In the Agents in the space list, select agent populations that you want to place in this space.
  4. Choose Continuous option from the group of options Space type.
  5. In the properties below, configure the space dimensions.
  6. Optionally, choose the pattern of the initial agent location layout and choose one of the connection network types.

The space dimensions specified in the same section (Width and Height) are only used to lay out agents when any of the standard layout types are applied and do not restrict the agents mobility.

You can use the following methods to get the space dimensions:

  • double spaceHeight() — Returns the height of continuous space.
  • double spaceWidth() — Returns the width of continuous space.
  • double spaceZHeight() — Returns the height of space along Z-axis.

Defining agent’s initial location

Location of an agent in continuous space is defined by real coordinates. There are several ways to define initial locations for agents living in continuous space:

Placing an agent in the specified network node

To place agent in a network node

  1. Click the agent population to open its properties.
  2. In the Initial position properties section, choose the option Place agent(s): in the node.
  3. In the Node field below, specify the name of the network node, where you want to place the agent. If you define location just for one agent, or if you want to place all the agents from the population in the same network node, you can just choose the node name from the drop-down list, or select it by clicking in the graphical editor.
  4. Otherwise, if you want to set different nodes for agents here, you can write a Java expression that will return different nodes depending on some conditions.

Specifying X, Y, Z coordinates

To place agent in the point with the specified X, Y, Z coordinates

  1. Click the agent population to open its properties.
  2. In the Initial position properties section, choose the option Place agent(s): in the specified point.
  3. Specify the location coordinates in the X, Y, Z fields below.

Setting the initial location from code at model startup

The initial location can either be defined “centrally” by space or specified at the agent type.

You can set initial location for agents, by calling the function setXYZ() in the top-level agent’s On startup code (in the Agent actions section of the agent type properties).

void setXYZ(double x, double y, double z) — Sets the coordinates of the agent location. It is only used to initialize the agent location. Assumes the agent is not moving.
x — X-coordinate of the location.
y — Y-coordinate of the location.
z — Z-coordinate of the location.

Using one of predefined layout patterns

To define the initial layout for agent population

  1. Open the properties of the agent where this population lives (e.g. Main).
  2. Open the Space and network properties section.
  3. Check the agent population in the Select the agents ... list.
  4. Choose the initial layout from the Layout type drop-down list.

The User-defined layout type assumes you will take care of the agent locations yourself in e.g. Startup code of the top-level agent (Main). The standard continuous layouts supported by AnyLogic are:

Random
an agent location is chosen randomly and uniformly within the space dimensions

Ring
the agents are uniformly distributed on a ring whose diameter is smaller than the smallest space dimension

Arranged
the agents are arranged within the space dimensions

Spring mass
the agents are located as a spring mass system where agents are masses and their connections are springs. This is network-dependent layout type

You can change the layout type dynamically while the model is running using the API of the agent defining the space, for example:

setLayoutType( type ); // this will just set the default type of layout, the agents will not get relocated
applyLayout(); // this will relocate the agents according to the layout type currently set.

The type parameter can take one of the constants: Agent.LAYOUT_RANDOM, Agent.LAYOUT_ARRANGED, Agent.LAYOUT_RING, Agent.LAYOUT_SPRING_MASS, Agent.USER_DEFINED.

Demo model: Agent Network and Layouts Demo Open the model page in AnyLogic Cloud. There you can run the model or download it (by clicking Model source files).

Agent animation

While the agent is moving, its presentation will also be animated as moving and will always be at its current position (x,y) relative to its origin. This means that if in design time the agent’s presentation was placed at (50,100) on the container (e.g. Main diagram) and the current location of the agent is (17,64), the agent will be shown at (67,164). The rotation of the agent’s presentation is always set to its heading.

If you have several embedded objects representing agents living in the same space, you need to place their (embedded) presentations at the same location on the container diagram to get a consistent picture.
How can we improve this article?