/** * 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; } }
|