Print

Print


Thanks! I notice in the stack trace though that the exception seems to have
been thrown at
sim.algs.alg2.SimEnviro2WithUI.main(SimEnviro2WithUI.java:32) so you should
take a look there for what is going on.

On Mon, Apr 2, 2018 at 2:43 PM, Stewart Aitken <
[log in to unmask]> wrote:

> Here is the code for controller and model.
>
> package sim.algs.alg2;
> /*
> This is the primary simulation with reproduction of each agent by a single
> child.
> age is to determine death and survival.
> Need to introduce Death, survival probability and colour change due to age.
> /*
>
> Copyright 2006 by Sean Luke and George Mason University
> Licensed under the Academic Free License version 3.0
> See the file "LICENSE" for more information
> */
>
> import ec.util.MersenneTwisterFast;
> //import sim.alg1.Agent;
> import sim.engine.Schedule;
> import sim.engine.Sequence;
> import sim.engine.SimState;
> import sim.engine.Steppable;
> import sim.field.grid.ObjectGrid2D;
> import sim.util.Bag;
>
> import java.io.FileWriter;
> import java.io.PrintWriter;
> import java.io.IOException;
> import java.io.PrintWriter;
> import java.util.Comparator;
>
> public class SimEnviro2  extends SimState {
>
>     private static final long serialVersionUID = 1L;
>     private ObjectGrid2D mySpace;
>     public static final int gridWidth = 5;
>     public static final int gridHeight = 6;
>     private Bag agents;
>     private int initNumberOfAgents = 1;
>
>     public SimEnviro2(long seed) {
>         super(new MersenneTwisterFast(seed), new Schedule());
>     }
>
>     public void start() {
>         super.start();
>         buildModel();
>         buildSchedule();
>     }
>     public void buildModel() {
>         mySpace = new ObjectGrid2D(gridWidth, gridHeight);
>         agents = new Bag();
>         for (int i=0; i<initNumberOfAgents; i++) {
>             agents.add(new Agent2(this));
>         }
>     }
>
>     public void buildSchedule() {
>         // build a sequence that makes all the agents
>         // replicate
>         Sequence agentReplicateSeq = new Sequence(agents) {
>             public void step(SimState state) {
>                 super.step(state);
>                 for (int i=0; i<steps.length; i++)
>                     ((Agent2)steps[i]).replicate(state);
>             }
>         };
>         schedule.scheduleRepeating(0,0,agentReplicateSeq);
>         // build a sequence that makes all the agents
>         // steps is the instance variable in a Sequence
>         //  that stores the Steppable objects
>
>     }
>
>     public int getgridWidth() {
>         return gridWidth;
>     }
>
>     public int getgridHeight() {
>         return gridHeight;
>     }
>     public ObjectGrid2D getMySpace() {
>         return mySpace;
>     }
>
>     public  int getInitNumberOfAgents(){
>         return initNumberOfAgents;
>     }
>
>     public void setInitNumberOfAgents(int initNumberOfAgents) {
>         this.initNumberOfAgents = initNumberOfAgents;
>     }
>
>     public Bag getAgents() {
>         return agents;
>     }
> }
>
> ------------------------------------------------------------
> --------------------------------
> package sim.algs.alg2;
>
> import sim.engine.SimState;
> import sim.engine.Steppable;
> import sim.field.grid.Grid2D;
> import sim.field.grid.ObjectGrid2D;
> import sim.util.Bag;
> import sim.util.IntBag;
> import ec.util.*;
>
> /**
>  * Created by Your PC on 14/05/2015.
>  * Revised 15/03/2018
>  */
> public class Agent2 implements Steppable {
>
>         private static final long serialVersionUID = 1L;
>         public MersenneTwisterFast random;
>         private static final int Width = SimEnviro2.gridWidth;
>         private static final int Height = SimEnviro2.gridHeight;
>
>     private int myX, myY, nextX, nextY;
>     private double age;
>     private int counter = 1;
>
>     // This constructor for offspring
>     public Agent2(){
>         age = 0.0;
>     }
>
>     public Agent2(SimEnviro2 theModel) {
>         placeFirstAgent(theModel);
>         age = 1.0;
>     }
>
>     public void placeFirstAgent(SimEnviro2 theModel) {
>         ObjectGrid2D mySpace = theModel.getMySpace();
>
>         // 2 options either direct placement.
>         do {
>             myX = 0;
>             myY = 0;
>         }
>
>                 // or randomly place agent into grid
> /*              do {
>                         myX = theModel.random.nextInt(Width);
>                         myY = theModel.random.nextInt(Height);
>                 }
> */
>         while (mySpace.field[myX][myY] != null);
>         mySpace.field[myX][myY] = this;
>     }
>
>     public void finish() {
>
>         }
>
>     public void step(SimState state) {
>         // this would make an agent move and grow, then the
>         // next agent move and replicate...  not what we want
> /*              move();
>                 replicate();  */
>     }
>     // Don't need this method as there is not a requirement
>     // of random movement except for the first placement.
>     // each subsequent placement is from the von Neumann neighbours
>     // found by the built-in method.
>
>     public void replicate(SimState state) {
>         SimEnviro2 theModel = (SimEnviro2) state;
>         Bag theAgents = theModel.getAgents();
>
>         ObjectGrid2D mySpace = theModel.getMySpace();
> //        int newX, newY;
>
>         int hop = 8;
>         Bag result = new Bag();
>         IntBag xNeighbors = new IntBag();
>         IntBag yNeighbors = new IntBag();
>
> //              mySpace.getVonNeumannNeighbors(myX, myY, hop,
> Grid2D.BOUNDED, false, null, xNeighbors, yNeighbors);
>                 mySpace.getVonNeumannNeighbors(myX, myY, hop,
> Grid2D.BOUNDED, false, result, xNeighbors, yNeighbors);
>
>         int len = xNeighbors.size();
>         int loc = result.size();
> /*
>         int j;
>         for ( j = 0; j < len-3; j++) {
>                 System.out.println(" Bag size " + len);}
>
>         /*            System.out.print(" x = " + xNeighbors.get(j));
>             System.out.println(" : y = " + yNeighbors.get(j));
>
> *//*
>                 System.out.print(" myX = " + myX);
>         System.out.println(" : myY = " + myY);
>  */
>         for (int i=0; i<len; i++) {
>             Agent2 child = new Agent2();
>             int total = ( Width * Height );
>                 if (len == loc) {
>                         state.finish();
>                 }
>                 nextX = mySpace.tx(xNeighbors.get(i));
>                 nextY = mySpace.tx(yNeighbors.get(i));
>                 if (mySpace.field[nextX][nextY]== null) {
>   //                    System.out.print(" nextX = " + nextX);
>   //                    System.out.println(" : NextY = " + nextY);
>                         System.out.println(" : counter = " + counter);
>                     mySpace.field[nextX][nextY] = child;
>                     child.myX = nextX;
>                     child.myY = nextY;
>                     theAgents.add(child);
>
> //                    System.out.println("Final :" + ((total - counter) -
> 1));
>
>                     counter++;
>                     break;
>                 }
>         }
>
>         myX = nextX; myY = nextY;
>         if ( counter  == ( Width * Height )) {
>                 state.finish();
>         }
>     }
> }
>