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
>
|