Spaces:
Sleeping
Sleeping
File size: 2,708 Bytes
cc75d6e | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 | #!/usr/bin/env python3
"""
Simple test script to validate the Container Yard environment locally.
This doesn't require OpenAI API or a running server.
"""
import sys
sys.path.insert(0, '.')
from server.Container_Yard_environment import ContainerYardEnvironment
from models import ContainerYardAction
def test_task(task_name: str, num_steps: int = 100):
"""Test a single task."""
print(f"\n{'='*60}")
print(f"Testing {task_name.upper()} task")
print(f"{'='*60}")
env = ContainerYardEnvironment(task_name=task_name)
obs = env.reset()
print(f"Initial state:")
print(f" - Containers: {obs.total_containers}")
print(f" - Stacks: {obs.num_stacks}")
print(f" - Max height: {obs.max_stack_height}")
step_count = 0
total_reward = 0.0
while not obs.done and step_count < num_steps:
step_count += 1
# Simple greedy strategy: place in stack with fewest containers
stack_sizes = [len(stack) for stack in obs.stacks]
best_stack = min(range(len(stack_sizes)), key=lambda i: stack_sizes[i])
action = ContainerYardAction(stack_index=best_stack)
obs = env.step(action)
total_reward += obs.reward
if step_count <= 3 or obs.done:
print(f"Step {step_count}: Placed C{obs.current_container_id-1 if obs.current_container_id > 0 else 'X'} "
f"in stack {best_stack}, reward={obs.reward:.2f}, "
f"rehandles={obs.rehandles_so_far}")
efficiency = 1.0 - (obs.rehandles_so_far / obs.total_containers)
print(f"\nFinal results:")
print(f" - Steps taken: {step_count}")
print(f" - Total reward: {total_reward:.2f}")
print(f" - Total rehandles: {obs.rehandles_so_far}")
print(f" - Efficiency score: {efficiency:.2f}")
print(f" - Success: {obs.rehandles_so_far <= 3 * (len(obs.stacks) // 5)}")
return {
'task': task_name,
'steps': step_count,
'rehandles': obs.rehandles_so_far,
'efficiency': efficiency,
'total_reward': total_reward,
}
if __name__ == "__main__":
print("Container Yard Environment - Local Test")
results = []
for task in ['easy', 'medium', 'hard']:
try:
result = test_task(task)
results.append(result)
except Exception as e:
print(f"ERROR in {task} task: {e}")
import traceback
traceback.print_exc()
print(f"\n{'='*60}")
print("Summary")
print(f"{'='*60}")
for r in results:
print(f"{r['task']:8} | Steps: {r['steps']:2} | Rehandles: {r['rehandles']:2} | Efficiency: {r['efficiency']:.2f}")
|