| title | AI Disaster Response Coordinator | |
|---|---|---|
| emoji | 🚨 | |
| colorFrom | red | |
| colorTo | yellow | |
| sdk | docker | |
| pinned | false | |
| app_port | 8000 | |
| tags |
|
The AI Disaster Response Coordinator is an OpenEnv-compliant reinforcement learning environment designed to evaluate agent performance in high-stakes resource allocation and crisis management. This environment simulates the complex decision-making required by emergency operations centers during a large-scale disaster.
The AI Disaster Response Coordinator is an OpenEnv-compliant reinforcement learning environment designed for evaluating multi-agent and LLM-based coordination in high-stakes crises. It features high-fidelity simulation of priority triage, resource allocation, and dynamic wait-time penalties.
Evaluated using model=Qwen2.5-72B-Instruct across three tiers of difficulty.
| Difficulty | Task | Score | Result |
|---|---|---|---|
| Easy | Priority Identification | 1.000 | 🚀 Perfect |
| Medium | Capacity Management | 0.933 | 📈 High Performance |
| Hard | Strategic Trade-offs | 0.720 | 🛠️ Solid Baseline |
| TOTAL | Weighted Average | 0.884 |
- Priority Triage: Locations vary in severity (Low, Medium, High), requiring the agent to identify and address the most critical needs first.
- Resource Constraints: Total rescue capacity per step is limited by the number and type of available vehicles.
- Dynamic Penalties: Delays in response lead to increasing "waiting time" penalties, modeling the deteriorating conditions in real-world crisis scenarios.
from my_env import DisasterAction, DisasterResponseClient
from my_env.models import VehicleAssignment
# Initialize the client
client = DisasterResponseClient(base_url="http://localhost:8000")
# Reset the environment to get the initial observation
result = client.reset()
obs = result.observation
print(f"Total Locations: {len(obs.locations)}")
# Dispatch vehicles to target locations
action = DisasterAction(assignments=[
VehicleAssignment(vehicle_id="veh_1", location_id="loc_1"),
VehicleAssignment(vehicle_id="veh_2", location_id="loc_3"),
])
# Execute the step
result = client.step(action)
print(f"Lives Saved This Step: {result.observation.people_saved_this_step}")
print(f"Current Cumulative Reward: {result.reward}")The environment is fully containerized for consistent evaluation.
# Build the environment image
docker build -t disaster-response-env:latest -f server/Dockerfile .
# Run the environment server
docker run -p 8000:8000 disaster_response-env:latestFor development and debugging without Docker:
# Install dependencies using uv
uv sync
# Start the FastAPI server
python -m uvicorn server.app:app --host 0.0.0.0 --port 8000Run the standardized inference script to evaluate an agent across all difficulty tiers.
# Hugging Face token (each teammate uses their own; never commit the real value)
export HF_TOKEN="your_huggingface_token"
export API_BASE_URL="https://router.huggingface.co/v1"
export MODEL_NAME="Qwen/Qwen2.5-72B-Instruct"
# Execute evaluation suite
python inference.pyDisasterAction: Encapsulates a list of discrete vehicle-to-location assignments.
| Attribute | Type | Description |
|---|---|---|
assignments |
List[VehicleAssignment] |
Mapping of specific vehicles to target locations. |
VehicleAssignment:
| Attribute | Type | Description |
|---|---|---|
vehicle_id |
str |
Unique identifier for the rescue asset. |
location_id |
str |
Unique identifier for the disaster site. |
DisasterObservation: Provides the current global state of the crisis.
| Attribute | Type | Description |
|---|---|---|
locations |
List[LocationState] |
List of sites, their severity, and population status. |
vehicles |
List[VehicleState] |
List of assets, their status, and rescue capacities. |
time_step |
int |
Current progress within the episode runtime. |
max_steps |
int |
Horizontal limit for the simulation. |
total_people_saved |
int |
Cumulative performance metric for mission success. |
The environment utilizes a dense reward structure to guide agent learning:
- Rescues: +2.0 base reward per individual saved.
- Severity Multipliers: +3.0 (High) or +1.5 (Medium) additional bonus per person based on site triage.
- Efficiency Penalties:
- Idle penalty: -1.0 for unassigned vehicles while tasks remain.
- Wait penalty: -0.3 per step for each location left unserved.
- Wasted Dispatch: -2.0 for sending vehicles to cleared locations.
The environment features three deterministic scenarios designed to test specific agent capabilities.
- Problem: 2 locations (1 High, 1 Low severity), 1 vehicle.
- Objective: Demonstrate basic triage by prioritizing the high-severity location.
- Problem: 4 locations across three severity levels, 2 vehicles with differing capacities.
- Objective: Optimize throughput by matching vehicle capacity to location population.
- Problem: 6 locations (3 High, 2 Medium, 1 Low), 3 vehicles with limited capacity.
- Objective: Balance conflicting priorities under a tight step limit (20 steps).
- OpenEnv V1.0 Compliance: PASS (
openenv validate) - Standardized Inference: PASS (follows stdout protocol)
- Multi-Tier Evaluation: Easy, Medium, and Hard scenarios fully implemented.
- Dockerized Deployment: Fully containerized environment for consistent evaluation.
Built with ❤️ for the Meta Hackathon RL by the Disaster Response Team.