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

Picking optimisation

Input

The goal of the picking optimisation solver is to find the best picklist and route for each picker.
To do so, the characteristics of each picker and item to pick need to be provided in the request.

Pick solve request

Here is the general structure of the solve request.

PropertyTypeDescription
graphstring (UUID)The graph id returned by OnPick platform when uploaded.
pickersarray of pickersThe list of pickers that will retrieve the items in the warehouse.
picksarray of picksThe list of picks.

Pickers

Pickers are specified as a list of objects with the following properties

PropertyTypeDescription
namestringUnique name identifier for the picker.
positionstringNode name for the initial position of the picker in the graph.
capacityintegerCapacity of the picker
timeCapacitystring (duration iso8601)The time the picker has to complete his picklist, expressed as a duration.
speeddoubleThe speed of the picker expressed in meters per second. If not specified it is assumed to be the one specified in the routing options for the graph which has a default value of 1.6 m/s
blockingbooleanIf true it signals the solver that other pickers cannot walk around this picker. For instance they may operate a vehicle (e.g. a forklift) or large picking device and walking around them may be dangerous or unfeasible.
dropOffstringThe position where the pickers should drop off the picks.

Picks

Picks have the following properties

PropertyTypeDescription
namestringUnique name identifying the item
positionstringName of the node corresponding to the position of the item.
pickHandlingDurationstring (duration iso8601)The time needed to pick the item from the shelf.
loadintegerHow much picker capacity the item is going to use.
pickerstringIf specified indicates the Picker that is assigned to pick this item.
customerstringIf specified indicates the unique identifier of the customer order linked to this item.

Example

For the example we are using the demo graph with id="00000000-0000-0000-0000-000000000000"

curl --request POST --url https://onpick.solvice.io/pick/solve \
		 -H "Authorization: <<apiKey>>" \
     --data '
{
     "graph": "00000000-0000-0000-0000-000000000000",
     "pickers": [
          {
               "name": "John",
               "position": "node-1-1"
          }
     ],
     "picks": [
          {
               "name": "p1",
               "position": "node-4-3",
               "pickHandlingDuration": "PT1S"
          },
          {
               "name": "p2",
               "position": "node-5-2",
               "pickHandlingDuration": "PT1S"
          }
     ]
}
'
{
    "solution": [
      {
        "picker" : "John",
        "visits" : [
            {
                "position": "node-1-1",
                "pick": null,
                "arrival": 0.0,
                "arrivalInSeconds": 0,
                "nextPosition": "node-4-3",
                "path": [
                    "node-1-1",
                    "node-1-2",
                    "node-1-3",
                    "node-2-3",
                    "node-3-3",
                    "node-4-3"
                ]
            },
            {
                "position": "node-4-3",
                "pick": "p1",
                "arrival": 125.000000000,
                "arrivalInSeconds": 125,
                "nextPosition": "node-5-2",
                "path": [
                    "node-4-3",
                    "node-3-3",
                    "node-2-3",
                    "node-1-3",
                    "node-1-2",
                    "node-2-2",
                    "node-3-2",
                    "node-4-2",
                    "node-5-2"
                ]
            },
            {
                "position": "node-5-2",
                "pick": "p2",
                "arrival": 394.000000000,
                "arrivalInSeconds": 394,
                "nextPosition": null,
                "path": null
            }
        ]
    }],
    "totalDistance": 361,
    "unassigned" : []
}

Pick response

The solution returned by OnPick is structured as follows:

PropertyTypeDescription
solutionarray of PickerRoute objectsThe solution contains the detailed route for each picker
totalDistanceintegerThe total distance travelled by the pickers
unassignedarray of picksIf the solver was unable to assign all the picks it will report the unassigned picks in this array.3

As shown in the table, the solution property contains an array of PickerRoute objects. Each PickerRoute contains two properties, picker and visits. Picker returns the name of the picker and visits is an array of Position objects. Each Position contains information on the current position (if there is a pick or not) and how to reach the next position until all the picks are collected.

PropertyTypeDescription
positionstringThe node in the graph that represents the current position of the picker
pickstringIf not null, it specifies the item the picker should collect in this position
arrivalfloatEstimated arrival time in this position
arrivalInSecondsintegerEstimated arrival time in seconds
nextPositionstringThe next node in the route of the Picker
patharray of stringThe nodes that the Picker should go through to arrive to nextPosition