For this challenge you'll need to control cranes moving around in the warehouse - you'll be given a list of palettes to pick up and a list to drop off. You'll need to write a set of instructions for the vehicles in advance, and then we'll time how long it takes them to complete.
More of a hands-on learner? Jump straight into the Examples.
The warehouse model you're given is in three dimensions, and you'll need to refer to locations to store and retrieve stock. The simulator refers to locations in the form x.y.z.
The X component refers to the aisles, which run horizontally and are numbered from 0 to 8.
Some aisles can be used to store palettes, and the others are used to drive vehicles along.
The Y component refers to the stacks, which run along each aisle and are numbered from 0 to 14.
Each stack location effectively represents a floor tile.
The Z component refers to the cells, which are stacked on top of each other to create a stack. Stacks in vehicle aisles with no storage space don't have any cells.
A cell can store 1 palette.
There are two special stacks/locations, which are represented on the diagrams above (and in the sim) as coloured squares:
pickupStack is where you'll pick up palettes to store - you'll have to empty this stack for your solution to be considered successful. It's shown in
green, and located at 0.0.dropoffStack is where you'll deliver any palettes that need to be extracted from the system. Each scenario will define a list of palettes that must be delivered for your solution to be considered valid. It's shown in
red, and located at X.0 where X represents the total number of aisles.
AGVs (automated guided vehicles) are the items you'll be moving around the warehouse. In this simulation they can be considered interchangably between human forklift operators or automated cranes - the principles are the same. (Image credit: CNET).
AGVs can occupy any stack that isn't a storage location. Storage locations contain racking and have cells which can store palettes, so can't be driven over. Conversely, you can't store palettes on a non-storage stack, as it doesn't have any racking to store palettes (and is needed for access). This stops you blocking yourself into a corner.
You can instruct AGVs to navigate to anywhere in the locationIndex, which includes:
X.Y, that is a non-storage location.X.Y that is a storage location (the simulation will automatically correct to the nearest adjacent non-storage location).X.Y.Z. As above, the simulation will correct the instruction to the nearest valid non-storage stack location.pickupStack or dropoffStack.AGVs will automatically choose a route to navigate between the current location and your chosen destination. The sim has no sense of acceleration or cornering - AGVs progress at a steady rate of one stack per second.
The simulation UI is where you'll validate your solutions to each scenario. It takes two text inputs from you, and runs them against each other:
Both text files are delimited by (first) spaces and (second) line breaks. Your instructions shouldn't contain extra whitespace, indentation or comments.
The UI contains a model of the warehouse in the centre, which will change as the simulation runs. It also contains two panes, the AGV pane and the Sim pane. You can show or hide these panes at any time using the toggle buttons (shown in blue on the diagram above).
The logs (shown in red) give you information about the currently running simulation. If there's a simulation running you'll see a timestamp in ms in the form [123] before the comment. Regardless of the time factor, these timestamps will always be in wristwatch time.
Each instruction takes the following form:
[AGV-id] [action] [parameter]
Each instruction is addressed to an AGV, indexed from 0. Each instruction contains an action, and an optional parameter.
Here's a list of acceptable instructions:
| Command | Description | Parameter |
|---|---|---|
navigate |
Moves the AGV to the location you specify | A location in the board's locationIndex (generally in the form x.y). Required. |
pickup |
If the AGV is on the pickupStack, picks up any palette matching the provided SKU. | The SKU of the palette to pick up. Required. |
dropoff |
If the AGV is on the dropoffStack, release the palette it's currently holding. | (none) |
store |
If the AGV is holding a palette, store it at the provided location. | A valid empty storage location, adjacent to the location the AGV is currently occupying. Of the form x.y.z. Required. |
retrieve |
If the AGV is not holding a palette, retrieve a palette from the provided location. | A valid non-empty storage location. Of the form x.y.z. Required. |
You're responsible for scheduling work for the AGVs - there are no instructions to wait for another AGV to complete their task. The time it takes an AGV to complete any task is known, so you should always know what task your AGVs are performing.
Each scenario is defined by a single text file. There will be up to one line representing the contents of the pickup stack, up to one line representing the required contents of the dropoff stack, and a set of pairs of locations and skus representing the intial state of the warehouse.
With the exception of the dropoffStack line, each line represents the start state of the simulation. The dropoffStack is a wishlist of skus to be fetched.
Here's a list of acceptable lines in a scenario file
| Keyword | Description | Parameter |
|---|---|---|
pickupStack |
Represents the contents of the pickupstack (ie. which palettes can be picked up) at the start of the simulation. The same sku can be listed more than once to denote a quantity greater than one of the same sku. There will be at most one pickupStack line in the scenario. An absense represents an empty stack. | A space-delimited list of skus, each representing a palette that can (and must) be picked up before the simulation terminates. |
dropoffStack |
Represents a list of requests to fetch palettes with given skus. The same sku can be listed more than once to show multiple requests for palettes with a given sku. The initial state of the dropoffStack is always empty - it should finish in the state listed here. There will be at most one dropoffStack line in the scenario. An absense represents no dropoff instructions are required. | A space-delimited list of skus, each representing a palette that must be dropped off at the dropoffStack before the simulation terminates. You should not drop off any more palettes than are specified. |
[locationCode] |
Represents the initial state of that location. Only locations that can store palettes are valid for inclusion. | A single sku representing the sku of the palette in that location. |
Your simulation will complete successfully when:
The success metric for your solution is the time it takes to execute the set of instructions. The only instruction type that incurs a time penalty is navigation. AGVs progress through the warehouse at 1 square / second.
Read all this? Why not try our worked examples?
View Examples