@model Segregation {
@uses ; // We need this Swarm package
// to store the grid
// Model parameters
@var: int citySize, numOfResidents, ratio, minAgeLimit, maxAgeLimit;
@var: float minLimit, maxLimit;
// The grid holding the agents
@var: id city;
// Parameter: whether to consider empty locations as friendly
@var: boolean emptyIsOK;
$import "resident.maml.stub";
@schedule cyclic (1) {
0: @forEach groupOfResident step; // The step method is to be called
// at each timestep of the model
// for each resident (agent).
}
@sub: (void) createNewResident: (Resident) r {
int color, x, y, age;
float limit;
color = [uniformIntRand getIntegerWithMin: 0 withMax: 100];
if (color= maxLimit) // This branch is needed because
limit = minLimit; // RNG does like if min=max
else
limit = (float)[uniformDblRand getDoubleWithMin: (double) minLimit
withMax: (double) maxLimit ];
// Setting the maxAge parameter randomly in the given range
if (minAgeLimit >= maxAgeLimit) // This branch is needed because
age = minAgeLimit; // RNG does like if min=max
else
age = [uniformIntRand getIntegerWithMin: minAgeLimit
withMax: maxAgeLimit];
[r setColor: color maxAge: age AndLimit: limit];
do {
x = [uniformIntRand getIntegerWithMin: 0 withMax: (citySize-1)];
y = [uniformIntRand getIntegerWithMin: 0 withMax: (citySize-1)];
} while ([city getObjectAtX: x Y: y] != nil);
[r setX: x Y: y];
}
@var: [] Resident residents;
@init:
@create Discrete2d city {
[city setSizeX: citySize Y: citySize];
}
if (numOfResidents > citySize*citySize)
numOfResidents = citySize*citySize;
@create [numOfResidents] Resident residents {
[model createNewResident: residents[_i1_]];
}
}
Return to Contents of this issue
© Copyright Journal of Artificial Societies and Social Simulation, 1999