On Jul 16, 2014, at 6:19 AM, Simone Gabbriellini <[log in to unmask]> wrote:
> I have an old simulation in C and I am trying to port it in MASON. I have two types of agents, say A and B. Now, each of these agents has to to run different procedures, say procedure1 and procedure2 (I have many more...). My point is: how to schedule right this logic in MASON?
So in short you have two kinds agents which must each call a certain procedure, and this must all be done within a certain timestep, and the A agents must all be before the B agents for each procedure. This would be done using (1) anonyomous steppables [or if you must, sim.engine.MethodStep] and (2) the "ordering" facility in the schedule. You'd do this in your start() method:
for(each agent of type A)
{
final AgentA a = agent;
state.scheduleRepeating(
new Steppable() { public void step(SimState state) a.procedure1(); } },
0, 1);
}
for(each agent of type B)
{
final AgentB b = agent;
state.scheduleRepeating(
new Steppable() { public void step(SimState state) b.procedure1(); } },
1, 1);
}
for(each agent of type A)
{
final AgentA a = agent;
state.scheduleRepeating(
new Steppable() { public void step(SimState state) a.procedure1(); } },
2, 1);
}
for(each agent of type B)
{
final AgentB b = agent;
state.scheduleRepeating(
new Steppable() { public void step(SimState state) b.procedure1(); } },
3, 1);
}
> My main so far is:
>
> public static void main(String[] args) {
> // main loop for the model
> SimState state = new SimulationEnvironment(System.currentTimeMillis());
> state.nameThread();
> for (int job = 0; job < MC; job++) { // MC is the number of runs
> state.setJob(job);
> state.start();
> do
> if(!state.schedule.step(state)) break;
> while(state.schedule.getSteps() < T); // T is the steps limit for a single run
> state.finish();
> }
> System.exit(0);
> }
Why are you doing a main? Why not just use doLoop?
> BTW: my agents are on a SparseGrid2D, when I retrieve them should I randomize their order or is it done automagically somewhere?
SparseGrid2D is a representation of space. It has nothing to do with the schedule, which is a representation of time. So it won't make any difference.
Sean
|