Last updated on 16th July 2024
The global state is an object that can be read by all agents.
If your model doesn't need to make use of a global state, Agents
and the AgentBasedModel
need to be typed as GlobalState
in order for the model to compile.
Generifying agents with default GlobalState (java)
public class MyModel extends AgentBasedModel<GlobalState> {}
public static final class MyAgent extends Agent<GlobalState> {}
If you have some global state to be shared across the system, create a Globals
class that extends GlobalState
, and pass as a type to the AgentBasedModel
. Agents
will now need to be typed as Globals
in order to access values inside Globals
.
Creating a custom global object(java)
public class MyModel extends AgentBasedModel<MyModel.Globals> {
public static final class Globals extends GlobalState {
public float preference = 0.35f;
}
}
public static final class MyAgent extends Agent<Globals> {}
To get the globals
values and update them from inside the model setup()
or step()
.
Accessing a global from model (java)
public class MyModel extends AgentBasedModel<MyModel.Globals> {
public static final class Globals extends GlobalState {
float fillFactor = 0.25f;
}
public void setup() {
getGlobals().fillFactor = 0.5;
super.setup();
}
}
To get the globals
values from inside the Agents
Accessing a global from and agent (java)
public static final class MyAgent extends Agent<Globals> {
private void updateHappiness() {
long similar = // calculate similar
long total = // calculate total
float preference = getGlobals().preference;
this.person.happy = (float) similar / total > preference;
}
}
Annotations can be used inside the global state to set the values of the global state from the console, or to report a global state value.
Annotating a global variable(java)
public static final class Globals extends GlobalState {
@Input public float preference = 0.35f;
}