Where am I and how do I get
In AnyLogic you are not writing the full code of Java classes from
the beginning to the end. Instead you are entering pieces of code and
expressions in numerous small edit boxes in the properties of various
model elements. Therefore it is important to always understand where
exactly are you writing the code (which class and method it belongs to)
and how can you access other model elements from there.
Most of the code you write when you develop models is the code of an
agent type, more precisely it is the code of one of the agent type methods. No matter whether you are defining
an action of an event, setting parameter of an embedded object, or
writing a startup code – you can assume you are writing the code
of the current agent type. Therefore the following rules apply
(see the Figure):
- The model elements of the same agent type are accessed
simply by their names (because they are the fields of the same class).
Say, you are in the Action
field of the event endOfFY of agent type
Company. To access the embedded
object queue you simply write queue.
To increase the revenue variable you
+= amount. And to restart the endOfFY
event from its own action you should write endOfFY.restart(
- To access an element of an embedded object you should put dot "."
after the embedded object name and then write the element name. For
example, to obtain the size of the queue
object you write queue.size().
If the embedded object is replicated, its name is the name of a
collection of objects and you should specify which one exactly you want to
access. To call the performance()
function of the employee number 247 among employees
of the company you should write: employees(
- To access the container of the current object (the object where
this object is embedded) you call <class of the container object>.
For example, if an object of the Company
type is embedded into Main, you should write main. to get to Main
from within Company. Consequently, to
call the announceSale() function of Main you write main.announceSale().
There is a function getOwner() that also
returns the container object, but its return type is Agent – the base class of Main, Company,
etc. You will need to cast it to Main
before accessing the Main-specific
is useful when we do not
know where exactly the current object is embedded.
- To access a "peer" object (the object that shares the container
with the current one) you should first get up to the container object
and then get down to another embedded object. To access a customer's
loyalty from a company in the Figure, we need first to get to Main and then to Customer
(with particular index): main.customers(i).loyalty.
- These rules naturally extend to the whole hierarchical structure
of AnyLogic model. You can access anything from anywhere. We however
recommend to develop your models in a modular way as much as possible
so that the objects know minimum internals of other objects and setup
and communication is done through parameters, ports, message passing,
and calls of "public" functions.