![]() |
Subject: Re: How to restrict initAgents?
From: Pierre Bommel (bommel@cirad.fr)
Date: Mon Mar 06 2006 - 16:46:00 CET
Sorry, there is an error in my method ! It should be:
setRandomlyLocatedAgents: aClass n: aNumber constrainedBy: aBlock
" The new agents are randomly located on the cells verifying the
constraint "
| a targetCell |
aNumber timesRepeat:
[targetCell := Cormas selectRandomlyFrom: (self theESE select: [:c |
aBlock value: c]).
targetCell isNil
ifTrue:
[Dialog warn: 'No available cell for the constraint. The
simulation will stop'.
self halt].
a := (self newEntity: aClass) init.
a moveTo: targetCell]
Pierre
Le 6 mars 06, à 12:28, Pierre Bommel a écrit :
> Dear Mira,
>
> To create and put your agents on restricted cells, you should write a
> method. For example :
>
> setRandomlyLocatedAgents: aClass n: aNumber constrainedBy: aBlock
> " The new agents are randomly located on the cells verifying the
> constraint "
> | a targetCell |
> aNumber timesRepeat:
> [targetCell := Cormas selectRandomlyFrom: (self theESE select: [:c
> | aBlock value: c]).
> targetCell isNil
> ifTrue:
> [Dialog warn: 'No available cell for the constraint. The
> simulation will stop'.
> self halt].
> a := self newEntity: aClass.
> a perform: aSymbol withArguments: aCollec.
> a moveTo: targetCell]
>
> Then in your init, you can add :
> super initAgents.
> self setRandomlyLocatedAgents: Tourist n:100 constrainedBy: [:cell
> | cell state=#land or:[cell state=#street]].
>
> By adding the 2 joined .ST files, it is not necessary to create the
> "setRandomlyLocatedAgents:n:constrainedBy:" method.
>
> Remark: These methods will be in the next Cormas release (+
> randomCellConstrainedBy: aBlock)
>
> Pierre
> <CormasModel-randomFreeCell.st><CormasModel-
> setRandomlyLocatedObjectsninitMethodconstrainedBy.st>
>
> Le 6 mars 06, à 10:55, Miao Wang a écrit :
>
>> Hi all!
>>
>> I have imported a map into Cormas and I'm trying to simulate crowds
>> walking in the streets.Now I have some problems:
>>
>> according to the tutorial, after I identified the intAgents in
>> instance-creation like this
>>
>> initAgents
>> super initAgents.
>> self setRandomlyLocatedAgents: Tourist n:100
>>
>> The 100 agents are ramdomly standing all over the visualisation
>> space window ,no matter which attibute the cell has(river or building
>> or even out of the map(no value area)).But what I want is just to let
>> the 100 agents been restricted in cells with attributes of 'lands'
>> or 'streets'.
>>
>> I thought a conditonal test is needed. so I add:
>>
>> super initAgents.
>> self patch state=#Lands ifTrue:[self setRandomlyLocatedAgents:
>> Tourist n:100].
>>
>> But Cormas show:
>>
>> "Unhandled exception:message not understood:#patch."
> patch is a method of AgentLocation (it returns the cell on which is
> located the agent). It is not a method of CormasModel.
>
>>
>> Is there anyone who can give me some idea about it?
>>
>> Thank you very much!
>>
>> Mira
>>
>>
>>
>>
> Pierre Bommel - CIRAD - UR Green
> Universidade de Brasilia - CDS
> SHIS QI 26, Conjunto 15, Casa 18
> 71670-150
> Brasilia DF
> tel: (00 55 61) 3367 3405
> http://www.cirad.fr/ur/green
>
Pierre Bommel - CIRAD - UR Green
Universidade de Brasilia - CDS
SHIS QI 26, Conjunto 15, Casa 18
71670-150
Brasilia DF
tel: (00 55 61) 3367 3405
http://www.cirad.fr/ur/green