ForagerRL_step11 - gama-platform/gama GitHub Wiki
By Killian Trouillet
During training, we used GAMA in headless mode for speed. Now that the model is trained, we switch to the GAMA GUI to watch the agent in action.
| Mode | Port | Speed | Display | Use |
|---|---|---|---|---|
| Headless | 1001 |
Fast (no rendering) | None | Training |
| GUI | 1000 |
Slow (renders display) | Yes | Testing / Visualization |
- Open GAMA normally (double-click the application)
- The GUI server runs on port 1000 by default — no extra setup needed
from train_forager import PPOAgent
agent = PPOAgent(state_dim=13, action_dim=2)
agent.load("saved_models/ppo_forager.pth")This loads the neural network weights saved during training.
The only change from training: the port number.
env = gym.make(
"gama_gymnasium_env/GamaEnv-v0",
gaml_experiment_path="path/to/forager_gym.gaml",
gaml_experiment_name="gym_env",
gama_ip_address="localhost",
gama_port=1000,
)action, _, _ = agent.select_action(obs, test=True)During training, the policy samples actions from a Normal distribution (adding noise for exploration). During testing, we set test=True to use the mean action — no randomness, just the best action the network has learned.
time.sleep(0.1) # 100ms delay between stepsWe add a small delay between steps so the movement is visible in the GAMA display.
cd models/gym
python test_forager.pyWatch the GAMA display — the blue forager should navigate smoothly around obstacles to reach the green food!
==================================================
Smart Forager - PPO Test (GUI)
==================================================
Step 0: obs[:5]=[0.05, 0.05, 0.95, 0.52, 0.48] action=[0.73, 0.71]
Step 1: obs[:5]=[0.07, 0.07, 0.93, 0.54, 0.50] action=[0.81, 0.78]
...
Result: FOUND FOOD! | Steps: 49 | Reward: 92.6
Done.
| Concept | Implementation |
|---|---|
| Continuous world | No grid, free {x, y} movement in 100×100 space |
| GAMA↔Python bridge |
GymAgent species + gama-gymnasium WebSocket |
| Neural network policy | Custom ActorCritic with PyTorch Normal distribution |
| Headless training |
gama-headless.bat -socket 1001 → fast, no GUI |
| GUI testing | Load .pth + connect to GAMA GUI (port 1000) |
| Action space |
Box([-1,-1], [1,1]) — continuous velocity (dx, dy) |
| Observation space |
Box([0]×13, [1]×13) — position + food direction + 8 sensors |
| Reward shaping | Distance delta bonus + food reward + living penalty |
global, species, reflex, action, aspect, experiment, parameter, geometry, rectangle, circle, line, distance_to, towards, intersects, inter, cos, sin, list, map, loop, draw
gymnasium, gym.make(), env.reset(), env.step(), torch.nn.Module, Normal distribution, ActorCritic, PPOAgent, asyncio
| File | Description |
|---|---|
models/gym/forager_gym.gaml |
GAMA model with GymAgent bridge |
models/gym/train_forager.py |
PPO training script (headless) |
models/gym/test_forager.py |
Testing script (GUI visualization) |