Visualize warehouse travel

Travel is the greatest source of wasted labor in a typical warehouse. This tool computes the shortest path required to visit an arbitrary set of storage locations.

What does this program do?

This program computes and displays the shortest path necessary to retrieve all the SKUs requested by a customer. This enables you to:

A shortest pick-path

Figure 1: Shortest pick-path visiting the required (red) storage locations. In this example, all paths start at the upper left and finish at the lower right.


This is a Java program and so should run on every type of machine and operating system. However, you will need to have installed Java (which is free).

If you draw the layout of a warehouse in an MS Excel spreadsheet and label the storage locations, this program will:

Step 1: Prepare a map of the warehouse

The following needs to be done only once.

  1. Draw the map and save it on a single worksheet in xlsx format. In this map, each section (bay) of shelf should be represented by a cell of the spreadsheet. Each such cell should include a text string giving the unique address of that section.
  2. In addition, all aisle space must be identified and its dimensions given. This is done by writing a text string into each cell of aisle space with the following codes:
    • A: to indicate Aisle space (note colon immediately following the “A”).
    • <cell width>;, <cell length>; given in whatever coordinates you prefer (but you must be consistent). All space marked as aisle must include these dimensions.
    • Optional: any subset of L, R, U, or D (separated by commas). If any space marked as aisle also includes one of these indicators, picking in forbidden in that direction (Left, Right, Up, or Down) from the cell. Note: Each storage location should be pickable from only a single direction.
    • Example: A:3,2;D,L indicates that the cell containing this string is aisle space that is 3 units wide, 2 units tall, and it is impossible to pick from any storage space that may be immediately below (D = “Down”) or immediately to the left (L = “Left”).
  3. Write the text string START into one cell and END into another to indicate the common start and endpoints of all trips by order pickers. These must be different cells, but they can be adjacent. They should not include any of L, R, U, or D directives.

Step 2: Prepare a history of orders or batches

  1. Prepare a text file in csv format that lists the addresses of all storage locations visited by each order or batch. (Quantity picked is not relevant for pick-path optimization.) All the addresses of each order/batch should be listed consecutively, with each new address on a new row. Each row should contain exactly two values, the unique id of the order/batch and the address of a storage location. Do not use a header.

Step 3: Download and run the program

Please read the license and disclaimers, then click here to download the program. It will appear as a jar file, which most systems will run if you double-click on it.

If the program does not run, make sure you have the latest version of Java installed and your security settings allow execution of Java programs.

  1. From the top menu of the program select File and Open warehouse description. The program will display an image of the warehouse (or an error message if the warehouse description contains internal inconsistencies).
  2. From the top menu of the program select File and Open batch order file. The program will pop up a menu that offers two choices:
    • Step through the order file one order at a time to see the optimal path; or
    • Run quickly through the entire batch of orders, report the total travel distance, and display a heat map.

Here are some sample files that illustrate how to prepare your inputs.

How it works

The program relies on the Lin-Kernighan heuristic, which begins with a solution and then searches for small changes that will improve it. Strictly speaking, this can get stuck in a local optimum and so fail to find the shortest path. We reduce the chance of this happening by extending the search and by running the algorithm multiple times. You can control both of these by clicking on the menu Optimize path and then increasing the number of tries and/or number of iterations per try. Values that are too small increase the chance of a local optimum; values that are too large waste time and cpu cycles. The current values seem sufficient for most warehouses so you should probably not change current settings unless you are convinced that it is producing sub-optimal travel paths.

(We did not use the optimum-finding algorithm of Ratliff and Rosenthal, Operations Research 31(3):pp 507–521, 1983, because of the complexity of programming for warehouses with cross aisles.)


Brighter colors indicate more visits to pick product.

Figure 2: The most-frequently-visited storage locations

You can find more information about pick-path optimization and tools like this in our book. See especially this companion program for more control over the appearance of your heat map.


What if my warehouse is not a perfect rectangle?

No worries, as long as there is a path by which a worker could travel between any pair of storage locations.

Can I use some other spreadsheet program?

Yes, you can use any spreadsheet program that can read and write files in MS Excel xlsx format.

Why won’t the program read my data file?

Did you forget to prepare it in csv format?

Why are the results inconsistent from one run to the next?

The program attempts to improve any solution by making random perturbations. If you do not specify the same initial random seed, two different runs might produce two different results. However, this should happen only occasionally and the differences should be small.

How can I configure the program more to my liking?

You can prepare and load a configuration file to change any or all of the following:

// Choose to match your preferences:
screen_width 1000
screen_height 700

// How the warehouse map will be displayed:
order_color 150 150 60 100
shelf_color 100 100 70 100
text_color 40 0 100 23
text_size 12

// Labels for aisles:
aisle_identifier A
block_left_identifier L
block_right_identifier R
block_top_identifier U
block_bottom_identifier D
start_identifier START
end_identifier END

// Controls for the heuristic:
iterations 3000
runs 5
Can you make some changes so the program will be more useful to me?

Possibly. Send me a description of what you have in mind. If it seems generally useful it will be added to the to-do list.

How often do you update the software?

Bugs are dealt with quickly. Otherwise, the software is updated about once a year.

Why does my warehouse look like this (Figure 3)?

You have oriented the drawing so that spreadsheet rows are taller than columns. You should orient your drawing so that longer distances run horizontally.

The addresses are hard to read because they do not fit within the storage space

Figure 3: When drawing your warehouse, choose an orientation that does not squeeze addresses like this.

Recent changes

To do

Example layout of a warehouse

Figure 4: The warehouse layout can include cross-aisles or islands, but you must specify no more than a single direction (left, right, up, down) from which to access each storage area.