Skip to content

ForagerRL_step1

RoiArthurB edited this page Jul 28, 2026 · 4 revisions

1. The Grid World

By Killian Trouillet

This is Part 1 of the internal Reinforcement Learning tutorial in GAMA.

Tutorial Overview

Step Title Concepts
1 The Grid World grid, global, experiment, display
2 The Forager Agent species, reflex, aspect, switch/match
3 Rewards and Episodes Reward function, episode management, monitor
4 The Q-Table map<string, float>, state representation
5 Q-Learning Algorithm Epsilon-greedy policy, Bellman equation
6 Charts, Test Mode and Visualization chart, heatmap, training stop, automatic test

Step 1: The Grid World

Content

This first step illustrates how to create a grid environment in GAMA. We define a 10×10 grid with round food and rectangular obstacles.

Formulation

  • Definition of global parameters for grid size, food position, and obstacle positions
  • Definition of a world_cell grid with is_food and is_obstacle attributes
  • Display of the grid with colored cells: dark gray for obstacles, white for empty, and a green circle for the food

Model Definition

Global section

The global section defines the world parameters. We store the grid size, the food coordinates, and a list of obstacle positions as point values.

global {
    int grid_size <- 10;
    int food_x <- 9;
    int food_y <- 9;
    list<point> obstacle_positions <- [{2,2}, {3,2}, {2,3}, {6,4}, {7,4}, {7,5}];
  • int grid_size <- 10: Defines the size of our grid (10 columns × 10 rows).
  • list<point>: A list of coordinate pairs. Each {x, y} represents the position of an obstacle.

Initialization

In the init block, we configure the grid cells by setting their is_food and is_obstacle attributes. The operator grid_at allows us to access a specific cell by its coordinates.

    init {
        ask world_cell grid_at {food_x, food_y} {
            is_food <- true;
        }
        loop pos over: obstacle_positions {
            ask world_cell grid_at pos {
                is_obstacle <- true;
            }
        }
    }
}
  • ask world_cell grid_at {x, y} { ... }: Selects the grid cell at coordinates (x,y) and executes the block on it.
  • loop pos over: list { ... }: Iterates over each element of the list.

Grid definition

A grid in GAMA is a special type of species where each cell is an agent. We define two boolean attributes (is_food, is_obstacle) and a dynamic color attribute that uses the update facet to reflect the cell state at every simulation step.

grid world_cell width: 10 height: 10 neighbors: 4 {
    bool is_food <- false;
    bool is_obstacle <- false;
    rgb color <- #white update: is_obstacle ? rgb(60,60,60) : #white;
}
  • width: 10 height: 10: Creates a 10×10 grid of cells.
  • neighbors: 4: Uses Von Neumann neighborhood (up, down, left, right only — no diagonals).
  • update: facet: Used here to color obstacles only. The food will be drawn separately.

Experiment

The experiment block defines how to run and visualize the simulation.

experiment smart_forager type: gui {
    output {
        display Grid_World title: "Grid World" {
            grid world_cell border: #lightgray;
            graphics "food" {
                ask world_cell where each.is_food {
                    draw circle(5) color: rgb(50, 180, 50);
                }
            }
        }
    }
}
  • type: gui: A graphical experiment with a user interface.
  • grid ... border: #lightgray: Displays the grid cells.
  • graphics "food" { ... } : A graphics layer to draw objects manually. We ask every food cell to draw a circle at its location.

Complete Model

/**
* Name: SmartForager - Step 1: The Grid World
* Author: Killian Trouillet
* Description: This first step creates a simple 10x10 grid environment 
*              with food (green cell) and obstacles (dark gray cells).
* Tags: reinforcement-learning, grid, tutorial
*/

model SmartForager

global {
	int grid_size <- 10;
	int food_x <- 9;
	int food_y <- 9;
	list<point> obstacle_positions <- [{2,2}, {3,2}, {2,3}, {6,4}, {7,4}, {7,5}];
	
	init {
		// Place the food on the grid
		ask world_cell grid_at {food_x, food_y} {
			is_food <- true;
		}
		// Place the obstacles on the grid
		loop pos over: obstacle_positions {
			ask world_cell grid_at pos {
				is_obstacle <- true;
			}
		}
		write "Welcome to the Smart Forager!";
		write "Grid size: " + grid_size + "x" + grid_size;
		write "Food location: (" + food_x + ", " + food_y + ")";
		write "Number of obstacles: " + length(obstacle_positions);
	}
}

