Getting Started

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.

Your goal is to create a program that can generate a list of optimal instructions for any given scenario. The time your instructions take to execute in the simulator is the measure by which your solution will be evaluated.

More of a hands-on learner? Jump straight into the Examples.

Already read this? Skip straight to the Signup form.

Contents

Locations

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.

Card image cap
Aisles

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.

Card image cap
Stacks

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.

Card image cap
Cells

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:

AGVs / Cranes / Forklifts / Drivers

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:

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 simulator UI

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 AGV Pane
The AGV pane (shown in green above) describes the current state of each AGV. It shows the location, status, destination and contents of the AGV, and allows you to make ad-hoc instructions in the UI. You can use this to experiment with the input parameters and explore how AGVs interact with palettes.
The Sim Pane
The simulation pane (shown in orange) contains the input fields for the scenario definition and the set of instructions you want to simulate. The simulation is performed locally on your machine, and you can try as many solutions to a given scenario as you like. This pane also contains the start button, lets you enable looping, and allows you to set a time factor which increases the speed at which the simulation occurs.
The recorded time for a simulation stays the same for any time factor. The only effect is the simulation progresses faster in the browser.

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.

Instructions and Scheduling

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.

Scheduling

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.

Scenarios

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.

Two palettes with the same SKU are interchangable.

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.

Success

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