Hi Sean, thanks for all the help. I'd like to be able to help, if I can, students in Dr. Axtell's classes for example that may want some guidance getting started with Mason. Parts of how Mason's working are still a little 'magical' to me, but should get easier with time. I'm modeling the CoordinationGame (from Ascape) on your Schoolyard example. I also just got some code working from using the draw() function from AntsForaging on Mason. Here's what I have (this is kind of hybrid code at this point) This code now shows a mixed number of yellow and red oval agents (CoordinationPlayer) on a blue grid. So I think the initial beginning is now working. Sean - I'm not sure where I would insert your "MyPortrayal" suggestion. Is it the same thing I'm doing here, or is there an essential difference. I think my version may have each agent drawing/painting themselves, your MyPortrayal version may be different? See if this is a good structure to start from. I'd like to be able to translate easily - and show other students how to do this - from Ascape/Netlogo/Repast to Mason. I'd like to think that this is possible to do. Thanks Randy Here's my CoordinationGame (adapting from Ascape) so far - FILE 1: public class CoordinationPlayer implements Steppable { protected SimpleColorMap colormap = new SimpleColorMap(0,1,Color.black,Color.white); public Color color; public CoordinationPlayer() { if ((int)(Math.random()*2) == 0) color = Color.red;// colormap.getColor(.2); else color = Color.yellow; //colormap.getColor(.7); } public Color getColor() { return color; } public void step(SimState state) { CoordinationPlayers students = (CoordinationPlayers) state; ObjectGrid2D yardgrid = students.yardgrid; } public final void draw(Object object, Graphics2D graphics, DrawInfo2D info) { THIS IS FROM ANTS FORAGING: int x = (int)(info.draw.x - info.draw.width / 2.0); int y = (int)(info.draw.y - info.draw.height / 2.0); int width = (int)(info.draw.width); int height = (int)(info.draw.height); graphics.setColor(color); graphics.fillOval(x,y,width, height); } } FILE 2 public class CoordinationPlayers extends SimState { public int yardgridWidth=10; public int yardgridHeight = 10; public ObjectGrid2D yardgrid = new ObjectGrid2D(yardgridWidth,yardgridHeight); public int numStudents = 30; public int numBuyers = 30; double forceToSchoolMultiplier= 0.01; double randomMultiplier = 0.1; public Network buddies = new Network(false); public CoordinationPlayers(long seed) { super(seed); } public void start() { super.start(); yardgrid.clear(); for(int i = 0; i < numStudents; i++) { CoordinationPlayer student = new CoordinationPlayer(); int x = random.nextInt(yardgridWidth); int y = random.nextInt(yardgridHeight); yardgrid.set(x,y,student); do { x = random.nextInt(yardgridWidth); y = random.nextInt(yardgridHeight); } while (yardgrid.get(x,y) != null); schedule.scheduleRepeating(student); } } public static void main(String[] args) { doLoop(CoordinationPlayers.class, args); // Longer version: /* SimState state = new Students(System.currentTimeMillis()); state.start(); do if (!state.schedule.step(state)) break; while(state.schedule.getSteps() < 5000); state.finish(); */ System.exit(0); } } FILE 3 public class CoordinationGameWithUI extends GUIState { public Display2D display; public JFrame displayFrame; //ContinuousPortrayal2D yardPortrayal = new ContinuousPortrayal2D(); ObjectGridPortrayal2D yardgridPortrayal = new ObjectGridPortrayal2D(); NetworkPortrayal2D buddiesPortrayal = new NetworkPortrayal2D(); public static void main(String[] args) { CoordinationGameWithUI vid = new CoordinationGameWithUI(); Console c = new Console(vid); c.setVisible(true); } public CoordinationGameWithUI() { super(new CoordinationPlayers(System.currentTimeMillis())); } public CoordinationGameWithUI(SimState state) { super(state); } public static String getName() { return "Coordination Game"; } public void start() { super.start(); setupPortrayals(); } public void load(SimState state) { super.load(state); setupPortrayals(); } public void setupPortrayals() { CoordinationPlayers students = (CoordinationPlayers) state; yardgridPortrayal.setField(students.yardgrid); // yardgridPortrayal.setPortrayalForClass(CoordinationPlayer.class,new RectanglePortrayal2D(Color.red,true)); // yardgridPortrayal.setPortrayalForNull(new RectanglePortrayal2D(Color.blue,true)); // yardgridPortrayal.setPortrayalForAll(new RectanglePortrayal2D(Color.blue,false)); //yardPortrayal.setField(students.yardgrid); //yardPortrayal.setPortrayalForAll(new OvalPortrayal2D()); display.reset(); display.setBackdrop(Color.blue); display.repaint(); } public void init(Controller c) { super.init(c); display = new Display2D(600,600,this); display.setClipping(false); displayFrame = display.createFrame(); displayFrame.setTitle("Schoolyard Display"); c.registerFrame(displayFrame); displayFrame.setVisible(true); //display.attach(buddiesPortrayal, "Buddies"); display.attach(yardgridPortrayal, "Yard"); } public void quit() { super.quit(); if (displayFrame != null) displayFrame.dispose(); displayFrame = null; display = null; } } On 20.03.2012 08:07, Sean Luke wrote: > Hi Randy. Richard's suggestion assumed that your agents are > portraying themselves. I won't make that assumption. Let's say that > each agent has a function called myColor() which returns a Color. > Then you could simply do: > > public class MyPortrayal > extends RectanglePortrayal2D { > > public draw(Object obj Graphics2D g, DrawInfo2D inf) > { > MyAgent agent = (MyAgent) obj; > g.setPaint(agent.myColor()); > super.draw(); > } > } > } > > > > > On Mar 20, 2012, at 7:39 AM, Randolph Latimer wrote: > >> Thanks Richard, >> I'm trying to have each agent portrayed with it's own particular >> color. I tried your code suggestion (I may not be doing something >> correct), and all the CoordinationPlayer agents have the same color, >> either red or yellow, in this case. >> I'd like a blend of different colored agents portrayed, and the >> color is determined within the single agent class, like >> CoordinationPlayer. >> Thanks for your help, >> Randy Latimer >> >> On 20.03.2012 04:20, Richard O. Legendi wrote: >>> Hi Randy, >>> >>> I'm a bit unsure if it helps you, but you can simply subclass >>> _RectanglePortrayal2D_ directly with _CoordinationPlayers_, >>> something >>> like the following code (haven't tested). >>> >>> This way you'll have a _color_ variable (called _paint_) by >>> default. >>> >>>> public class CoordinationPlayer >>>> extends RectanglePortrayal2D >>>> implements Steppable { >>>> >>>> private static final double DIAMETER = 6.0; >>>> >>>> public CoordinationPlayer() { >>>> super(DIAMETER); >>>> paint = (random.nextInt(2) == 0) ? Color.RED : >>>> Color.YELLOW; >>>> } >>>> >>>> ... >>>> } >>> This way you don't need the magic in the _setupPortroyals()_ >>> function. >>> >>> HTH, >>> Richard >>> >>> -- >>> Richard O. Legendi >>> Software developer >>> Intelligent Applications and Web Services >>> AITIA International, Inc. >>> http://people.inf.elte.hu/legendi/ [2] >>> >>> On 2012.03.19. 14:53, Randolph Latimer wrote: >>> >>>> I'm starting out again with Mason and will appreciate some help >>>> with >>>> what I expect are fairly simple questions. >>>> >>>> I'm transferring a Coordination Game model from Ascape to Mason. >>>> The Ascape code is described here, if anyone's interested - >>>> http://ascape.sourceforge.net/manual/Section3.html [1] >>>> >>>> In Mason, I'm using the Schoolyard model as a starter. >>>> In Coordination Game, each agent needs a variable for its color. >>>> I'm trying something like this (I don't think I'm implementing >>>> Mason SimpleColorMap correctly): >>>> >>>> public class CoordinationPlayer implements Steppable >>>> { >>>> //public static final double MAX_FORCE = 3.0; >>>> protected SimpleColorMap colormap = new >>>> SimpleColorMap(0,1,Color.black,Color.white); >>>> public Color color; >>>> public MersenneTwisterFast random = new >>>> MersenneTwisterFast(); >>>> >>>> public CoordinationPlayer() >>>> { >>>> if (random.nextInt(2) == 0) >>>> color = Color.red;// colormap.getColor(.2); >>>> else color = Color.yellow; //colormap.getColor(.7); >>>> } >>>> >>>> public Color getColor() >>>> { >>>> return color; >>>> } >>>> >>>> In CoordinationGameWithUI, - the color is displayed here, in this >>>> hybrid code from the Schoolyard model. >>>> I'm trying to set the color with setPortryalForClass, where each >>>> class object has its own color. >>>> This isn't working correctly: >>>> >>>> public void setupPortrayals() >>>> { >>>> CoordinationPlayers students = (CoordinationPlayers) >>>> state; >>>> >>>> yardgridPortrayal.setField(students.yardgrid); >>>> I'M TRYING TO SET THE COLOR HERE: >>>> >>>> yardgridPortrayal.setPortrayalForClass(CoordinationPlayer.class, >>>> new >>>> RectanglePortrayal2D(CoordinationPlayer.getColor(),true)); //new >>>> >>> >>>> RectanglePortrayal2D(Color.red,true)); >>>> yardgridPortrayal.setPortrayalForNull(new >>>> RectanglePortrayal2D(Color.blue,true)); >>>> >>>> Thanks for any help - >>>> Randy Latimer >>> >>> >>> Links: >>> ------ >>> [1] http://ascape.sourceforge.net/manual/Section3.html >>> [2] http://people.inf.elte.hu/legendi/