public abstract class AgentBasedModel<T extends GlobalState> extends java.lang.Object implements Model
| Modifier and Type | Field and Description |
|---|---|
AgentSystem<T> |
system |
| Constructor and Description |
|---|
AgentBasedModel() |
| Modifier and Type | Method and Description |
|---|---|
DoubleAccumulator |
createDoubleAccumulator(java.lang.String name)
createDoubleAccumulator(String, String) using the name for reporting
purposes. |
DoubleAccumulator |
createDoubleAccumulator(java.lang.String name,
java.lang.String displayName)
Create a
DoubleAccumulator. |
LongAccumulator |
createLongAccumulator(java.lang.String name)
createLongAccumulator(String, String) using the name for reporting
purposes. |
LongAccumulator |
createLongAccumulator(java.lang.String name,
java.lang.String displayName)
Create a
LongAccumulator. |
void |
done() |
void |
emitData(ModelContext context,
ModelExecutionPhase phase) |
void |
enableAtomicLogging() |
void |
finish() |
void |
firstStep(Section... sections)
Works like the
AgentBasedModel#run(Section) function but only when time = 0 |
<A extends Agent<T>> |
generateGroup(boolean logger,
java.lang.Class<A> agentClass,
long size) |
<A extends Agent<T>> |
generateGroup(java.lang.Class<A> agentClass,
long size)
generateGroup(Class, long, SerializableConsumer) without a data
injector so no initial function is run for agents |
<A extends Agent<T>> |
generateGroup(java.lang.Class<A> agentClass,
long size,
SerializableConsumer<A> dataInjector)
Create a
Group of agents. |
Configuration |
getConfig() |
ModelContext |
getContext() |
DoubleAccumulator |
getDoubleAccumulator(java.lang.String name) |
T |
getGlobals() |
LongAccumulator |
getLongAccumulator(java.lang.String name) |
AgentSystem<T> |
getSystem() |
void |
kickOff(Section... sections)
Works like the
AgentBasedModel#run(Section) function but only when time = kickoff as defined in ModelSettings |
void |
lastStep(Section... sections)
Works like the
AgentBasedModel#run(Section) function but only when time = end as defined in ModelSettings |
<A extends Agent<T>> |
loadGroup(java.lang.Class<A> clazz,
Source source)
loadGroup(Class, Source, SerializableConsumer) without a data injector
so no initial function is run for agents |
<A extends Agent<T>> |
loadGroup(java.lang.Class<A> agentClass,
Source source,
SerializableConsumer<A> dataInjector)
|
void |
registerAgentType(java.lang.Class<? extends Vertex<T>> type)
Deprecated.
|
void |
registerAgentTypes(java.lang.Class<? extends Vertex<T>>... types) |
void |
registerLinkTypes(java.lang.Class<? extends Link>... types) |
void |
registerMessageTypes(java.lang.Class<? extends Message>... types) |
void |
registerSchemas(ModelContext dataContext) |
void |
run(Section... sections) |
<A extends Agent<T>> |
select(java.lang.Class<A> agentType) |
void |
setup()
An optional lifecycle point at which to take configured initial parameters and initialise
required internal state.
|
boolean |
shouldEmitData() |
<A extends Agent<T>> |
stats(java.lang.Class<A> agentType) |
void |
step()
Required lifecycle method for implementing the calculation of a model.
|
void |
writeToLog(ALCat inType,
java.lang.String value) |
void |
writeToLog(java.lang.String value) |
public final AgentSystem<T extends GlobalState> system
public void enableAtomicLogging()
public void writeToLog(ALCat inType, java.lang.String value)
writeToLog in interface Modelpublic void writeToLog(java.lang.String value)
public <A extends Agent<T>> Group<A> generateGroup(java.lang.Class<A> agentClass, long size)
generateGroup(Class, long, SerializableConsumer) without a data
injector so no initial function is run for agentspublic <A extends Agent<T>> Group<A> generateGroup(boolean logger, java.lang.Class<A> agentClass, long size)
public <A extends Agent<T>> Group<A> generateGroup(java.lang.Class<A> agentClass, long size, SerializableConsumer<A> dataInjector)
Group of agents.A - Agent TypeagentClass - Agent Class of agents to be created in this groupsize - Number of agents to create in this groupdataInjector - Function run when each agent is created which can be used to set
initialization values of agentGroup instancepublic <A extends Agent<T>> Group<A> loadGroup(java.lang.Class<A> clazz, Source source)
loadGroup(Class, Source, SerializableConsumer) without a data injector
so no initial function is run for agentspublic <A extends Agent<T>> Group<A> loadGroup(java.lang.Class<A> agentClass, Source source, SerializableConsumer<A> dataInjector)
public T getGlobals()
T.@Deprecated public final void registerAgentType(java.lang.Class<? extends Vertex<T>> type)
type - @SafeVarargs public final void registerAgentTypes(java.lang.Class<? extends Vertex<T>>... types)
@SafeVarargs public final void registerMessageTypes(java.lang.Class<? extends Message>... types)
@SafeVarargs public final void registerLinkTypes(java.lang.Class<? extends Link>... types)
public <A extends Agent<T>> AgentSelection<A> select(java.lang.Class<A> agentType)
public <A extends Agent<T>> AgentStatistics<A> stats(java.lang.Class<A> agentType)
public LongAccumulator createLongAccumulator(java.lang.String name, java.lang.String displayName)
LongAccumulator.name - Name used to access this accumulatordisplayName - Name used for reporting the result of this accumulatorLongAccumulator instancepublic DoubleAccumulator createDoubleAccumulator(java.lang.String name, java.lang.String displayName)
DoubleAccumulator.name - Name used to access this accumulatordisplayName - Name used for reporting the result of this accumulatorLongAccumulator instancepublic LongAccumulator createLongAccumulator(java.lang.String name)
createLongAccumulator(String, String) using the name for reporting
purposes.public DoubleAccumulator createDoubleAccumulator(java.lang.String name)
createDoubleAccumulator(String, String) using the name for reporting
purposes.public LongAccumulator getLongAccumulator(java.lang.String name)
public DoubleAccumulator getDoubleAccumulator(java.lang.String name)
public void setup()
Modelpublic void step()
Modelstep will be called once or more times, with the external user or simudyne.core.exec.harness able to read outputs, change inputs, etc. in-between calls. Each step represents the moving forward in time, but the explicit notion of progress is left as specific to the implementing model.
public void finish()
public void run(Section... sections)
public void firstStep(Section... sections)
AgentBasedModel#run(Section) function but only when time = 0sections - public void lastStep(Section... sections)
AgentBasedModel#run(Section) function but only when time = end as defined in ModelSettingssections - public void kickOff(Section... sections)
AgentBasedModel#run(Section) function but only when time = kickoff as defined in ModelSettingssections - public ModelContext getContext()
public Configuration getConfig()
public void emitData(ModelContext context, ModelExecutionPhase phase)
public boolean shouldEmitData()
shouldEmitData in interface Modelpublic void registerSchemas(ModelContext dataContext)
registerSchemas in interface ValueregisterSchemas in interface Modelpublic AgentSystem<T> getSystem()