複数のシフトと休憩を伴う VRP
ジョブの時間枠の指定、運行のシフト時間と休憩を組み合わせて使用することで、より正確かつ高度な方法で複数のシフトと休憩を含む VRP を構築できます。これは、車両のシフトと休憩、ジョブの実行時間を 1 つの問題で異なる日ごとに個別に指定できることを意味します。たとえば、 1 週間または他の期間内に複数の配達または集荷を行う必要があります。 運行管理上、特定のシフト時間と休憩時間がある車両があり、曜日によって異なると想定しています。 このような問題を解決する 1 つの方法は、毎日個別に車両の制約を指定して、毎回別個の問題を作成することです Tour Planning API では、 1 つの問題で 1 週間または任意の期間、このような制約を指定できます。
複数のシフトを使用する最も単純なケースは、時間制限がなく、車両の数が限られている中で実行するジョブの長いリストがある場合です。つまり、 1 シフト以内に実行できないジョブの量が明らかになります。 この場合、車両に複数のシフトを設定して、ジョブが複数のシフト内で最適な方法で実行されるようにすることができます。
時間的制約のない 15 の作業と、 1 台の車両の積載量が 10 で、 1 日に 3 時間のシフトしかない場合の例を考えてみましょう。 明らかに、車両はこれらのすべての作業を一度に実行することはできません。そのため、車両への複数のシフトを指定して、数日以内に最も有利な方法で作業を実行できるようにします。 そのためには、車両のシフト時間に日付を追加する必要があります。 この場合、 4 つのシフトを追加することにしました。
- シフト 1 :
2021-10-23T09:00:00Z
- 2021-10-23T12:00:00Z
- シフト 2 :
2021-10-24T09:00:00Z
- 2021-10-24T12:00:00Z
- シフト 3 :
2021-10-25T09:00:00Z
- 2021-10-25T12:00:00Z
- シフト 4 :
2021-10-26T09:00:00Z
- 2021-10-26T12:00:00Z
Problems
{
"fleet": {
"types": [
{
"id": "Vehicle_1",
"profile": "car",
"costs": {
"fixed": 10.0,
"distance": 0.002,
"time": 0.003
},
"shifts": [
{
"start": {
"time": "2021-10-23T09:00:00Z",
"location": {
"lat": 51.059188,
"lng": 13.540317
}
},
"end": {
"time": "2021-10-23T12:00:00Z",
"location": {
"lat": 51.059188,
"lng": 13.540317
}
}
},
{
"start": {
"time": "2021-10-24T09:00:00Z",
"location": {
"lat": 51.059188,
"lng": 13.540317
}
},
"end": {
"time": "2021-10-24T12:00:00Z",
"location": {
"lat": 51.059188,
"lng": 13.540317
}
}
},
{
"start": {
"time": "2021-10-25T09:00:00Z",
"location": {
"lat": 51.059188,
"lng": 13.540317
}
},
"end": {
"time": "2021-10-25T12:00:00Z",
"location": {
"lat": 51.059188,
"lng": 13.540317
}
}
},
{
"start": {
"time": "2021-10-26T09:00:00Z",
"location": {
"lat": 51.059188,
"lng": 13.540317
}
},
"end": {
"time": "2021-10-26T12:00:00Z",
"location": {
"lat": 51.059188,
"lng": 13.540317
}
}
}
],
"capacity": [
10
],
"amount": 1
}
],
"profiles": [
{
"type": "car",
"name": "car"
}
]
},
"plan": {
"jobs": [
{
"id": "Job_1",
"tasks": {
"pickups": [
{
"places": [
{
"location": {
"lat": 51.05238,
"lng": 13.74114
},
"duration": 1350
}
],
"demand": [
1
]
}
]
}
},
{
"id": "Job_2",
"tasks": {
"pickups": [
{
"places": [
{
"location": {
"lat": 51.06099,
"lng": 13.75245
},
"duration": 1350
}
],
"demand": [
1
]
}
]
}
},
{
"id": "Job_3",
"tasks": {
"pickups": [
{
"places": [
{
"location": {
"lat": 51.08511,
"lng": 13.76875
},
"duration": 1350
}
],
"demand": [
1
]
}
]
}
},
{
"id": "Job_4",
"tasks": {
"pickups": [
{
"places": [
{
"location": {
"lat": 51.1323847,
"lng": 13.7779515
},
"duration": 1350
}
],
"demand": [
1
]
}
]
}
},
{
"id": "Job_5",
"tasks": {
"pickups": [
{
"places": [
{
"location": {
"lat": 51.11716,
"lng": 13.73054
},
"duration": 1350
}
],
"demand": [
1
]
}
]
}
},
{
"id": "Job_6",
"tasks": {
"deliveries": [
{
"places": [
{
"location": {
"lat": 51.12308,
"lng": 13.76406
},
"duration": 1350
}
],
"demand": [
1
]
}
]
}
},
{
"id": "Job_7",
"tasks": {
"deliveries": [
{
"places": [
{
"location": {
"lat": 51.08588,
"lng": 13.72637
},
"duration": 1350
}
],
"demand": [
1
]
}
]
}
},
{
"id": "Job_8",
"tasks": {
"deliveries": [
{
"places": [
{
"location": {
"lat": 51.08588,
"lng": 13.72637
},
"duration": 1350
}
],
"demand": [
1
]
}
]
}
},
{
"id": "Job_9",
"tasks": {
"deliveries": [
{
"places": [
{
"location": {
"lat": 51.08588,
"lng": 13.72637
},
"duration": 1350
}
],
"demand": [
1
]
}
]
}
},
{
"id": "Job_10",
"tasks": {
"deliveries": [
{
"places": [
{
"location": {
"lat": 51.18588,
"lng": 13.52637
},
"duration": 1350
}
],
"demand": [
1
]
}
]
}
},
{
"id": "Job_11",
"tasks": {
"deliveries": [
{
"places": [
{
"location": {
"lat": 51.10588,
"lng": 13.79637
},
"duration": 1350
}
],
"demand": [
1
]
}
]
}
},
{
"id": "Job_12",
"tasks": {
"deliveries": [
{
"places": [
{
"location": {
"lat": 51.01588,
"lng": 13.52637
},
"duration": 1350
}
],
"demand": [
1
]
}
]
}
},
{
"id": "Job_13",
"tasks": {
"deliveries": [
{
"places": [
{
"location": {
"lat": 51.08588,
"lng": 13.62637
},
"duration": 1350
}
],
"demand": [
1
]
}
]
}
},
{
"id": "Job_14",
"tasks": {
"deliveries": [
{
"places": [
{
"location": {
"lat": 51.00088,
"lng": 13.02637
},
"duration": 1350
}
],
"demand": [
1
]
}
]
}
},
{
"id": "Job_15",
"tasks": {
"deliveries": [
{
"places": [
{
"location": {
"lat": 51.06866,
"lng": 13.77273
},
"duration": 1350
}
],
"demand": [
1
]
}
]
}
}
]
}
}
Solution
解決策からわかるように、ツアーは車両の 4 シフト以内に作業が配分されるように最適化され、次のように実施されます。 10 月 23 日 5 ジョブ、10 月 24 日 5 ジョブ、10 月 25 日 1 ジョブ、 10 月 26 日 4 ジョブ。
{
"statistic": {
"cost": 673.386,
"distance": 262603,
"duration": 36060,
"times": {
"driving": 15810,
"serving": 20250,
"waiting": 0,
"break": 0
}
},
"tours": [
{
"vehicleId": "Vehicle_1_1",
"typeId": "Vehicle_1",
"stops": [
{
"location": {
"lat": 51.059188,
"lng": 13.540317
},
"time": {
"arrival": "2021-10-24T09:00:00Z",
"departure": "2021-10-24T09:00:00Z"
},
"load": [
2
],
"activities": [
{
"jobId": "departure",
"type": "departure"
}
]
},
{
"location": {
"lat": 51.05238,
"lng": 13.74114
},
"time": {
"arrival": "2021-10-24T09:23:14Z",
"departure": "2021-10-24T09:45:44Z"
},
"load": [
3
],
"activities": [
{
"jobId": "Job_1",
"type": "pickup"
}
]
},
{
"location": {
"lat": 51.06099,
"lng": 13.75245
},
"time": {
"arrival": "2021-10-24T09:50:59Z",
"departure": "2021-10-24T10:13:29Z"
},
"load": [
4
],
"activities": [
{
"jobId": "Job_2",
"type": "pickup"
}
]
},
{
"location": {
"lat": 51.06866,
"lng": 13.77273
},
"time": {
"arrival": "2021-10-24T10:16:40Z",
"departure": "2021-10-24T10:39:10Z"
},
"load": [
3
],
"activities": [
{
"jobId": "Job_15",
"type": "delivery"
}
]
},
{
"location": {
"lat": 51.08511,
"lng": 13.76875
},
"time": {
"arrival": "2021-10-24T10:45:22Z",
"departure": "2021-10-24T11:07:52Z"
},
"load": [
4
],
"activities": [
{
"jobId": "Job_3",
"type": "pickup"
}
]
},
{
"location": {
"lat": 51.10588,
"lng": 13.79637
},
"time": {
"arrival": "2021-10-24T11:13:48Z",
"departure": "2021-10-24T11:36:18Z"
},
"load": [
3
],
"activities": [
{
"jobId": "Job_11",
"type": "delivery"
}
]
},
{
"location": {
"lat": 51.059188,
"lng": 13.540317
},
"time": {
"arrival": "2021-10-24T11:57:06Z",
"departure": "2021-10-24T11:57:06Z"
},
"load": [
0
],
"activities": [
{
"jobId": "arrival",
"type": "arrival"
}
]
}
],
"statistic": {
"cost": 152.36999999999998,
"distance": 55246,
"duration": 10626,
"times": {
"driving": 3876,
"serving": 6750,
"waiting": 0,
"break": 0
}
},
"shiftIndex": 1
},
{
"vehicleId": "Vehicle_1_1",
"typeId": "Vehicle_1",
"stops": [
{
"location": {
"lat": 51.059188,
"lng": 13.540317
},
"time": {
"arrival": "2021-10-26T09:00:00Z",
"departure": "2021-10-26T09:00:00Z"
},
"load": [
2
],
"activities": [
{
"jobId": "departure",
"type": "departure"
}
]
},
{
"location": {
"lat": 51.18588,
"lng": 13.52637
},
"time": {
"arrival": "2021-10-26T09:28:01Z",
"departure": "2021-10-26T09:50:31Z"
},
"load": [
1
],
"activities": [
{
"jobId": "Job_10",
"type": "delivery"
}
]
},
{
"location": {
"lat": 51.1323847,
"lng": 13.7779515
},
"time": {
"arrival": "2021-10-26T10:16:25Z",
"departure": "2021-10-26T10:38:55Z"
},
"load": [
2
],
"activities": [
{
"jobId": "Job_4",
"type": "pickup"
}
]
},
{
"location": {
"lat": 51.12308,
"lng": 13.76406
},
"time": {
"arrival": "2021-10-26T10:43:05Z",
"departure": "2021-10-26T11:05:35Z"
},
"load": [
1
],
"activities": [
{
"jobId": "Job_6",
"type": "delivery"
}
]
},
{
"location": {
"lat": 51.11716,
"lng": 13.73054
},
"time": {
"arrival": "2021-10-26T11:11:20Z",
"departure": "2021-10-26T11:33:50Z"
},
"load": [
2
],
"activities": [
{
"jobId": "Job_5",
"type": "pickup"
}
]
},
{
"location": {
"lat": 51.059188,
"lng": 13.540317
},
"time": {
"arrival": "2021-10-26T11:49:06Z",
"departure": "2021-10-26T11:49:06Z"
},
"load": [
0
],
"activities": [
{
"jobId": "arrival",
"type": "arrival"
}
]
}
],
"statistic": {
"cost": 180.524,
"distance": 70043,
"duration": 10146,
"times": {
"driving": 4746,
"serving": 5400,
"waiting": 0,
"break": 0
}
},
"shiftIndex": 3
},
{
"vehicleId": "Vehicle_1_1",
"typeId": "Vehicle_1",
"stops": [
{
"location": {
"lat": 51.059188,
"lng": 13.540317
},
"time": {
"arrival": "2021-10-23T09:00:00Z",
"departure": "2021-10-23T09:00:00Z"
},
"load": [
5
],
"activities": [
{
"jobId": "departure",
"type": "departure"
}
]
},
{
"location": {
"lat": 51.08588,
"lng": 13.62637
},
"time": {
"arrival": "2021-10-23T09:13:53Z",
"departure": "2021-10-23T09:36:23Z"
},
"load": [
4
],
"activities": [
{
"jobId": "Job_13",
"type": "delivery"
}
]
},
{
"location": {
"lat": 51.08588,
"lng": 13.72637
},
"time": {
"arrival": "2021-10-23T09:51:23Z",
"departure": "2021-10-23T10:58:53Z"
},
"load": [
1
],
"activities": [
{
"jobId": "Job_9",
"type": "delivery",
"location": {
"lat": 51.08588,
"lng": 13.72637
},
"time": {
"start": "2021-10-23T09:51:23Z",
"end": "2021-10-23T10:13:53Z"
}
},
{
"jobId": "Job_7",
"type": "delivery",
"location": {
"lat": 51.08588,
"lng": 13.72637
},
"time": {
"start": "2021-10-23T10:13:53Z",
"end": "2021-10-23T10:36:23Z"
}
},
{
"jobId": "Job_8",
"type": "delivery",
"location": {
"lat": 51.08588,
"lng": 13.72637
},
"time": {
"start": "2021-10-23T10:36:23Z",
"end": "2021-10-23T10:58:53Z"
}
}
]
},
{
"location": {
"lat": 51.01588,
"lng": 13.52637
},
"time": {
"arrival": "2021-10-23T11:20:08Z",
"departure": "2021-10-23T11:42:38Z"
},
"load": [
0
],
"activities": [
{
"jobId": "Job_12",
"type": "delivery"
}
]
},
{
"location": {
"lat": 51.059188,
"lng": 13.540317
},
"time": {
"arrival": "2021-10-23T11:55:00Z",
"departure": "2021-10-23T11:55:00Z"
},
"load": [
0
],
"activities": [
{
"jobId": "arrival",
"type": "arrival"
}
]
}
],
"statistic": {
"cost": 148.944,
"distance": 53722,
"duration": 10500,
"times": {
"driving": 3750,
"serving": 6750,
"waiting": 0,
"break": 0
}
},
"shiftIndex": 0
},
{
"vehicleId": "Vehicle_1_1",
"typeId": "Vehicle_1",
"stops": [
{
"location": {
"lat": 51.059188,
"lng": 13.540317
},
"time": {
"arrival": "2021-10-25T09:00:00Z",
"departure": "2021-10-25T09:00:00Z"
},
"load": [
1
],
"activities": [
{
"jobId": "departure",
"type": "departure"
}
]
},
{
"location": {
"lat": 51.00088,
"lng": 13.02637
},
"time": {
"arrival": "2021-10-25T09:28:45Z",
"departure": "2021-10-25T09:51:15Z"
},
"load": [
0
],
"activities": [
{
"jobId": "Job_14",
"type": "delivery"
}
]
},
{
"location": {
"lat": 51.059188,
"lng": 13.540317
},
"time": {
"arrival": "2021-10-25T10:19:48Z",
"departure": "2021-10-25T10:19:48Z"
},
"load": [
0
],
"activities": [
{
"jobId": "arrival",
"type": "arrival"
}
]
}
],
"statistic": {
"cost": 191.548,
"distance": 83592,
"duration": 4788,
"times": {
"driving": 3438,
"serving": 1350,
"waiting": 0,
"break": 0
}
},
"shiftIndex": 2
}
]
}
さらに、日によってシフト時間が異なる車両によって、特定の時間的制約を伴う 10 件のジョブを実行する必要がある状況についても考えてみましょう。この場合、車両のシフト時間だけでなく、シフトの日付も指定する必要があります。
今回の例では、車両は、以下の通り利用できると仮定しましょう。
- 10 月 23 日 8:00 ~ 21:00
- 10 月 24 日 8:00 ~ 15:00
- 10 月 25 日 10:00 ~ 21:00
そのため、日付に応じてシフトが指定されます。ジョブの時間帯を指定する場合も、同じ方法が適用されます。時間に加え特定の日付にジョブを実行する必要がある場合は、日付を指定する必要があります。
これらの制約を考慮すると、この問題は次のようになります。
{
"fleet": {
"types": [
{
"id": "Vehicle_1",
"profile": "car",
"costs": {
"fixed": 10.0,
"distance": 0.002,
"time": 0.003
},
"shifts": [
{
"start": {
"time": "2021-10-23T08:00:00Z",
"location": {
"lat": 51.059188,
"lng": 13.540317
}
},
"end": {
"time": "2021-10-23T21:00:00Z",
"location": {
"lat": 51.059188,
"lng": 13.540317
}
}
},
{
"start": {
"time": "2021-10-24T08:00:00Z",
"location": {
"lat": 51.059188,
"lng": 13.540317
}
},
"end": {
"time": "2021-10-24T21:15:00Z",
"location": {
"lat": 51.059188,
"lng": 13.540317
}
}
},
{
"start": {
"time": "2021-10-25T10:00:00Z",
"location": {
"lat": 51.059188,
"lng": 13.540317
}
},
"end": {
"time": "2021-10-25T21:00:00Z",
"location": {
"lat": 51.059188,
"lng": 13.540317
}
}
}
],
"capacity": [
10
],
"amount": 1
}
],
"profiles": [
{
"type": "car",
"name": "car"
}
]
},
"plan": {
"jobs": [
{
"id": "Job_1",
"tasks": {
"pickups": [
{
"places": [
{
"times": [
[
"2021-10-23T08:30:00Z",
"2021-10-23T09:00:00Z"
]
],
"location": {
"lat": 51.05238,
"lng": 13.74114
},
"duration": 1350
}
],
"demand": [
1
]
}
]
}
},
{
"id": "Job_2",
"tasks": {
"pickups": [
{
"places": [
{
"times": [
[
"2021-10-23T09:05:00Z",
"2021-10-23T09:30:00Z"
]
],
"location": {
"lat": 51.06099,
"lng": 13.75245
},
"duration": 1350
}
],
"demand": [
1
]
}
]
}
},
{
"id": "Job_3",
"tasks": {
"pickups": [
{
"places": [
{
"times": [
[
"2021-10-23T09:35:00Z",
"2021-10-23T10:00:00Z"
]
],
"location": {
"lat": 51.08511,
"lng": 13.76875
},
"duration": 1350
}
],
"demand": [
1
]
}
]
}
},
{
"id": "Job_4",
"tasks": {
"pickups": [
{
"places": [
{
"times": [
[
"2021-10-23T10:05:00Z",
"2021-10-23T10:30:00Z"
]
],
"location": {
"lat": 51.1323847,
"lng": 13.7779515
},
"duration": 1350
}
],
"demand": [
1
]
}
]
}
},
{
"id": "Job_5",
"tasks": {
"pickups": [
{
"places": [
{
"times": [
[
"2021-10-23T10:35:00Z",
"2021-10-23T11:00:00Z"
]
],
"location": {
"lat": 51.11716,
"lng": 13.73054
},
"duration": 1350
}
],
"demand": [
1
]
}
]
}
},
{
"id": "Job_6",
"tasks": {
"deliveries": [
{
"places": [
{
"times": [
[
"2021-10-24T15:01:00Z",
"2021-10-24T15:30:00Z"
]
],
"location": {
"lat": 51.12308,
"lng": 13.76406
},
"duration": 1350
}
],
"demand": [
1
]
}
]
}
},
{
"id": "Job_7",
"tasks": {
"deliveries": [
{
"places": [
{
"times": [
[
"2021-10-24T15:35:00Z",
"2021-10-24T16:05:00Z"
]
],
"location": {
"lat": 51.08588,
"lng": 13.72637
},
"duration": 1350
}
],
"demand": [
1
]
}
]
}
},
{
"id": "Job_8",
"tasks": {
"deliveries": [
{
"places": [
{
"times": [
[
"2021-10-24T16:10:00Z",
"2021-10-24T16:40:00Z"
]
],
"location": {
"lat": 51.08588,
"lng": 13.72637
},
"duration": 1350
}
],
"demand": [
1
]
}
]
}
},
{
"id": "Job_9",
"tasks": {
"deliveries": [
{
"places": [
{
"times": [
[
"2021-10-25T16:45:00Z",
"2021-10-25T17:10:00Z"
]
],
"location": {
"lat": 51.08588,
"lng": 13.72637
},
"duration": 1350
}
],
"demand": [
1
]
}
]
}
},
{
"id": "Job_10",
"tasks": {
"deliveries": [
{
"places": [
{
"times": [
[
"2021-10-25T17:15:00Z",
"2021-10-25T17:40:00Z"
]
],
"location": {
"lat": 51.06866,
"lng": 13.77273
},
"duration": 1350
}
],
"demand": [
1
]
}
]
}
}
]
}
}
この解決策から、ツアーは日付や時間枠、その日の車両のシフトスケジュールを考慮して、特定の作業を解決するように最適化されていることがわかります。
jobs_9
と job_10
は 10月 25 日に実行されます job_1
、job_2
、job_3
、job_4
および job_5
は 10 月 23 日に実行されます -
job_6
job_7
job_8
は 10 月 24 日に実行されます
同じ方法で、重複しない最大 7 つの時間帯 / シフトのツアーを計画できます。
{
"statistic": {
"cost": 403.375,
"distance": 151859,
"duration": 23219,
"times": {
"driving": 9719,
"serving": 13500,
"waiting": 0,
"break": 0
}
},
"tours": [
{
"vehicleId": "Vehicle_1_1",
"typeId": "Vehicle_1",
"stops": [
{
"location": {
"lat": 51.059188,
"lng": 13.540317
},
"time": {
"arrival": "2021-10-23T08:00:00Z",
"departure": "2021-10-23T08:14:01Z"
},
"load": [
0
],
"activities": [
{
"jobId": "departure",
"type": "departure"
}
]
},
{
"location": {
"lat": 51.05238,
"lng": 13.74114
},
"time": {
"arrival": "2021-10-23T08:37:15Z",
"departure": "2021-10-23T08:59:45Z"
},
"load": [
1
],
"activities": [
{
"jobId": "Job_1",
"type": "pickup"
}
]
},
{
"location": {
"lat": 51.06099,
"lng": 13.75245
},
"time": {
"arrival": "2021-10-23T09:05:00Z",
"departure": "2021-10-23T09:27:30Z"
},
"load": [
2
],
"activities": [
{
"jobId": "Job_2",
"type": "pickup"
}
]
},
{
"location": {
"lat": 51.08511,
"lng": 13.76875
},
"time": {
"arrival": "2021-10-23T09:35:15Z",
"departure": "2021-10-23T09:57:45Z"
},
"load": [
3
],
"activities": [
{
"jobId": "Job_3",
"type": "pickup"
}
]
},
{
"location": {
"lat": 51.1323847,
"lng": 13.7779515
},
"time": {
"arrival": "2021-10-23T10:08:35Z",
"departure": "2021-10-23T10:31:05Z"
},
"load": [
4
],
"activities": [
{
"jobId": "Job_4",
"type": "pickup"
}
]
},
{
"location": {
"lat": 51.11716,
"lng": 13.73054
},
"time": {
"arrival": "2021-10-23T10:39:21Z",
"departure": "2021-10-23T11:01:51Z"
},
"load": [
5
],
"activities": [
{
"jobId": "Job_5",
"type": "pickup"
}
]
},
{
"location": {
"lat": 51.059188,
"lng": 13.540317
},
"time": {
"arrival": "2021-10-23T11:17:07Z",
"departure": "2021-10-23T11:17:07Z"
},
"load": [
0
],
"activities": [
{
"jobId": "arrival",
"type": "arrival"
}
]
}
],
"statistic": {
"cost": 156.89999999999998,
"distance": 56971,
"duration": 10986,
"times": {
"driving": 4236,
"serving": 6750,
"waiting": 0,
"break": 0
}
},
"shiftIndex": 0
},
{
"vehicleId": "Vehicle_1_1",
"typeId": "Vehicle_1",
"stops": [
{
"location": {
"lat": 51.059188,
"lng": 13.540317
},
"time": {
"arrival": "2021-10-24T08:00:00Z",
"departure": "2021-10-24T14:56:47Z"
},
"load": [
3
],
"activities": [
{
"jobId": "departure",
"type": "departure"
}
]
},
{
"location": {
"lat": 51.12308,
"lng": 13.76406
},
"time": {
"arrival": "2021-10-24T15:15:39Z",
"departure": "2021-10-24T15:38:09Z"
},
"load": [
2
],
"activities": [
{
"jobId": "Job_6",
"type": "delivery"
}
]
},
{
"location": {
"lat": 51.08588,
"lng": 13.72637
},
"time": {
"arrival": "2021-10-24T15:47:30Z",
"departure": "2021-10-24T16:32:30Z"
},
"load": [
0
],
"activities": [
{
"jobId": "Job_7",
"type": "delivery",
"location": {
"lat": 51.08588,
"lng": 13.72637
},
"time": {
"start": "2021-10-24T15:47:30Z",
"end": "2021-10-24T16:10:00Z"
}
},
{
"jobId": "Job_8",
"type": "delivery",
"location": {
"lat": 51.08588,
"lng": 13.72637
},
"time": {
"start": "2021-10-24T16:10:00Z",
"end": "2021-10-24T16:32:30Z"
}
}
]
},
{
"location": {
"lat": 51.059188,
"lng": 13.540317
},
"time": {
"arrival": "2021-10-24T16:48:33Z",
"departure": "2021-10-24T16:48:33Z"
},
"load": [
0
],
"activities": [
{
"jobId": "arrival",
"type": "arrival"
}
]
}
],
"statistic": {
"cost": 130.63400000000001,
"distance": 50258,
"duration": 6706,
"times": {
"driving": 2656,
"serving": 4050,
"waiting": 0,
"break": 0
}
},
"shiftIndex": 1
},
{
"vehicleId": "Vehicle_1_1",
"typeId": "Vehicle_1",
"stops": [
{
"location": {
"lat": 51.059188,
"lng": 13.540317
},
"time": {
"arrival": "2021-10-25T10:00:00Z",
"departure": "2021-10-25T16:29:32Z"
},
"load": [
2
],
"activities": [
{
"jobId": "departure",
"type": "departure"
}
]
},
{
"location": {
"lat": 51.08588,
"lng": 13.72637
},
"time": {
"arrival": "2021-10-25T16:45:00Z",
"departure": "2021-10-25T17:07:30Z"
},
"load": [
1
],
"activities": [
{
"jobId": "Job_9",
"type": "delivery"
}
]
},
{
"location": {
"lat": 51.06866,
"lng": 13.77273
},
"time": {
"arrival": "2021-10-25T17:16:11Z",
"departure": "2021-10-25T17:38:41Z"
},
"load": [
0
],
"activities": [
{
"jobId": "Job_10",
"type": "delivery"
}
]
},
{
"location": {
"lat": 51.059188,
"lng": 13.540317
},
"time": {
"arrival": "2021-10-25T18:01:39Z",
"departure": "2021-10-25T18:01:39Z"
},
"load": [
0
],
"activities": [
{
"jobId": "arrival",
"type": "arrival"
}
]
}
],
"statistic": {
"cost": 115.84100000000001,
"distance": 44630,
"duration": 5527,
"times": {
"driving": 2827,
"serving": 2700,
"waiting": 0,
"break": 0
}
},
"shiftIndex": 2
}
]
}