from __future__ import annotations from typing import Any, Dict from env.models import EnvironmentConfig TASK_NAME = "medium" TASK_DIFFICULTY = 2 DEFAULT_SEED = 202 DESCRIPTION = "Multi-order delivery with static obstacles and realistic traffic friction." OBJECTIVE = "Optimize route throughput across multiple concurrent orders while navigating blocked streets." SUCCESS_CONDITION: Dict[str, Any] = { "completion_rate_min": 0.85, "max_steps": 140, "invalid_action_rate_max": 0.08, } TASK_PARAMETERS: Dict[str, Any] = { "grid_size": {"width": 10, "height": 10}, "orders": {"min": 3, "max": 4}, "variation": { "seeded_layout": True, "order_mix": "standard_multi_order", "traffic_profile": "weekday_traffic", }, "constraints": { "obstacles": True, "dynamic_obstacles": False, "traffic_zones": True, "order_priority": False, "multiple_delivery_locations": False, "battery_constraint": False, "recharge": False, "time_penalty": False, }, } def get_config(seed: int | None = None) -> EnvironmentConfig: effective_seed = DEFAULT_SEED if seed is None else seed order_count = 3 + (effective_seed % 2) traffic_cost = 2 + (effective_seed % 2) return EnvironmentConfig( width=10, height=10, max_steps=140, max_orders=order_count, delivery_locations_per_order=1, priority_high_ratio=0.0, obstacle_density=0.12, dynamic_obstacles_enabled=False, dynamic_obstacle_ratio=0.0, traffic_density=0.11, traffic_extra_cost=traffic_cost, battery_enabled=False, battery_capacity=100, battery_recharge_rate=10, seed=effective_seed, ) def get_definition() -> Dict[str, Any]: return { "name": TASK_NAME, "difficulty": TASK_DIFFICULTY, "deterministic": True, "default_seed": DEFAULT_SEED, "description": DESCRIPTION, "objective": OBJECTIVE, "success_condition": SUCCESS_CONDITION, "parameters": TASK_PARAMETERS, }