Running
[Agent practical 9 of 9]
Let's think about the things we may want to adjust in our model and set up externally.
Possible candidates include:
numberOfAgents
;numberOfIterations
;- the eating rate;
- the neighbourhood size;
- the input file;
- the output file.
We'll leave the neighbourhood size for the moment and concentrate on the Nibbler eating.
At the moment the eating rate is hardwired into the code, so we'll have to change that to an instance variable, and we'll also
have to get it passed into our agents using the constructor. In our Model we'd add a eatingRate
instance variable
with the value we want, followed up with an instance variable in the Nibblers and a change in the constructor to connect the
two.
In addition, let's add another variable that says when Nibblers are full up. We'll have to treat this the same way, but let's make this
an optional behaviour that we can turn on or off from the command line. We'll do this by initially setting the value to -1
and then checking whether this has been changed by the command line argument when enacting behaviour. We'll also need some kind of
stomach to fill.
In Model:
private double eatingRate = 10.0;
private double fullUp = -1.0;
----------------------------------
private void buildAgents() {
for (int i = 0; i < numberOfAgents; i++) {
agents.add(
new Nibbler(world,agents,eatingRate,fullUp)
);
}
}
In Nibbler:
private double eatingRate = 10.0;
private double fullUp = -1.0;
private double stomach = 0.0;
----------------------------------
public Nibbler (Environment worldIn, ArrayList
super(worldIn, agentsIn);
x = (int)(Math.random() * world.getWidth());
y = (int)(Math.random() * world.getHeight());
eatingRate = eatingRateIn;
fullUp = fullUpIn;
}
private void interactWithEnvironment () {
if (world.getDataValue(x, y) > eatingRate) {
world.setDataValue(x, y, world.getDataValue(x, y) - eatingRate);
stomach = stomach + eatingRate;
} else {
stomach = stomach + world.getDataValue(x, y);
world.setDataValue(x, y, 0);
}
if (fullUp != -1) checkFull(); // Wouldn't run unless fullUp set.
}
private void checkFull() {
if (stomach >= fullUp) {
stomach = 0;
x = (world.getWidth() - 1) / 2;
y = world.getHeight() - 1;
}
}
Don't worry about cutting and pasting these in for the moment -- we'll give you a fresh copy in a bit.
For now, let's go on to look at what we do with our command line.