sim.app.antsforage.AntsForage Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of mason Show documentation
Show all versions of mason Show documentation
MASON is a fast discrete-event multiagent simulation library core in Java, designed to be the foundation for large custom-purpose Java simulations, and also to provide more than enough functionality for many lightweight simulation needs. MASON contains both a model library and an optional suite of visualization tools in 2D and 3D.
The newest version!
/*
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
*/
package sim.app.antsforage;
import sim.engine.*;
import sim.field.grid.*;
public /*strictfp*/ class AntsForage extends SimState
{
public static final int HOME_XMIN = 75;
public static final int HOME_XMAX = 75;
public static final int HOME_YMIN = 75;
public static final int HOME_YMAX = 75;
public static final int FOOD_XMIN = 25;
public static final int FOOD_XMAX = 25;
public static final int FOOD_YMIN = 25;
public static final int FOOD_YMAX = 25;
public static final int MAX_ANTS_PER_LOCATION = 10;
public static final int TIME_TO_LIVE = 1000;
public static final int NEW_ANTS_PER_TIME_STEP = 2;
public static final int MAX_ANTS = 1000;
public static final int INITIALANTS = 2;
public static final double MIN_PHEROMONE = 0.0;
public static final double MAX_PHEROMONE = 1000.0;
public static final double PHEROMONE_TO_LEAVE_BEHIND = 1;
public static final double EVAPORATE_CONSTANT = 0.0001;
public static final double DIFFUSION_CONSTANT = 0.0001;
public static final int GRID_HEIGHT = 100;
public static final int GRID_WIDTH = 100;
public static final int NO_OBSTACLES = 0;
public static final int ONE_OBSTACLE = 1;
public static final int TWO_OBSTACLES = 2;
public static final int ONE_LONG_OBSTACLE = 3;
public static final int OBSTACLES = TWO_OBSTACLES;
/*
public static final int HOME_XMIN = 24;
public static final int HOME_XMAX = 26;
public static final int HOME_YMIN = 24;
public static final int HOME_YMAX = 26;
public static final int FOOD_XMIN = 4;
public static final int FOOD_XMAX = 6;
public static final int FOOD_YMIN = 42;
public static final int FOOD_YMAX = 44;
public static final int MAX_ANTS_PER_LOCATION = 5;
public static final int TIME_TO_LIVE = 200;
public static final int NEW_ANTS_PER_TIME_STEP = 2;
public static final int MAX_ANTS = 100;
public static final int INITIALANTS = 2;
public static final double MIN_PHEROMONE = 0.0;
public static final double MAX_PHEROMONE = 110.0;
public static final double PHEROMONE_TO_LEAVE_BEHIND = 1;
public static final double EVAPORATE_CONSTANT = 0.01;
public static final double DIFFUSION_CONSTANT = 0.05;
public static final int GRID_HEIGHT = 50;
public static final int GRID_WIDTH = 50;
public static final double RANDOM_MOVEMENT_PROBABILITY = 0.1;
*/
/*
public static final int HOME_XMIN = 52;
public static final int HOME_XMAX = 54;
public static final int HOME_YMIN = 52;
public static final int HOME_YMAX = 54;
public static final int FOOD_XMIN = 22;
public static final int FOOD_XMAX = 24;
public static final int FOOD_YMIN = 22;
public static final int FOOD_YMAX = 24;
public static final int MAX_ANTS_PER_LOCATION = 10;
public static final int TIME_TO_LIVE = 200;
public static final int newAntsPerTimeStep = 10;
public static final int MAX_ANTS = 1000;
public static final int INITIALANTS = 1;
public static final double MIN_PHEROMONE = 0.0;
public static final double MAX_PHEROMONE = 10.0;
public static final double PHEROMONE_TO_LEAVE_BEHIND = 1;
public static final double EVAPORATE_CONSTANT = 0.001;
public static final double DIFFUSION_CONSTANT = 0.001;
public static final int GRID_HEIGHT = 100;
public static final int GRID_WIDTH = 100;
public static final double RANDOM_MOVEMENT_PROBABILITY = 0.1;
*/
public DoubleGrid2D sites = new DoubleGrid2D(GRID_WIDTH, GRID_HEIGHT,0);
public DoubleGrid2D toFoodGrid = new DoubleGrid2D(GRID_WIDTH, GRID_HEIGHT,0);
public DoubleGrid2D toHomeGrid = new DoubleGrid2D(GRID_WIDTH, GRID_HEIGHT,0);
public DoubleGrid2D valgrid2 = new DoubleGrid2D(GRID_WIDTH, GRID_HEIGHT, 0);
public SparseGrid2D buggrid = new SparseGrid2D(GRID_WIDTH, GRID_HEIGHT);
public DoubleGrid2D obstacles = new DoubleGrid2D(GRID_WIDTH, GRID_HEIGHT,0);
// a couple of objects to be shared by all ants in the simulation
DecisionMaker decisionMaker = new DecisionMaker();
DecisionInfo decisionInfo = new DecisionInfo();
public AntsForage(long seed)
{
super(seed);
}
public int foodCollected = 0;
public void start()
{
super.start(); // clear out the schedule
// make new grids
sites = new DoubleGrid2D(GRID_WIDTH, GRID_HEIGHT,0);
toFoodGrid = new DoubleGrid2D(GRID_WIDTH, GRID_HEIGHT,0);
toHomeGrid = new DoubleGrid2D(GRID_WIDTH, GRID_HEIGHT,0);
valgrid2 = new DoubleGrid2D(GRID_WIDTH, GRID_HEIGHT, 0);
buggrid = new SparseGrid2D(GRID_WIDTH, GRID_HEIGHT);
obstacles = new DoubleGrid2D(GRID_WIDTH, GRID_HEIGHT, 0);
foodCollected = 0;
switch( OBSTACLES )
{
case NO_OBSTACLES:
break;
case ONE_OBSTACLE:
for( int x = 0 ; x < GRID_WIDTH ; x++ )
for( int y = 0 ; y < GRID_HEIGHT ; y++ )
{
obstacles.field[x][y] = 0.0;
if( ((x-55)*0.707+(y-35)*0.707)*((x-55)*0.707+(y-35)*0.707)/36+
((x-55)*0.707-(y-35)*0.707)*((x-55)*0.707-(y-35)*0.707)/1024 <= 1 )
obstacles.field[x][y] = 1.0;
}
break;
case TWO_OBSTACLES:
for( int x = 0 ; x < GRID_WIDTH ; x++ )
for( int y = 0 ; y < GRID_HEIGHT ; y++ )
{
obstacles.field[x][y] = 0.0;
if( ((x-45)*0.707+(y-25)*0.707)*((x-45)*0.707+(y-25)*0.707)/36+
((x-45)*0.707-(y-25)*0.707)*((x-45)*0.707-(y-25)*0.707)/1024 <= 1 )
obstacles.field[x][y] = 1.0;
if( ((x-35)*0.707+(y-70)*0.707)*((x-35)*0.707+(y-70)*0.707)/36+
((x-35)*0.707-(y-70)*0.707)*((x-35)*0.707-(y-70)*0.707)/1024 <= 1 )
obstacles.field[x][y] = 1.0;
}
break;
case ONE_LONG_OBSTACLE:
for( int x = 0 ; x < GRID_WIDTH ; x++ )
for( int y = 0 ; y < GRID_HEIGHT ; y++ )
{
obstacles.field[x][y] = 0.0;
if( (x-60)*(x-60)/1600+
(y-50)*(y-50)/25 <= 1 )
obstacles.field[x][y] = 1.0;
}
break;
}
// initialize the grid with the home and food sites
for( int x = HOME_XMIN ; x <= HOME_XMAX ; x++ )
for( int y = HOME_YMIN ; y <= HOME_YMAX ; y++ )
sites.field[x][y] = 1.0;
for( int x = FOOD_XMIN ; x <= FOOD_XMAX ; x++ )
for( int y = FOOD_YMIN ; y <= FOOD_YMAX ; y++ )
sites.field[x][y] = 0.5;
// make the ant farm
Steppable antFarm = new Steppable()
{
public void step(SimState state)
{
for(int x=0 ; x © 2015 - 2025 Weber Informatics LLC | Privacy Policy