DOI: 10.5281/zenodo.14186115
title: The price of safety: Order picking in warehouses with in-house traffic regulations (Supplementary material)

description: In what follows, you will find the code and results of the paper:

"The price of safety: Order picking in warehouses with in-house traffic regulations" published in IISE Transactions.

 

List of files:

- Zip file: "Order Picking Problem with in-house traffic regulations" containing C# Code used to generate solutions for all safety policies

- Result.csv containing all generated results

- createPlots.py containing code to generate figures and tables from the paper

 

The C# code is object-oriented and contains a Main function in the Program.cs file that converts the Example.OPP file with the InstanceReaders to an OPPInstance and uses the Solve function from either the DynamicProgrammic.cs or RuralPostman.cs file to solve the OPPInstance with all the TrafficRegulations as described in the paper.

 

The Example.OPP defines the Depot location (0: decentral, 1: central), AisleLength, i.e. the number of pick positions within each aisle, and other dimensions of the warehouse. Finally, the items are defined by their picking aisle, shelf, position in the shelf, and region.

 

The dynamic program (DP) described in the paper is implemented in DynamicProgrammic.cs.  A HashSet of DPNode represents each layer of the DP. A DPNode basically consists of components, nodeDegrees, and a value. Depending on the TrafficRegulation the nodeDegrees are either NodeDegreeClassic, i.e. Null, Uneven, or Even, or NodeDegreeInAndOutDifference, i.e. the difference of the in- and out-degree. To construct the solution at the end, the inEdge is also saved for each DPNode and the additional member depotIsConnected ensures that the depot is visited. The DPNodes in the next layer of the DP are created by the functions MakeNextLayerVertical and MakeNextLayerHorizontal by determining all possibleTransitions per node in the current layer and combining them into a newNode. Products are stored with their position on the shelves in the item list within a PickingAisle. All vertical possibleTransitions are determined in a preprocessing step depending on the TrafficRegulations and are saved within the respective PickingAisle. All horizontal possibleTransitions are determined during the DP with specific functions depending on the TrafficRegulation in HorizontalTransition.cs. When the layers are created, the best feasible DPNode per layer is saved and the best one, i.e. the one with the lowest value, is returned at the end.

 

The paper describes that certain safety policies cannot be solved with the DP. These OPPInstances are solved as a RuralPostman problem (RPP) by generating a Graph that adopts the rectangular structure of the warehouse. Within the Graph, requiredEdges are determined that correspond to PickingAisles containing items. The resulting RPP can be transformed into a traveling salesman problem (TSP) as described by applying an arc-oriented Dijkstra or, in certain cases, to a generalized TSP (GTSP) where one of the two directed edges must be visited. If necessary, the GTSP is transformed to an asymmetric TSP in GTSPInstance and then solved with TSPSolver using LKH-3.exe (Helsgaun 2017, http://webhotel4.ruc.dk/~keld/research/LKH-3/). To use LKH-3.exe, the TSP instance is saved in a TSPLIB format and a parameter file (.par) for LKH and a solution file (.sol) are created in the bin folder. These files are named according to the name specified in the instance.Solve function, where one can also choose to save or delete these files afterward.

 

For more information on LKH-3 see: Keld Helsgaun: An Extension of the Lin-Kernighan-Helsgaun TSP Solver for Constrained Traveling Salesman and Vehicle Routing Problems (Technical Report, Roskilde University, 2017)

 

Evaluation.py

A Python script that generates figures 8, 9, and 10 and tables 6, 7 and 8 (in csv-format) of the paper by processing data from Results.csv.

It requires Results.csv to be in the same directory as the code.

It also requires the following Python packages:

- matplotlib

- pandas

- seaborn