These docs are for v1.1. Click to read the latest docs for v2.0.

Layout creation

Input

The goal of the picking optimisation solver is to create optimal routes and picking list for the workers in a warehouse. Consequently the first to do is to define the layout of the warehouse at the base of the problem.

Layout

Layouts of a warehouse are converted to graphs so that they can be used by routing algorithms .

670

Simplified example of how we can convert warehouse layouts to graphs that can be used for routing algorithms.

Graph creation request

The graph creation request is structured as follows

PropertyTypeDescription
nameStringName that describes the graph
edgesarray of EdgesList of edges composing the graph
routingOptionsRoutingOptionsObject containing parameters used to tune how the Solver will handle the graph. If not specified the graph will be setup with the default values

Edges

The graph is uploaded as a list of edges where each edges contains information on the origin, destination and the weight.

PropertyTypeDescription
fromStringSource node of edge in the graph
toStringDestination node of edge in the graph
weightNumberWeight of the weighted directed edge. Usually the distance in meters

RoutingOptions

These parameters tell the Solver how to manage the congestion forecasting and the default speed of the pickers.

PropertyTypeDescription
lookaheadTimeString (duration iso8601)How much the solver should look ahead to manage congestion
timeSegmentSizeString (duration iso8601)Duration of the time segments in which the look ahead time is divided
graphUpdateMultiplierNumberThis parameter controls how non-blocking pickers influence the congestion on the graph
speedInMeterPerSecondNumberDefault speed for each picker

Example

Let's take the simple layout shown in the following image and let's see how it can be coded and uploaded.

2101

Simple graph composed of 9 nodes representing a very simple warehouse layout.

The graph is composed of 9 nodes and 18 edges (since it can be navigated in both directions).

curl --request POST \
     --url https://onpick.solvice.io/graph/create \
     --header 'Accept: application/json' \
     --header 'Authorization: <<apiKey>>' \
     --header 'Content-Type: application/json' \
     --data '
     {
		"name" : "test",
		"edges" :	[
			{"from":"AA","to":"BA","weight":1.0},
			{"from":"BA","to":"AA","weight":1.0},
			{"from":"BA","to":"CA","weight":1.0},
			{"from":"CA","to":"BA","weight":1.0},
			{"from":"CA","to":"CB","weight":1.0},
			{"from":"CB","to":"CA","weight":1.0},
			{"from":"CB","to":"CC","weight":1.0},
			{"from":"CC","to":"CB","weight":1.0},
			{"from":"CC","to":"BC","weight":1.0},
			{"from":"BC","to":"CC","weight":1.0},
			{"from":"BC","to":"BB","weight":1.0},
			{"from":"BB","to":"BC","weight":1.0},
			{"from":"BA","to":"BB","weight":1.0},
			{"from":"BB","to":"BA","weight":1.0},
			{"from":"BC","to":"AC","weight":1.0},
			{"from":"AC","to":"BC","weight":1.0},
			{"from":"AC","to":"AB","weight":1.0},
			{"from":"AB","to":"AC","weight":1.0}
			]
	}
'
{
  "id":"6568e4d6-e3cf-4eec-8694-0ea7db75cebe",
  "createdAt":"2022-03-02T10:47:14.582766",
  "name": "test",
  "updatedAt":"2022-03-02T10:47:14.582838",
  "edges":18,
  "nodes":9,
  "username": "test",
  "routingOptions":{
    "lookaheadTime":900.000000000,
    "timeSegmentSize":300.000000000,
    "speedInMeterPerSecond":1.6,
    "graphUpdateMultiplier":1.5
  }
}

Response

The response provided for a successful upload presents some useful information regarding the uploaded graph.

PropertyTypeDescription
idstring (UUID)The unique identifier that must be used to select this graph in a PickRequest
namestringA name for the graph (currently unused)
edgesintegerThe number of edges in the graph
nodesintegerThe number of nodes in the graph
createdAtstring (date)The date when the graph was uploaded
updatedAtstring (date)The date of the last update
usernamestringUsername of the user uploading the graph
routingOptionsRoutingOptionsIf not specified in the request it will report the default values.