| Initialize:/∗ initialize tasks and AGVs |
| T = InitializeTasks();/∗ initialize the pickup point, delivery point, and size of container of tasks |
| AGVs = InitializeAGVs();/∗ initialize the status of AGV and assign tasks to AGVs randomly |
| GetRoutes:/∗ AGV route planning according to tasks assigned |
| While there are tasks waiting or AGV is not in the waiting place:/∗ for every AGV in AGVs |
| IF AGV is in the waiting place or has just completed a pickup task or a delivery task: |
| IF AGV is empty: |
| IF the number of containers waiting to be loaded != 0: |
| AGV visits the nearest pickup point; |
| ;/∗ update the route of AGVs; travels from current point to pickup point |
| ELSE: |
| AGV travels to the waiting place; |
| ;/∗ travels from current point to waiting point |
| ELSE: |
| IF the size of the container the AGV is carrying == 40 ft: |
| AGV visits the delivery point; |
| ;/∗ travels from current point to delivery point |
| ELSE: |
| IF AGV is unavailable: |
| AGV visits the nearest delivery point; |
| ; /∗ travels from current point to delivery point |
| ELSE: |
| IF the number of containers waiting to be loaded != 0: |
| IF the distance travel to the nearest pickup point < the distance travel to the delivery point: |
| AGV visits the nearest pickup point; |
| ; /∗ travels from current point to pickup point |
| ELSE: |
| AGV visits the delivery point |
| /∗ travels from current point to the delivery point |
| ELSE: |
| AGV visits the delivery point |
| /∗ travels from current point to the delivery point |
| RETURN |
| Calculate the objective function: |
| /∗ represents the distance between task point and task point |