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

Property

Type

Description

name

String

Name that describes the graph

edges

array of Edges

List of edges composing the graph

routingOptions

RoutingOptions

Object 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.

Property

Type

Description

from

String

Source node of edge in the graph

to

String

Destination node of edge in the graph

weight

Number

Weight 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.

Property

Type

Description

lookaheadTime

String (duration iso8601)

How much the solver should look ahead to manage congestion

timeSegmentSize

String (duration iso8601)

Duration of the time segments in which the look ahead time is divided

graphUpdateMultiplier

Number

This parameter controls how non-blocking pickers influence the congestion on the graph

speedInMeterPerSecond

Number

Default 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.

Property

Type

Description

id

string (UUID)

The unique identifier that must be used to select this graph in a PickRequest

name

string

A name for the graph (currently unused)

edges

integer

The number of edges in the graph

nodes

integer

The number of nodes in the graph

createdAt

string (date)

The date when the graph was uploaded

updatedAt

string (date)

The date of the last update

username

string

Username of the user uploading the graph

routingOptions

RoutingOptions

If not specified in the request it will report the default values.