Link them together and run the simulation
Example with a Netlogo random walk model
The model used is a simple random
walk where, for each simulation step,
agents (so-called walkers) choose a random direction and step forward.
The Netlogo model specification is available
here.
The exchanged data will be here the walkers positions (x,y) the same
for input and output. In this simplistic case, the model exchange
theses
data with itself (i.e. its input port correspond to its output port).
Since not very useful for simulation results, this
example allows to introduce the very first concepts and their
implementation
In this tutorial, we present the linkage between all the entities (agents and artefact) in order to run the simulation.
Make them work together
Now that we have created all the needed entities (one
model-artefact, one
model-agent and one
coupling-artefact), the last thing to do is to link them together and to run the simulation process.
The first thing to do is to create an instance of the model-agent, one
instance of the model-artefact and link them together. Then we create
the coupling-artefact instance which is in fact composed of an input
and an output port (see
concepts).
Since we have only one agent and that we decided to couple our model
with itself (see the figure above), we need to link our model-agent
with the coupling-artefact input and output port (note that
when coupling several models together, the model-agent is not necessarily linked with the same coupling-artefact ports).
Finally, the last step is to initiate the model, post the initial output
data (in order to bootstrap the process) and the to execute the model. (
Get the code)
/**
* In this example, we take only one model and its simulator. We couple the
* input port of the model with its own output port. This way, we show that the
* AA4MM framework can be used with a single model and its simulator.<br>
* This model used is a simple random walk. Each agent choose randomly the
* direction it is going to take.
*
* @author Julien Siebert
* @since Darjeeling
*/
public class TestRandomWalk {
/**
* @param args
*/
public static void main(String[] args) {
// create the agent model
RandomWalkModelAgent agtRandomWalk = new RandomWalkModelAgent();
// create the model artifact and link it with the agent
RandomWalkModelArtefact modRandomWalk = new RandomWalkModelArtefact(40,
40);
// link agent and model artifact
agtRandomWalk.setModelArtefact(modRandomWalk);
// create the coupling artifacts and link them with the agent
IPCA_WalkerPositions tp_ipca = new IPCA_WalkerPositions(
TurtlePositions.class, "turtle_positions_ipca");
OPCA_WalkerPositions tp_opca = new OPCA_WalkerPositions(
TurtlePositions.class, "turtle_positions_opca");
// link
agtRandomWalk.addInputCouplingArtefactPort(tp_ipca);
agtRandomWalk.addOutputCouplingArtefactPort(tp_opca);
// initialize, post ouptuData and execute the model
agtRandomWalk.initModel();
agtRandomWalk.postOutputData();
agtRandomWalk.executeModel();
}
}