Print

Print


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/