All Downloads are FREE. Search and download functionalities are using the official Maven repository.

sim.app.antsforage.AntsForage Maven / Gradle / Ivy

Go to download

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