Basic job usage
This section demonstrates how to use different job task types.
You can find more details about job type schema on job concept section.
Basic pickup and delivery usage
In this example, there is one delivery, one pickup, and one pickup and delivery job with one dimensional demand.
Problem
{
"plan": {
"jobs": [
{
"id": "job1",
"deliveries": [
{
"places": [
{
"location": {
"lat": 52.52599,
"lng": 13.45413
},
"duration": 300.0,
"times": [
[
"2019-07-04T09:00:00Z",
"2019-07-04T18:00:00Z"
],
[
"2019-07-05T09:00:00Z",
"2019-07-05T18:00:00Z"
]
]
}
],
"demand": [
1
]
}
]
},
{
"id": "job2",
"pickups": [
{
"places": [
{
"location": {
"lat": 52.5225,
"lng": 13.4095
},
"duration": 240.0,
"times": [
[
"2019-07-04T10:00:00Z",
"2019-07-04T16:00:00Z"
]
]
}
],
"demand": [
1
]
}
]
},
{
"id": "job3",
"pickups": [
{
"places": [
{
"location": {
"lat": 52.5225,
"lng": 13.4095
},
"duration": 300.0,
"tag": "p1"
}
],
"demand": [
1
]
}
],
"deliveries": [
{
"places": [
{
"location": {
"lat": 52.5165,
"lng": 13.3808
},
"duration": 300.0,
"tag": "d1"
}
],
"demand": [
1
]
}
]
}
]
},
"fleet": {
"vehicles": [
{
"typeId": "vehicle",
"vehicleIds": [
"vehicle_1"
],
"profile": {
"matrix": "normal_car"
},
"costs": {
"fixed": 22.0,
"distance": 0.0002,
"time": 0.004806
},
"shifts": [
{
"start": {
"earliest": "2019-07-04T09:00:00Z",
"location": {
"lat": 52.5316,
"lng": 13.3884
}
},
"end": {
"latest": "2019-07-04T18:00:00Z",
"location": {
"lat": 52.5316,
"lng": 13.3884
}
}
}
],
"capacity": [
10
]
}
],
"profiles": [
{
"name": "normal_car"
}
]
}
}
Solution
{
"statistic": {
"cost": 41.504842000000004,
"distance": 13251,
"duration": 3507,
"times": {
"driving": 2367,
"serving": 1140,
"waiting": 0,
"break": 0,
"commuting": 0,
"parking": 0
}
},
"tours": [
{
"vehicleId": "vehicle_1",
"typeId": "vehicle",
"shiftIndex": 0,
"stops": [
{
"location": {
"lat": 52.5316,
"lng": 13.3884
},
"time": {
"arrival": "2019-07-04T09:00:00Z",
"departure": "2019-07-04T09:51:29Z"
},
"distance": 0,
"load": [
1
],
"activities": [
{
"jobId": "departure",
"type": "departure"
}
]
},
{
"location": {
"lat": 52.52599,
"lng": 13.45413
},
"time": {
"arrival": "2019-07-04T10:07:17Z",
"departure": "2019-07-04T10:12:17Z"
},
"distance": 5112,
"load": [
0
],
"activities": [
{
"jobId": "job1",
"type": "delivery"
}
]
},
{
"location": {
"lat": 52.5225,
"lng": 13.4095
},
"time": {
"arrival": "2019-07-04T10:22:26Z",
"departure": "2019-07-04T10:31:26Z"
},
"distance": 8952,
"load": [
2
],
"activities": [
{
"jobId": "job2",
"type": "pickup",
"location": {
"lat": 52.5225,
"lng": 13.4095
},
"time": {
"start": "2019-07-04T10:22:26Z",
"end": "2019-07-04T10:26:26Z"
}
},
{
"jobId": "job3",
"type": "pickup",
"location": {
"lat": 52.5225,
"lng": 13.4095
},
"time": {
"start": "2019-07-04T10:26:26Z",
"end": "2019-07-04T10:31:26Z"
},
"jobTag": "p1"
}
]
},
{
"location": {
"lat": 52.5165,
"lng": 13.3808
},
"time": {
"arrival": "2019-07-04T10:37:37Z",
"departure": "2019-07-04T10:42:37Z"
},
"distance": 11106,
"load": [
1
],
"activities": [
{
"jobId": "job3",
"type": "delivery",
"jobTag": "d1"
}
]
},
{
"location": {
"lat": 52.5316,
"lng": 13.3884
},
"time": {
"arrival": "2019-07-04T10:49:56Z",
"departure": "2019-07-04T10:49:56Z"
},
"distance": 13251,
"load": [
0
],
"activities": [
{
"jobId": "arrival",
"type": "arrival"
}
]
}
],
"statistic": {
"cost": 41.504842000000004,
"distance": 13251,
"duration": 3507,
"times": {
"driving": 2367,
"serving": 1140,
"waiting": 0,
"break": 0,
"commuting": 0,
"parking": 0
}
}
}
]
}
{
"type": "FeatureCollection",
"features": [
{
"type": "Feature",
"properties": {
"tour_idx": "0",
"stop_idx": "0",
"marker-symbol": "warehouse",
"jobs_ids": "departure",
"marker-color": "#e6194b",
"marker-size": "medium"
},
"geometry": {
"type": "Point",
"coordinates": [
13.3884,
52.5316
]
}
},
{
"type": "Feature",
"properties": {
"stop_idx": "1",
"marker-symbol": "marker",
"marker-size": "medium",
"marker-color": "#e6194b",
"jobs_ids": "job1",
"tour_idx": "0"
},
"geometry": {
"type": "Point",
"coordinates": [
13.45413,
52.52599
]
}
},
{
"type": "Feature",
"properties": {
"jobs_ids": "job3,job2",
"marker-symbol": "marker",
"marker-color": "#e6194b",
"marker-size": "medium",
"tour_idx": "0",
"stop_idx": "2"
},
"geometry": {
"type": "Point",
"coordinates": [
13.4095,
52.5225
]
}
},
{
"type": "Feature",
"properties": {
"marker-color": "#e6194b",
"marker-symbol": "marker",
"tour_idx": "0",
"marker-size": "medium",
"stop_idx": "3",
"jobs_ids": "job3"
},
"geometry": {
"type": "Point",
"coordinates": [
13.3808,
52.5165
]
}
},
{
"type": "Feature",
"properties": {
"stop_idx": "4",
"jobs_ids": "arrival",
"marker-color": "#e6194b",
"marker-size": "medium",
"marker-symbol": "warehouse",
"tour_idx": "0"
},
"geometry": {
"type": "Point",
"coordinates": [
13.3884,
52.5316
]
}
},
{
"type": "Feature",
"properties": {
"shift_idx": "0",
"stroke-width": "4",
"stroke": "#e6194b",
"tour_idx": "0",
"activities:": "6",
"vehicle_id": "vehicle_1"
},
"geometry": {
"type": "LineString",
"coordinates": [
[
13.3884,
52.5316
],
[
13.45413,
52.52599
],
[
13.4095,
52.5225
],
[
13.3808,
52.5165
],
[
13.3884,
52.5316
]
]
}
}
]
}
As problem has two job task places with exactly same location, solution contains one stop with two activities.
Multiple pickups and deliveries
This example contains two multi jobs with slightly different parameters.
Problem
{
"plan": {
"jobs": [
{
"id": "multi_job1",
"pickups": [
{
"places": [
{
"location": {
"lat": 52.5622847,
"lng": 13.4023099
},
"duration": 240.0,
"tag": "p1"
}
],
"demand": [
1
]
},
{
"places": [
{
"location": {
"lat": 52.5330881,
"lng": 13.3973059
},
"duration": 240.0,
"tag": "p2"
}
],
"demand": [
1
]
}
],
"deliveries": [
{
"places": [
{
"location": {
"lat": 52.5252832,
"lng": 13.4188422
},
"duration": 240.0,
"tag": "d1"
}
],
"demand": [
2
]
}
]
},
{
"id": "multi_job2",
"pickups": [
{
"places": [
{
"location": {
"lat": 52.52599,
"lng": 13.45413
},
"duration": 240.0,
"tag": "p1"
}
],
"demand": [
2
]
}
],
"deliveries": [
{
"places": [
{
"location": {
"lat": 52.4928,
"lng": 13.4597
},
"duration": 240.0,
"tag": "d1"
}
],
"demand": [
1
]
},
{
"places": [
{
"location": {
"lat": 52.4989,
"lng": 13.3917
},
"duration": 240.0,
"tag": "d2"
}
],
"demand": [
1
]
}
]
}
]
},
"fleet": {
"vehicles": [
{
"typeId": "vehicle",
"vehicleIds": [
"vehicle_1"
],
"profile": {
"matrix": "normal_car"
},
"costs": {
"fixed": 22.0,
"distance": 0.0002,
"time": 0.004806
},
"shifts": [
{
"start": {
"earliest": "2019-07-04T09:00:00Z",
"location": {
"lat": 52.4664257,
"lng": 13.2812488
}
},
"end": {
"latest": "2019-07-04T18:00:00Z",
"location": {
"lat": 52.4664257,
"lng": 13.2812488
}
}
}
],
"capacity": [
10
]
}
],
"profiles": [
{
"name": "normal_car"
}
]
}
}
Solution
{
"statistic": {
"cost": 74.412666,
"distance": 52738,
"duration": 8711,
"times": {
"driving": 7271,
"serving": 1440,
"waiting": 0,
"break": 0
}
},
"tours": [
{
"vehicleId": "vehicle_1",
"typeId": "vehicle",
"shiftIndex": 0,
"stops": [
{
"location": {
"lat": 52.4664257,
"lng": 13.2812488
},
"time": {
"arrival": "2019-07-04T09:00:00Z",
"departure": "2019-07-04T09:00:00Z"
},
"distance": 0,
"load": [
0
],
"activities": [
{
"jobId": "departure",
"type": "departure"
}
]
},
{
"location": {
"lat": 52.5622847,
"lng": 13.4023099
},
"time": {
"arrival": "2019-07-04T09:32:24Z",
"departure": "2019-07-04T09:36:24Z"
},
"distance": 17547,
"load": [
1
],
"activities": [
{
"jobId": "multi_job1",
"type": "pickup",
"tag": "p1"
}
]
},
{
"location": {
"lat": 52.5330881,
"lng": 13.3973059
},
"time": {
"arrival": "2019-07-04T09:49:48Z",
"departure": "2019-07-04T09:53:48Z"
},
"distance": 22014,
"load": [
2
],
"activities": [
{
"jobId": "multi_job1",
"type": "pickup",
"tag": "p2"
}
]
},
{
"location": {
"lat": 52.5252832,
"lng": 13.4188422
},
"time": {
"arrival": "2019-07-04T10:00:48Z",
"departure": "2019-07-04T10:04:48Z"
},
"distance": 23849,
"load": [
0
],
"activities": [
{
"jobId": "multi_job1",
"type": "delivery",
"tag": "d1"
}
]
},
{
"location": {
"lat": 52.52599,
"lng": 13.45413
},
"time": {
"arrival": "2019-07-04T10:12:17Z",
"departure": "2019-07-04T10:16:17Z"
},
"distance": 26552,
"load": [
2
],
"activities": [
{
"jobId": "multi_job2",
"type": "pickup",
"tag": "p1"
}
]
},
{
"location": {
"lat": 52.4928,
"lng": 13.4597
},
"time": {
"arrival": "2019-07-04T10:38:25Z",
"departure": "2019-07-04T10:42:25Z"
},
"distance": 35242,
"load": [
1
],
"activities": [
{
"jobId": "multi_job2",
"type": "delivery",
"tag": "d1"
}
]
},
{
"location": {
"lat": 52.4989,
"lng": 13.3917
},
"time": {
"arrival": "2019-07-04T10:57:57Z",
"departure": "2019-07-04T11:01:57Z"
},
"distance": 40617,
"load": [
0
],
"activities": [
{
"jobId": "multi_job2",
"type": "delivery",
"tag": "d2"
}
]
},
{
"location": {
"lat": 52.4664257,
"lng": 13.2812488
},
"time": {
"arrival": "2019-07-04T11:25:11Z",
"departure": "2019-07-04T11:25:11Z"
},
"distance": 52738,
"load": [
0
],
"activities": [
{
"jobId": "arrival",
"type": "arrival"
}
]
}
],
"statistic": {
"cost": 74.412666,
"distance": 52738,
"duration": 8711,
"times": {
"driving": 7271,
"serving": 1440,
"waiting": 0,
"break": 0
}
}
}
],
"unassigned": []
}
Mixing job task types
You can mix job task types in one job:
Problem
{
"plan": {
"jobs": [
{
"id": "simple_replacement_job",
"replacements": [
{
"places": [
{
"location": {
"lat": 52.5622847,
"lng": 13.4023099
},
"duration": 3600.0,
"times": [
[
"2019-07-04T09:00:00Z",
"2019-07-04T18:00:00Z"
]
]
}
],
"demand": [
3
]
}
]
},
{
"id": "simple_service_job",
"services": [
{
"places": [
{
"location": {
"lat": 52.5330881,
"lng": 13.3973059
},
"duration": 3600.0,
"times": [
[
"2019-07-04T08:00:00Z",
"2019-07-04T12:00:00Z"
],
[
"2019-07-04T14:00:00Z",
"2019-07-04T18:00:00Z"
]
]
}
]
}
]
},
{
"id": "mixed_job",
"pickups": [
{
"places": [
{
"location": {
"lat": 52.5252832,
"lng": 13.4188422
},
"duration": 240.0,
"tag": "p1"
}
],
"demand": [
1
]
}
],
"deliveries": [
{
"places": [
{
"location": {
"lat": 52.52599,
"lng": 13.45413
},
"duration": 240.0,
"tag": "d1"
}
],
"demand": [
1
]
}
],
"replacements": [
{
"places": [
{
"location": {
"lat": 52.4928,
"lng": 13.4597
},
"duration": 2400.0,
"tag": "r1"
}
],
"demand": [
2
]
}
],
"services": [
{
"places": [
{
"location": {
"lat": 52.4989,
"lng": 13.3917
},
"duration": 1800.0,
"tag": "s1"
}
]
}
]
}
]
},
"fleet": {
"vehicles": [
{
"typeId": "vehicle",
"vehicleIds": [
"vehicle_1"
],
"profile": {
"matrix": "normal_car"
},
"costs": {
"fixed": 22.0,
"distance": 0.0002,
"time": 0.004806
},
"shifts": [
{
"start": {
"earliest": "2019-07-04T09:00:00Z",
"location": {
"lat": 52.4664257,
"lng": 13.2812488
}
},
"end": {
"latest": "2019-07-04T18:00:00Z",
"location": {
"lat": 52.4664257,
"lng": 13.2812488
}
}
}
],
"capacity": [
10
]
}
],
"profiles": [
{
"name": "normal_car"
}
]
}
}
Solution
{
"statistic": {
"cost": 124.587306,
"distance": 52738,
"duration": 19151,
"times": {
"driving": 7271,
"serving": 11880,
"waiting": 0,
"break": 0
}
},
"tours": [
{
"vehicleId": "vehicle_1",
"typeId": "vehicle",
"shiftIndex": 0,
"stops": [
{
"location": {
"lat": 52.4664257,
"lng": 13.2812488
},
"time": {
"arrival": "2019-07-04T09:00:00Z",
"departure": "2019-07-04T09:00:00Z"
},
"distance": 0,
"load": [
5
],
"activities": [
{
"jobId": "departure",
"type": "departure"
}
]
},
{
"location": {
"lat": 52.5622847,
"lng": 13.4023099
},
"time": {
"arrival": "2019-07-04T09:32:24Z",
"departure": "2019-07-04T10:32:24Z"
},
"distance": 17547,
"load": [
5
],
"activities": [
{
"jobId": "simple_replacement_job",
"type": "replacement"
}
]
},
{
"location": {
"lat": 52.5330881,
"lng": 13.3973059
},
"time": {
"arrival": "2019-07-04T10:45:48Z",
"departure": "2019-07-04T11:45:48Z"
},
"distance": 22014,
"load": [
5
],
"activities": [
{
"jobId": "simple_service_job",
"type": "service"
}
]
},
{
"location": {
"lat": 52.5252832,
"lng": 13.4188422
},
"time": {
"arrival": "2019-07-04T11:52:48Z",
"departure": "2019-07-04T11:56:48Z"
},
"distance": 23849,
"load": [
6
],
"activities": [
{
"jobId": "mixed_job",
"type": "pickup",
"tag": "p1"
}
]
},
{
"location": {
"lat": 52.52599,
"lng": 13.45413
},
"time": {
"arrival": "2019-07-04T12:04:17Z",
"departure": "2019-07-04T12:08:17Z"
},
"distance": 26552,
"load": [
5
],
"activities": [
{
"jobId": "mixed_job",
"type": "delivery",
"tag": "d1"
}
]
},
{
"location": {
"lat": 52.4928,
"lng": 13.4597
},
"time": {
"arrival": "2019-07-04T12:30:25Z",
"departure": "2019-07-04T13:10:25Z"
},
"distance": 35242,
"load": [
5
],
"activities": [
{
"jobId": "mixed_job",
"type": "replacement",
"tag": "r1"
}
]
},
{
"location": {
"lat": 52.4989,
"lng": 13.3917
},
"time": {
"arrival": "2019-07-04T13:25:57Z",
"departure": "2019-07-04T13:55:57Z"
},
"distance": 40617,
"load": [
5
],
"activities": [
{
"jobId": "mixed_job",
"type": "service",
"tag": "s1"
}
]
},
{
"location": {
"lat": 52.4664257,
"lng": 13.2812488
},
"time": {
"arrival": "2019-07-04T14:19:11Z",
"departure": "2019-07-04T14:19:11Z"
},
"distance": 52738,
"load": [
0
],
"activities": [
{
"jobId": "arrival",
"type": "arrival"
}
]
}
],
"statistic": {
"cost": 124.587306,
"distance": 52738,
"duration": 19151,
"times": {
"driving": 7271,
"serving": 11880,
"waiting": 0,
"break": 0
}
}
}
],
"unassigned": []
}