Link them together and run the simulation
Example with two Netlogo random walk models
The models used are a simple random
walk where, for each simulation step,
agents (so-called walkers) choose a random direction and step forward.
In our example, the walker can go from one model to another. That is,
we define one boundary in each model, when a walker cross that
boundary, it is sent to the other model.
The Netlogo models specifications available
here and
here.
The exchanged data will be here the walkers positions (x,y) and the
walker ID. The output port of one model is linked to the input of
the
other.
Make them work together
Now that we have created all the needed entities (two
model-artefacts, two
model-agents
and two
coupling-artefacts), the last thing to
do is to link them together and to run the simulation process.
We have to make a main class in which we create an instance of the
model-agent 1, the model-artefact-1, the right coupling-artefact ports
as
said previously. We do this twice
(for the model 1 and for the model
2). As a consequence we have two main procedures we can launch into two
separate JVMs. Both programs will interact through their
coupling-artefacts (i.e. JMS platform). (
Get
the code)
public class TestModel2 {
/**
* @param args
*/
public static void main(String[] args) {
// create the agent model
RandomWalkModelAgent2 agent2 = new RandomWalkModelAgent2();
// create the model artifact and link it with the agent
RandomWalkModelArtefact2 modelArtefact2 = new RandomWalkModelArtefact2(
2000);
// link agent and model artifact
agent2.setModelArtefact(modelArtefact2);
// create the coupling artifacts and link them with the agent
// output port (linked with agent 2)
OPCA_ExchangedTurtles1 et_opca2 = new OPCA_ExchangedTurtles1(
ExchangedTurtles1.class,
"north");
// input port (linked with agent 2)
IPCA_ExchangedTurtles2 et_ipca2 = new IPCA_ExchangedTurtles2(
ExchangedTurtles2.class,
"south");
// link
// agent 2 with the coupling artifact ports
agent2.addInputCouplingArtefactPort(et_ipca2);
agent2.addOutputCouplingArtefactPort(et_opca2);
// initialize, post ouptuData and execute the model
agent2.initModel();
agent2.setInitialParameters();
agent2.postOutputData();
agent2.executeModel();
}
}