Skip to main content
Version: 🚧 Alpha 🚧

11. Testing in GAMA GUI

By Killian Trouillet


From Headless to GUI​

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.

Key Difference​

ModePortSpeedDisplayUse
Headless1001Fast (no rendering)NoneTraining
GUI1000Slow (renders display)YesTesting / Visualization

Starting GAMA GUI​

  1. Open GAMA normally (double-click the application)
  2. The GUI server runs on port 1000 by default β€” no extra setup needed

The Test Script​

Loading the Trained Model​

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.

Connecting to GUI​

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,
)

Deterministic Evaluation​

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.

Slow Motion​

time.sleep(0.1) # 100ms delay between steps

We add a small delay between steps so the movement is visible in the GAMA display.


Running the Test​

cd models/gym
python test_forager.py

Watch the GAMA display β€” the blue forager should navigate smoothly around obstacles to reach the green food!


Expected Console Output​

==================================================
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.

Summary​

ConceptImplementation
Continuous worldNo grid, free {x, y} movement in 100Γ—100 space
GAMA↔Python bridgeGymAgent species + gama-gymnasium WebSocket
Neural network policyCustom ActorCritic with PyTorch Normal distribution
Headless traininggama-headless.bat -socket 1001 β†’ fast, no GUI
GUI testingLoad .pth + connect to GAMA GUI (port 1000)
Action spaceBox([-1,-1], [1,1]) β€” continuous velocity (dx, dy)
Observation spaceBox([0]Γ—13, [1]Γ—13) β€” position + food direction + 8 sensors
Reward shapingDistance delta bonus + food reward + living penalty

Key GAML Concepts Used​

global, species, reflex, action, aspect, experiment, parameter, geometry, rectangle, circle, line, distance_to, towards, intersects, inter, cos, sin, list, map, loop, draw

Key Python Concepts Used​

gymnasium, gym.make(), env.reset(), env.step(), torch.nn.Module, Normal distribution, ActorCritic, PPOAgent, asyncio

Key Files​

FileDescription
models/gym/forager_gym.gamlGAMA model with GymAgent bridge
models/gym/train_forager.pyPPO training script (headless)
models/gym/test_forager.pyTesting script (GUI visualization)