Print

Print


Liviu, thank you for your help, and your code. Now, I understand why mine wasnt working appropriately. The parent agents were scheduled each one separately to perform their step method (here is the main function they realize), and also I use a RandomSequence to schedule a method on them that need to be exucuted in a different order, that is, after all agents have finish their execution on a each step.
Was this RandomSequence the one scheduled in the same order as the children, so the scheduler randomize them "as a group" with the other agents scheduled in the same order. I thought the scheduling mechanism would copy the RandomSequence members to the master list of steppables to be executed on the specify order, so adding new agents to the same order would behave as I expected. RandomSequence can be confusing as doesn't treat agents as entities but only as a list that can be randomized.
Thank you again,
Regards,
Candy.

Liviu Panait <[log in to unmask]> wrote:
I put together some code that's supposed to do what you desire. Here's
the java file:

import sim.engine.*;
import ec.util.*;
import sim.field.grid.*;

public class dele extends SimState
{
public dele(long seed)
{
super(new MersenneTwisterFast(seed), new Schedule(2));
}

public void start()
{
super.start();

for(int i=0;i<5;i++)
{
Steppable parent = new Steppable()
{
public void step(SimState state)
{
System.out.println("PARENT");
}
};
schedule.scheduleRepeating(Schedule.EPOCH,0,parent,1);
}


Steppable reproduction = new Steppable()
{
public void step(SimState state)
{
for(int i=0;i<2;i++)
{
Steppable child = new Steppable()
{
public void step(SimState state)
{
System.out.println("CHILD");
}
};
schedule.scheduleRepeating(schedule.time()+1,0,child,1);
}
}
};
schedule.scheduleRepeating(5, 1, reproduction, 4);

}

public static void main(String[] args)
{
dele dele = new dele(System.currentTimeMillis());
dele.start();
long steps = 0;
while(steps < 20)
{
if (!dele.schedule.step(dele))
break;
steps = dele.schedule.getSteps();
System.out.println("");
}
dele.finish();
System.exit(0);
}

}


Here's the output:

PARENT
PARENT
PARENT
PARENT
PARENT

PARENT
PARENT
PARENT
PARENT
PARENT

PARENT
PARENT
PARENT
PARENT
PARENT

PARENT
PARENT
PARENT
PARENT
PARENT

PARENT
PARENT
PARENT
PARENT
PARENT

PARENT
PARENT
PARENT
PARENT
PARENT

PARENT
PARENT
PARENT
CHILD
PARENT
CHILD
PARENT

CHILD
PARENT
PARENT
PARENT
CHILD
PARENT
PARENT

CHILD
CHILD
PARENT
PARENT
PARENT
PARENT
PARENT

PARENT
PARENT
PARENT
CHILD
CHILD
PARENT
PARENT

CHILD
PARENT
PARENT
CHILD
CHILD
CHILD
PARENT
PARENT
PARENT

CHILD
PARENT
CHILD
PARENT
CHILD
CHILD
PARENT
PARENT
PARENT

PARENT
PARENT
PARENT
CHILD
CHILD
CHILD
PARENT
CHILD
PARENT

CHILD
CHILD
PARENT
CHILD
PARENT
PARENT
PARENT
CHILD
PARENT

CHILD
C HILD
CHILD
PARENT
PARENT
CHILD
CHILD
CHILD
PARENT
PARENT
PARENT

CHILD
CHILD
PARENT
CHILD
CHILD
PARENT
CHILD
PARENT
PARENT
CHILD
PARENT

CHILD
PARENT
CHILD
PARENT
CHILD
PARENT
CHILD
PARENT
CHILD
CHILD
PARENT

PARENT
CHILD
PARENT
PARENT
PARENT
PARENT
CHILD
CHILD
CHILD
CHILD
CHILD

PARENT
PARENT
PARENT
CHILD
CHILD
CHILD
PARENT
CHILD
CHILD
CHILD
PARENT
CHILD
CHILD

CHILD
PARENT
CHILD
CHILD
PARENT
PARENT
CHILD
CHILD
PARENT
CHILD
CHILD
CHILD
PARENT

As you see, the parents and children appear in randomized order, as
expected. I hope you can use this code to see why yours behaves
differently.

Regards,

Liviu.

On Jun 9, 2005, at 7:45 PM, Candy E. Sansores wrote:

> Dear Glean, Sean:
>  
> Basically this is what Im doing (see code below): schedule each
> steppable parent, they are not in a sequence, but the are executed
> randomly, the scheduler suppose to randomly execute the agents. In
> step 600 I dinamically schedule the children (new agents of the same
> type as parents) in the same order as parents. The ideal behaviour
> would be all agents (parents and children) being randomly executed.
> They are randomly executed by groups, that is: some times all parents
> are executed first (randomly) and other times childred, that is:
> PARENT3
> PARENT1
> PARENT2
> CHILD3
> CHILD2
> CHILD1
> or
> CHILD2
> CHILD1
> CHILD3
> PARENT2
> PARENT3
> PARENT1
>  
> I would expect all agents scheduled in the same order be executed
> randomly as a group, at least the data structure that keeps scheduled
> agents is not dynamic. It seems my new agents (children) are put in
> the same order but in another list (group). I know a way to solve
> this, having a dynamic list of agents and scheduling an steppable
> agent that iterate through the list, the steppable reprodution agent
> will add children to the list of agents, but I think doing so is
> against the purpose of Mason fundamentals.
>  
>
> public void start() {
>
>
> for(int i=0;i>
>
> schedule.scheduleRepeating(Schedule.EPOCH,0,parent,1);
>
>
> Steppable reproduction = new Steppable() {
>
>       public void step(SimState state) {
>
>
>           for(int i=0;i>
>               Agent child = new Agent ();
>
>
>               schedule.scheduleRepeating(schedule.time()+1,0,child,1);
>
>            }
>
>      }
>
>
>  };
>
>
> schedule.scheduleRepeating(600, 1, reproduction, 300);
>
>
> }
>
>     
>
> "glen e. p. ropella" <[log in to unmask]>wrote:
>> Sean Luke wrote:
>> >> public Bag agents; // filled with parents and children
>> >> public void step() {
>> >> agents.shuffle(this.random);
>> >> for (int agentNdx=0 ; agentNdx>>
>> schedule.scheduleOnce(agents.objs[agentNdx]);
>> >> }
>> >> }
>> >
>> >
>> > FWIW, there's a tool which does this already: RandomSequence.
>>
>> Does RandomSequence work for dynamic data structures? It appears from
>> the code:
>>
>> -------------------
>> public Steppable[] steps;
>> [...]
>> for(int x=steps.length-1; x>0 ; x--)
>> {
>> int i = (shouldSynchronize ?
>> nextInt(state,x+1) : state.random.nextInt(x+1));
>> temp = steps[i];
>> steps[i] = steps[x];
>> steps[x] = temp;
>> }
>> super.step(state);
>> --------------------
>>
>> that we're using a fixed size array. And if that's the case, I'd have
>> to recreate the RandomSequence at each cycle, thereby defeating the
>> purpose. But, perhaps I'm just not looking deep enough. To resize an
>> array, you'd have to replace the old Sequence instance variable with a
>> new array (with the new size), right?
>>
>> --
>> glen e. p. ropella =><= Hail Eris!
>> H: 503-630-4505 http://ropella.net/~gepr
>> M: 503-971-3846 http://tempusdictum.com
> __________________________________________________
> Do You Yahoo!?
> Tired of spam? Yahoo! Mail has the best spam protection around
> http://mail.yahoo.com


Discover Yahoo!
Find restaurants, movies, travel & more fun for the weekend. Check it out!