Relations
These examples demonstrates how to use relation feature.
Relation of Any type
In this example, any
relation locks two jobs to specific vehicle in any order.
Problem
{
"plan": {
"jobs": [
{
"id": "job1",
"deliveries": [
{
"places": [
{
"location": {
"lat": 52.52599,
"lng": 13.45413
},
"duration": 300.0
}
],
"demand": [
1
]
}
]
},
{
"id": "job2",
"deliveries": [
{
"places": [
{
"location": {
"lat": 52.5225,
"lng": 13.4095
},
"duration": 240.0
}
],
"demand": [
1
]
}
]
},
{
"id": "job3",
"deliveries": [
{
"places": [
{
"location": {
"lat": 52.5165,
"lng": 13.3808
},
"duration": 300.0
}
],
"demand": [
1
]
}
]
},
{
"id": "job4",
"deliveries": [
{
"places": [
{
"location": {
"lat": 52.5145,
"lng": 13.3513
},
"duration": 300.0
}
],
"demand": [
1
]
}
]
}
],
"relations": [
{
"type": "any",
"jobs": [
"job1",
"job3"
],
"vehicleId": "vehicle_1"
}
]
},
"fleet": {
"vehicles": [
{
"typeId": "vehicle",
"vehicleIds": [
"vehicle_1",
"vehicle_2"
],
"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": [
2
]
}
],
"profiles": [
{
"name": "normal_car"
}
]
}
}
Solution
{
"statistic": {
"cost": 107.17656600000001,
"distance": 64505,
"duration": 10461,
"times": {
"driving": 9321,
"serving": 1140,
"waiting": 0,
"break": 0
}
},
"tours": [
{
"vehicleId": "vehicle_2",
"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": [
2
],
"activities": [
{
"jobId": "departure",
"type": "departure"
}
]
},
{
"location": {
"lat": 52.5145,
"lng": 13.3513
},
"time": {
"arrival": "2019-07-04T09:21:41Z",
"departure": "2019-07-04T09:26:41Z"
},
"distance": 8996,
"load": [
1
],
"activities": [
{
"jobId": "job4",
"type": "delivery"
}
]
},
{
"location": {
"lat": 52.5225,
"lng": 13.4095
},
"time": {
"arrival": "2019-07-04T09:41:26Z",
"departure": "2019-07-04T09:45:26Z"
},
"distance": 14028,
"load": [
0
],
"activities": [
{
"jobId": "job2",
"type": "delivery"
}
]
},
{
"location": {
"lat": 52.4664257,
"lng": 13.2812488
},
"time": {
"arrival": "2019-07-04T10:18:32Z",
"departure": "2019-07-04T10:18:32Z"
},
"distance": 27524,
"load": [
0
],
"activities": [
{
"jobId": "arrival",
"type": "arrival"
}
]
}
],
"statistic": {
"cost": 50.150672,
"distance": 27524,
"duration": 4712,
"times": {
"driving": 4172,
"serving": 540,
"waiting": 0,
"break": 0
}
}
},
{
"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": [
2
],
"activities": [
{
"jobId": "departure",
"type": "departure"
}
]
},
{
"location": {
"lat": 52.52599,
"lng": 13.45413
},
"time": {
"arrival": "2019-07-04T09:41:15Z",
"departure": "2019-07-04T09:46:15Z"
},
"distance": 19648,
"load": [
1
],
"activities": [
{
"jobId": "job1",
"type": "delivery"
}
]
},
{
"location": {
"lat": 52.5165,
"lng": 13.3808
},
"time": {
"arrival": "2019-07-04T10:02:31Z",
"departure": "2019-07-04T10:07:31Z"
},
"distance": 25642,
"load": [
0
],
"activities": [
{
"jobId": "job3",
"type": "delivery"
}
]
},
{
"location": {
"lat": 52.4664257,
"lng": 13.2812488
},
"time": {
"arrival": "2019-07-04T10:35:49Z",
"departure": "2019-07-04T10:35:49Z"
},
"distance": 36981,
"load": [
0
],
"activities": [
{
"jobId": "arrival",
"type": "arrival"
}
]
}
],
"statistic": {
"cost": 57.02589400000001,
"distance": 36981,
"duration": 5749,
"times": {
"driving": 5149,
"serving": 600,
"waiting": 0,
"break": 0
}
}
}
],
"unassigned": []
}
Relation of Strict type
In this example, strict
relation locks two jobs to specific vehicle starting from departure.
Problem
{
"plan": {
"jobs": [
{
"id": "job1",
"deliveries": [
{
"places": [
{
"location": {
"lat": 52.52599,
"lng": 13.45413
},
"duration": 300.0
}
],
"demand": [
1
]
}
]
},
{
"id": "job2",
"deliveries": [
{
"places": [
{
"location": {
"lat": 52.5225,
"lng": 13.4095
},
"duration": 240.0
}
],
"demand": [
1
]
}
]
},
{
"id": "job3",
"deliveries": [
{
"places": [
{
"location": {
"lat": 52.5165,
"lng": 13.3808
},
"duration": 300.0
}
],
"demand": [
1
]
}
]
},
{
"id": "job4",
"deliveries": [
{
"places": [
{
"location": {
"lat": 52.5145,
"lng": 13.3513
},
"duration": 300.0
}
],
"demand": [
1
]
}
]
}
],
"relations": [
{
"type": "strict",
"jobs": [
"departure",
"job4",
"job1"
],
"vehicleId": "vehicle_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": 60.354318000000006,
"distance": 34303,
"duration": 6553,
"times": {
"driving": 5413,
"serving": 1140,
"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": [
4
],
"activities": [
{
"jobId": "departure",
"type": "departure"
}
]
},
{
"location": {
"lat": 52.5145,
"lng": 13.3513
},
"time": {
"arrival": "2019-07-04T09:22:23Z",
"departure": "2019-07-04T09:27:23Z"
},
"distance": 8621,
"load": [
3
],
"activities": [
{
"jobId": "job4",
"type": "delivery"
}
]
},
{
"location": {
"lat": 52.52599,
"lng": 13.45413
},
"time": {
"arrival": "2019-07-04T09:48:51Z",
"departure": "2019-07-04T09:53:51Z"
},
"distance": 16956,
"load": [
2
],
"activities": [
{
"jobId": "job1",
"type": "delivery"
}
]
},
{
"location": {
"lat": 52.5225,
"lng": 13.4095
},
"time": {
"arrival": "2019-07-04T10:04:40Z",
"departure": "2019-07-04T10:08:40Z"
},
"distance": 20810,
"load": [
1
],
"activities": [
{
"jobId": "job2",
"type": "delivery"
}
]
},
{
"location": {
"lat": 52.5165,
"lng": 13.3808
},
"time": {
"arrival": "2019-07-04T10:14:29Z",
"departure": "2019-07-04T10:19:29Z"
},
"distance": 22964,
"load": [
0
],
"activities": [
{
"jobId": "job3",
"type": "delivery"
}
]
},
{
"location": {
"lat": 52.4664257,
"lng": 13.2812488
},
"time": {
"arrival": "2019-07-04T10:49:13Z",
"departure": "2019-07-04T10:49:13Z"
},
"distance": 34303,
"load": [
0
],
"activities": [
{
"jobId": "arrival",
"type": "arrival"
}
]
}
],
"statistic": {
"cost": 60.354318000000006,
"distance": 34303,
"duration": 6553,
"times": {
"driving": 5413,
"serving": 1140,
"waiting": 0,
"break": 0
}
}
}
],
"unassigned": []
}