grid world_cell width: 10 height: 10 neighbors: 4 {
	bool is_food <- false;
	bool is_obstacle <- false;
	rgb color <- #white update: is_obstacle ? rgb(60, 60, 60) : #white;
}

experiment smart_forager type: gui {
	output {
		display Grid_World title: "Grid World" {
			grid world_cell border: #lightgray;
			graphics "food" {
				ask world_cell where each.is_food {
					draw circle(5) color: rgb(50, 180, 50);
				}
			}
		}
	}
}

  1. What's new (Changelog)
  2. Migration Guide (2025-06 → 2026-06)
  1. Installation and Launching
    1. Installation
    2. Launching GAMA
    3. Updating GAMA
    4. Installing Plugins
  2. Workspace, Projects and Models
    1. Navigating in the Workspace
    2. Changing Workspace
    3. Importing Models
  3. Editing Models
    1. GAML Editor (Generalities)
    2. GAML Editor Tools
    3. Validation of Models
  4. Running Experiments
    1. Launching Experiments
    2. Experiments User interface
    3. Controls of experiments
    4. Parameters view
    5. Inspectors and monitors
    6. Displays
    7. Batch Specific UI
    8. Errors View
  5. Running Headless
    1. Getting Started
    2. Headless Legacy
    3. Headless Batch
  6. Preferences
  7. Troubleshooting
  1. Introduction
    1. Start with GAML
    2. Organization of a Model
    3. Basic programming concepts in GAML
  2. Manipulate basic Species
  3. Global Species
    1. Regular Species
    2. Defining Actions and Behaviors
    3. Interaction between Agents
    4. Attaching Skills
    5. Inheritance
  4. Defining Advanced Species
    1. Grid Species
    2. Graph Species
    3. Mirror Species
    4. Multi-Level Architecture
  5. Defining GUI Experiment
    1. Defining Parameters
    2. Defining Displays Generalities
    3. Defining 3D Displays
    4. Defining Charts
    5. Defining Monitors and Inspectors
    6. Defining Export files
    7. Defining User Interaction
  6. Classes and Objects
    1. Class Definition and Instantiation
    2. Attributes and Actions
    3. Inheritance
    4. Virtual Classes
    5. Advanced Features
  7. Exploring Models
    1. Run Several Simulations
    2. Batch Experiments
    3. Exploration Methods
  8. Optimizing Models
    1. Runtime Concepts
    2. Analyzing code performance
    3. Optimizing Models
  9. Multi-Paradigm Modeling
    1. Control Architecture
    2. Defining Differential Equations
  1. Manipulate OSM Data
  2. Cleaning OSM Data
  3. Diffusion
  4. Using Database
  5. Using Dataframes
  6. Using FIPA ACL
  7. Using BDI with BEN
  8. Using Driving Skill
  9. Manipulate dates
  10. Manipulate lights
  11. Using comodel
  12. Save and restore Simulations
  13. Using network
  14. Writing Unit Tests
  15. Ensure model's reproducibility
  16. Going further with extensions
    1. Calling R
    2. Using Graphical Editor
    3. Using Git from GAMA
  1. Built-in Species
  2. Built-in Skills
  3. Built-in Architecture
  4. Statements
  5. Data Type
  6. File Type
  7. Stats Extension
  8. Sound Extension
  9. BDI Extension
  10. FIPA Skill
  11. Expressions
    1. Literals
    2. Units and Constants
    3. Pseudo Variables
    4. Variables And Attributes
    5. Operators (Definition)
    6. Operators [A-A]
    7. Operators [B-C]
    8. Operators [D-H]
    9. Operators [I-M]
    10. Operators [N-R]
    11. Operators [S-Z]
  12. Exhaustive list of GAMA Keywords
  1. Installing the development version
    1. Install GAMA source code with Eclipse plugin
  2. Developing Extensions
    1. Developing Plugins
    2. Developing Skills
    3. Developing Statements
    4. Developing Operators
    5. Developing Types
    6. Developing Species
    7. Developing Control Architectures
    8. Index of annotations
  3. Introduction to GAMA Java API
    1. Architecture of GAMA
    2. IScope
  4. Using GAMA flags
  5. Creating a release of GAMA
  6. Documentation generation

  1. Predator Prey
  2. Road Traffic
  3. Incremental Model
  4. Luneray's flu
  5. BDI Agents
  6. Forager RL
  7. SIR Analysis
  8. 3D Model

  1. Team
  2. Projects using GAMA
  3. Scientific References
  4. Training Sessions

Resources

  1. Videos
  2. Conferences
  3. Pedagogical materials

Clone this wiki locally