TutModel.java

TutAgent.java

/**
* Very simple Model class for Buttons tutorial.
*/

import uchicago.src.sim.engine.SimpleModel;
import uchicago.src.sim.engine.SimInit;
import uchicago.src.sim.gui.DisplaySurface;
import uchicago.src.sim.gui.Object2DDisplay;
import uchicago.src.sim.space.Object2DTorus;
import uchicago.src.sim.analysis.OpenSequenceGraph;
import uchicago.src.sim.analysis.Sequence;
import java.awt.*;

public class TutModel extends SimpleModel {
private DisplaySurface dsurf;
private int spaceSize = 50;
private int buttons = 500;
private int clusterSz;
private OpenSequenceGraph plot;

public TutModel () {
params = new String[] { "Buttons", "SpaceSize"};
}

// Overrides of SimpleModel
public void setup() {
super.setup();
clusterSz = 1;

if (dsurf != null) dsurf.dispose();
dsurf = new DisplaySurface(this, "Buttons Display");
super.registerDisplaySurface("Buttons Display", dsurf);

if (plot != null) plot.dispose();
plot = new OpenSequenceGraph("Buttons", this);
plot.setAxisTitles("time", "cluster");
plot.addSequence("MaxCluster", new Sequence() {
public double getSValue() { return clusterSz; }
});
}

public void buildModel() {
Object2DTorus space = new Object2DTorus(spaceSize, spaceSize);
for (int i = 0; i<buttons; i++) {
int x = getNextIntFromTo(0, spaceSize - 1);
int y = getNextIntFromTo(0, spaceSize - 1);
Color color = new Color(
getNextIntFromTo(0,255),
getNextIntFromTo(0,255),
getNextIntFromTo(0,255)
);

TutAgent btn = new TutAgent(space, i);
btn.setXY(x,y);
btn.setColor(color);
agentList.add(btn);
}

Object2DDisplay display = new Object2DDisplay(space);
dsurf.addDisplayable(display, "Buttons Space");

plot.setXRange(0, buttons*2);
plot.setYRange(0, buttons);

plot.display();
dsurf.display();
}

public void step(){
TutAgent a1=(TutAgent)agentList.get(getNextIntFromTo(0,buttons-1));
TutAgent a2=(TutAgent)agentList.get(getNextIntFromTo(0,buttons-1));
int g1=a1.getGroup();
int g2=a2.getGroup();
int thisClusterSz = 0;
for (int i = 0; i < agentList.size(); i++) {
TutAgent a = (TutAgent)agentList.get(i);
if (a.getGroup() == g1) {
a.setGroup(g2);
a.setColor(a2.getColor());
}
if (a.getGroup() == g2)
thisClusterSz++;
}
clusterSz = Math.max(clusterSz,thisClusterSz);

plot.step();
dsurf.updateDisplay();
if (clusterSz == buttons)
getController().pauseSim();
}

//Getters/Setters
public int getButtons() { return buttons; }
public void setButtons(int buttons) { this.buttons = buttons; }

public int getSpaceSize() { return spaceSize; }
public void setSpaceSize(int spaceSize) { this.spaceSize = spaceSize; }

// To launch simulation, from the dir w/ Tut classes:
// java -classpath <repast>/lib/repast.jar:. TutModel
public static void main(String[] args) {
SimInit init = new SimInit();
init.loadModel(new TutModel(), null, false);
}
}


/**
* The Button agent.
*/
import uchicago.src.sim.space.Object2DTorus;
import uchicago.src.sim.gui.Drawable;
import uchicago.src.sim.gui.SimGraphics;
import java.awt.*;

public class TutAgent implements Drawable {
private int who;
private int group;
private int x, y;
private Color color;
private Object2DTorus space;

public TutAgent(Object2DTorus space, int who){
this.who = who;
this.group = who;
this.space = space;
}

public void draw(SimGraphics g) {
g.drawFastCircle(color);
}

public void setXY(int x, int y) {
if (space.getObjectAt(this.x, this.y)==this)
space.putObjectAt(this.x, this.y,null);
this.x = x;
this.y = y;
space.putObjectAt(x,y,this);
}

//Getter/Setters
public int getX() { return x; }
public int getY() { return y; }
public int getWho(){ return who; }

public void setGroup(int group) { this.group = group; }
public int getGroup() { return group; }

public void setColor(Color color) { this.color = color; }
public Color getColor(){ return color; }
}