Spaces:
Sleeping
Sleeping
| #!/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}") | |