Print

Print


Sean,

Thanks so much for your help, that was exactly what I needed.  Sorry for asking
such a simple question (when I saw the answer it was definitely a "duh" moment
for me) but I'm still learning MASON and getting a feel for how everything
works right now.  Though my experience is little, I still feel confident in
saying that I am very happy with MASON thus far and I am happy that I chose it
over Repast for my model.  Oh and thanks for such a quick response as
well--most appreciated.

Keep up the good work.

Christopher

Quoting Sean Luke <[log in to unmask]>:

> On Oct 19, 2006, at 5:42 PM, Christopher Roach wrote:
>
> > I am currently working on some research where I am trying to
> > optimize the
> > individual ants in Ant Colony Optimization algorithms using
> > evolutionary
> > computation techniques and I am using MASON as my simulation
> > engine.  The
> > problem I am using for testing my algorithm is dynamic TSP and I am
> > using the
> > Network facilities in MASON to represent the TSP graph.  The only
> > problem with
> > this is that even in a small graph--e.g., eil51 with 1275 edges--
> > the number of
> > edges are quite large and displaying them all in the simulation
> > just adds up to
> > a huge amount of noise.  What I would like to be able to do is make
> > all edges in
> > the graph invisible with the exception of the edges that fall on
> > the best path
> > found so far.  So, my question is: does anyone happen to know how
> > to set the
> > visibilty of the individual edges in the network?
>
> You'll need to make a SimpleEdgePortrayal2D subclass which draws
> itself (or doesn't) based on whether or not the edge has a given
> feature.  Presuming that the edges in your best path all have info
> elements which indicate this, the SimpleEdgePortrayal2D can just look
> up this fact in the edge it's handed to draw.  Something like:
>
> public MyPortrayal extends SimpleEdgePortrayal2D
> 	{
> 	public void draw(Object obj, Graphics2D graphics, DrawInfo2D info)
> 		{
> 		Edge e = (Edge)obj;
> 		if (isOnBestPath(e)) super.draw(obj,graphics,inf);
> 		}
>
>      	public boolean hitObject(Object object, DrawInfo2D range)
> 		{
> 		Edge e = (Edge) object;
> 		if (isOnBestPath(e)) super.hitObject(object, range);
> 		}
> 	}
>
> > Also, in the future, I would like to have the best paths (plural)
> > displayed with
> > differing levels of intensity based on the amount of pheromone on
> > each edge.
> > So, if anyone knows of a way to also add a color map to the edges
> > in the
> > network, that would be really helpful as well.
>
> Hmmm, well SimpleEdgePortrayal2D could be rewritten or subclassed so
> that instead of setting the graphics to the color provided, it does
> this:
>
> 	Edge e = (Edge)obj;
> 	if (e.info != null)
> 		{
> 		if (e.info instanceof Valuable)
> 			{
> 			double val = ((Valuable)(e.info)).doubleValue();
> 			graphics.setColor(myColorMap.getColor(val));
> 			}
> 		else if (e.info instanceof Number)
> 			{
> 			double val = ((Number)(e.info)).doubleValue();
> 			graphics.setColor(myColorMap.getColor(val));
> 			}
> 		else graphics.setColor(someDefaultColor);
> 		}
>
> Sean
>