Print

Print


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<initialAgents;i++) {   Agent parent = new Agent(); }

schedule.scheduleRepeating(Schedule.EPOCH,0,parent,1);

Steppable reproduction = new Steppable() {

      public void step(SimState state) {

          for(int i=0;i<numAdultParents;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