Print

Print


Well, I had multiple agents that moved but as I could never see it I
changed it to single stationary agent just for troubleshooting.  I also
turned clipping on and off, and tried a variety of colors all in the hope
of the agents appearing. (Like I said -- simple just to learn the system
first)

We had tried a larger display on my student's code which didn't work, but
on the code I sent to the list changing the display does in fact fix this
problem.  I had tried increasing the scale in the display itself when
troubleshooting but that didn't show the agent -- does that scaling do
something else?

Glad to see it was just a simple parameter issue.  Thanks!


On Wed, Jul 24, 2013 at 10:37 AM, Sean Luke <[log in to unmask]> wrote:

> Sure they're there.  You just need to zoom in a few times.  The problem
> here is as follows:
>
>         - all your agents are located at 50x50 and never move, so they're
> piled up on top of one another
>
>         - you're zoomed way out so the agents are teeny tiny
>
>         - green doesn't help in seeing them here
>
>         - neither does turning off clipping
>
> I suggest initially keeping the display at perhaps 8 times the grid size.
>
> Sean
>
> On Jul 24, 2013, at 9:58 AM, Megan Olsen wrote:
>
> > Hi,
> >
> > I'm new to MASON and tried creating a very simple simulation following
> the manual's student example but changing it to a sparse grid (2D).  It
> compiles fine, but when I try to run it I can't see any agents.  My student
> also created her own simulation and has the same problem.  The main
> similarity between us is that we are running java 1.6 on Mac OSX with
> Eclipse. Her code is not the same as mine which is what is leading me to
> believe we either both missed something obvious or one of these 3 factors
> is why the visualization is failing...
> >
> > Any ideas on what could be causing this issue?  I'm copying my classes
> below in case that helps.
> >
> > Thanks!
> > Megan
> >
> > package sim.app.simplepredprey;
> >
> > import sim.portrayal.grid.*;
> > import sim.engine.*;
> > import sim.display.*;
> > import sim.portrayal.simple.*;
> > import javax.swing.*;
> > import java.awt.Color;
> >
> > /**
> >  * Creates all of the GUI elements, including console and visualization
> >  * Grid is 2D, and elements to display are circles
> >  * @author megan olsen
> >  *
> >  */
> > public class SimulationWithUI extends GUIState{
> >
> > public Display2D display;
> > public JFrame displayFrame;
> > SparseGridPortrayal2D gridPortrayal = new SparseGridPortrayal2D();
> > private final short worldwidth = 100; //update when update in Simulation
> > private final short worldheight = 100; //update when update in Simulation
> > /**
> > * directly from tutorial in manual.pdf
> > */
> > public static void main(String[] args)
> > {
> > SimulationWithUI vid = new SimulationWithUI();
> > Console c = new Console(vid);
> > c.setVisible(true);
> > }
> > /**
> > * directly from tutorial in manual.pdf
> > */
> > public SimulationWithUI() { super(new
> Simulation(System.currentTimeMillis())); }
> > public SimulationWithUI(SimState state) { super(state); }
> > public static String getName() { return "Predator Prey Simulation"; }
> > /**
> > * directly from tutorial in manual.pdf
> > */
> > public void start()
> > {
> > super.start();
> > setupPortrayals();
> > }
> > /**
> > * directly from tutorial in manual.pdf
> > */
> > public void load(SimState state)
> > {
> > super.load(state);
> > setupPortrayals();
> > }
> > /**
> > * directly from tutorial in manual.pdf with minor adjustments
> > */
> > public void setupPortrayals()
> > {
> > Simulation sims = (Simulation) state;
> > //tell the portrayals what to portray and how to portray them
> > gridPortrayal.setField(sims.grid);
> > OvalPortrayal2D oval = new OvalPortrayal2D(Color.black);
> > gridPortrayal.setPortrayalForAll(oval);
> > //reschedule the displayer
> > display.reset();
> > //redraw the display
> > display.repaint();
> > }
> > /**
> > * directly from tutorial in manual.pdf with minor adjustments
> > */
> > public void init(Controller c)
> > {
> > super.init(c);
> > display = new Display2D(worldwidth,worldheight,this);
> > display.setClipping(false);
> > displayFrame = display.createFrame();
> > displayFrame.setTitle("Predator Prey Display");
> > c.registerFrame(displayFrame); //so the frame appears in the display list
> > displayFrame.setVisible(true);
> > display.setBackdrop(Color.green);
> > display.attach(gridPortrayal, "Grid");
> > }
> > /**
> > * directly from tutorial in manual.pdf
> > */
> > public void quit()
> > {
> > super.quit();
> > if(displayFrame!=null)
> > displayFrame.dispose();
> > displayFrame = null;
> > display = null;
> > }
> > }
> >
> > package sim.app.simplepredprey;
> >
> > import sim.engine.*;
> > import sim.util.*;
> > import sim.field.grid.*;
> >
> > /**
> >  * Main Model class. Holds the world grid and all agents.  Controls time
> steps.
> >  * @author megan olsen
> >  *
> >  */
> > public class Simulation extends SimState{
> >
> > /**
> > * The world - type allows multiple objects at each integer location
> > */
> > public SparseGrid2D grid;
> >
> > /**
> > * width of the world
> > */
> > private final int gridWidth;
> > /**
> > * height of the world
> > */
> > private final int gridHeight;
> > /**
> > * the number of predator agents in the start of the simulation
> > */
> > private short numPred;
> > //private short numPrey;
> > public Simulation(long seed)
> > {
> > super(seed);
> > gridWidth = 100;
> > gridHeight = 100;
> > numPred = 2;
> > //
> > numPrey = 10;
> > }
> > /**
> > * For setup of the model. Clears the grid and creates the initial agents,
> > * setting the agents to be scheduled at each time step.
> > * @author megan olsen
> > * @param none
> > * @return none
> > */
> > public void start()
> > {
> > super.start();
> > grid = new SparseGrid2D(gridWidth, gridHeight);
> > //grid.clear();
> > /*
> > for(int i=0; i<numPred; i++)
> > {
> > Predator p = new Predator();
> > grid.setObjectLocation(p,  new
> Int2D(grid.getWidth()/2+random.nextInt(grid.getWidth()/2),
> > grid.getHeight()/2 - random.nextInt(grid.getHeight()/2)));
> > schedule.scheduleRepeating(p);
> > }*/
> > Predator p = new Predator();
> > grid.setObjectLocation(p, new Int2D(50,50));
> > schedule.scheduleRepeating(p);
> > /* for(int j=0; j<numPrey; j++)
> > {
> > }*/
> > }
> > /**
> > * Runs the simulation using the built in "doLoop" that steps through
> scheduled agents.
> > * @param args
> > */
> > public static void main(String[] args)
> > {
> > doLoop(Simulation.class, args);
> > System.exit(0);
> > }
> > }
> >
> > package sim.app.simplepredprey;
> >
> > import sim.engine.*;
> > import sim.field.grid.*;
> > import sim.util.*;
> >
> > /**
> >  * Simple agent class for predators
> >  * @author megan olsen
> >  *
> >  */
> > public class Predator implements Steppable{
> >
> > //location is built in -- ObjectLocation
> > /**
> > * The method controlling what each agent does at each time step.
> > * @author megan olsen
> > * @param state the SimState object, used to interact with the world and
> other agents
> > */
> > public void step(SimState state)
> > {
> > //get access to the world through the parameter
> > Simulation mysim = (Simulation) state;
> > SparseGrid2D grid = mysim.grid;
> > Int2D location = grid.getObjectLocation(this); //this agent's location
> > //Int2D can't be changed, so we must create a mutable int to set a new
> location
> > /*
> > MutableInt2D newloc = new MutableInt2D();
> > newloc.x = grid.tx(location.x + 1);
> > newloc.y = grid.ty(location.y + 1);
> > System.out.println(newloc.x + " " + newloc.y);
> > grid.setObjectLocation(this, new Int2D(newloc));*/
> > }
> > }
>