複数シフトを含める
複雑なシナリオに対応する際には、運行管理に複数のシフト時間を組み合わせることで、車両ルートの管理と最適化をより効率的に行うことができます。
この機能により、1つの問題の中で日ごとに異なる車両のシフトやジョブの時間枠を個別に指定できます。たとえば、週を通じて配達や集荷を管理する必要があり、かつ運行管理には日ごとに異なるシフト時間を持つ車両が含まれる場合、これらの制約を1つの問題として指定できます。このアプローチは、日ごとに個別の問題を作成する手間を省けるだけでなく、車両の稼働率を最大化することで最適なツアー計画を立てることもできます。このアプローチは、異なる時間枠やシフトに柔軟にスケジューリングできるジョブに特に有効であり、リソースを効率的かつ効果的に活用できます。
問題に複数シフトを定義する
複数のシフトを使用する一般的なシナリオとしては、時間制限のない多数のジョブがあり、それらを担当する車両が限られているという状況が挙げられます。そのような場合、車両は1回のシフト内にすべてのジョブを完了できません。車両に複数のシフトを設定することで、ジョブを複数のシフトにわたって最も効率的にこなせるようになります。
注
- 各車両のシフトには、互いに重ならない開始時刻と終了時刻を設定する必要があります。
- 車両の異なるシフトは、ツアー内で
shiftIndexプロパティによって識別されます。車両IDは車両のすべてのシフトで同じままです。詳細については、「APIリファレンス」を参照してください。
シナリオ:時間制限のないジョブを処理する
時間制約のないジョブが15件、容量が10の車両が1台、1日のシフトはわずか3時間という状況を考えてみましょう。車両は1シフトですべてのジョブを完了できません。この問題に対処するには、車両に複数のシフトを指定します。これにより、その車両は数日をかけてジョブを完了できるようになります。
この場合、以下に示すように、車両のシフト時間に日付を追加し、必要なジョブをカバーするために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
問題
次の問題は、先ほどのサンプルシナリオに基づいて、車両に複数のシフトを指定する方法を示しています。
Click to expand/collapse the sample JSON
{
"fleet": {
"types": [
{
"id": "Vehicle_1",
"profile": "car",
"costs": {
"fixed": 10,
"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
]
}
]
}
}
]
}
}ソリューション
次の図は作成されるソリューションの内訳を視覚的に示したものです。
ソリューションが示すように、最適化アルゴリズムはジョブを車両の4つのシフトにわたって次のように配分しました。
- 10月23日、ジョブ5件
- 10月24日、ジョブ5件
- 10月25日、ジョブ1件
- 10月26日、ジョブ4件
このようにして、その車両はシフト時間枠を逸脱することなく、割り当てられたすべてのジョブを効率的に完了できました。
次のセクションには完全なソリューションJSONが含まれています。
Click to expand/collapse the sample JSON
{
"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"
}
],
"distance": 0
},
{
"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"
}
],
"distance": 22782
},
{
"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"
}
],
"distance": 24694
},
{
"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"
}
],
"distance": 27864
},
{
"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"
}
],
"distance": 31892
},
{
"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"
}
],
"distance": 35237
},
{
"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"
}
],
"distance": 56742
}
],
"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"
}
],
"distance": 0
},
{
"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"
}
],
"distance": 9299
},
{
"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"
}
],
"distance": 22650
},
{
"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"
}
],
"distance": 27842
},
{
"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"
}
],
"distance": 48395
},
{
"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"
}
],
"distance": 68746
}
],
"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"
}
],
"distance": 0
},
{
"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"
}
],
"distance": 18700
},
{
"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"
}
}
],
"distance": 22771
},
{
"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"
}
],
"distance": 25067
},
{
"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"
}
],
"distance": 44098
}
],
"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"
}
],
"distance": 0
},
{
"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"
}
],
"distance": 41711
},
{
"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"
}
],
"distance": 83583
}
],
"statistic": {
"cost": 191.548,
"distance": 83592,
"duration": 4788,
"times": {
"driving": 3438,
"serving": 1350,
"waiting": 0,
"break": 0
}
},
"shiftIndex": 2
}
]
}シナリオ:特定の時間制限があるジョブを処理する
特定の時間制限があるジョブに対しては、適切にスケジューリングされるように、時間枠を追加します。たとえば、あるジョブが10月23日にしか配達できない場合、その日の該当シフト時間内で、そのジョブに対して時間枠を設定することになります。
特定の時間制限がないジョブは、時間枠を指定せずに、どの日にでもスケジューリングできます。最適化アルゴリズムは、そのようなジョブを、全体のツアーにとって最も効率的な方法でスケジューリングします。
3日間にわたり、日ごとに異なるシフト時間で車両を使って10件のジョブに対応する必要があるという状況を考えてみましょう。これらのジョブのうち5件には特定の時間制限がありますが、残りの5件にはありません。
車両の稼働状況:
- シフト1:10月23日の8時~14時
- シフト2:10月24日の9時~15時
- シフト3:10月25日の10時~21時
時間枠を伴うジョブ:
Job 1:10月23日9時~12時に開始する必要がありますJob 2:10月23日12時~14時に開始する必要がありますJob 3:10月24日10時~12時に開始する必要がありますJob 4:10月25日11時~13時に開始する必要がありますJob 5:10月25日15時~18時に開始する必要があります
時間枠を伴わないジョブ:
Job 6~Job 10は任意の日に完了できます。
問題
次のセクションには、前述の制限を反映した問題JSONが含まれています。
Click to expand/collapse the sample JSON
{
"fleet": {
"types": [
{
"id": "Vehicle_1",
"profile": "car",
"costs": {
"fixed": 10,
"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-23T14: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-24T15:00: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-23T09:00:00Z",
"2021-10-23T12:00:00Z"
]
],
"location": {
"lat": 51.05238,
"lng": 13.74114
},
"duration": 1350
}
],
"demand": [
1
]
}
]
}
},
{
"id": "Job_2",
"tasks": {
"pickups": [
{
"places": [
{
"times": [
[
"2021-10-23T12:00:00Z",
"2021-10-23T14:00:00Z"
]
],
"location": {
"lat": 51.06099,
"lng": 13.75245
},
"duration": 1350
}
],
"demand": [
1
]
}
]
}
},
{
"id": "Job_3",
"tasks": {
"pickups": [
{
"places": [
{
"times": [
[
"2021-10-24T10:00:00Z",
"2021-10-24T12:00:00Z"
]
],
"location": {
"lat": 51.08511,
"lng": 13.76875
},
"duration": 1350
}
],
"demand": [
1
]
}
]
}
},
{
"id": "Job_4",
"tasks": {
"pickups": [
{
"places": [
{
"times": [
[
"2021-10-25T11:00:00Z",
"2021-10-25T13:00:00Z"
]
],
"location": {
"lat": 51.1323847,
"lng": 13.7779515
},
"duration": 1350
}
],
"demand": [
1
]
}
]
}
},
{
"id": "Job_5",
"tasks": {
"pickups": [
{
"places": [
{
"times": [
[
"2021-10-25T15:00:00Z",
"2021-10-25T18:00:00Z"
]
],
"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.06866,
"lng": 13.77273
},
"duration": 1350
}
],
"demand": [
1
]
}
]
}
}
]
}
}ソリューション
次の図は、得られたソリューションの内容を視覚的に示しており、時間枠によって制約されているジョブが強調されています。
最適化アルゴリズムは、時間制限のあるすべてのジョブを、それぞれ指定された時間枠内に適切にスケジューリングしました。時間枠が指定されていない残りのジョブは、ツアー全体の効率を最大化するために、シフト内で柔軟にスケジューリングされました。
次のセクションには、参照用としてソリューションのJSONが含まれています。
Click to expand/collapse the sample JSON
{
"statistic": {
"cost": 390.953,
"distance": 141352,
"duration": 26083,
"times": {
"driving": 8644,
"serving": 13500,
"waiting": 3939,
"stopping": 0,
"break": 0
}
},
"tours": [
{
"vehicleId": "Vehicle_1_1",
"typeId": "Vehicle_1",
"stops": [
{
"time": {
"arrival": "2021-10-24T09:00:00Z",
"departure": "2021-10-24T09:00:00Z"
},
"load": [
4
],
"activities": [
{
"jobId": "departure",
"type": "departure",
"location": {
"lat": 51.059188,
"lng": 13.540317
},
"time": {
"start": "2021-10-24T09:00:00Z",
"end": "2021-10-24T09:00:00Z"
}
}
],
"location": {
"lat": 51.059188,
"lng": 13.540317
},
"distance": 0
},
{
"time": {
"arrival": "2021-10-24T09:15:25Z",
"departure": "2021-10-24T10:22:55Z"
},
"load": [
1
],
"activities": [
{
"jobId": "Job_8",
"type": "delivery",
"location": {
"lat": 51.08588,
"lng": 13.72637
},
"time": {
"start": "2021-10-24T09:15:25Z",
"end": "2021-10-24T09:37:55Z"
}
},
{
"jobId": "Job_9",
"type": "delivery",
"location": {
"lat": 51.08588,
"lng": 13.72637
},
"time": {
"start": "2021-10-24T09:37:55Z",
"end": "2021-10-24T10:00:25Z"
}
},
{
"jobId": "Job_7",
"type": "delivery",
"location": {
"lat": 51.08588,
"lng": 13.72637
},
"time": {
"start": "2021-10-24T10:00:25Z",
"end": "2021-10-24T10:22:55Z"
}
}
],
"location": {
"lat": 51.08588,
"lng": 13.72637
},
"distance": 18695
},
{
"time": {
"arrival": "2021-10-24T10:31:12Z",
"departure": "2021-10-24T10:53:42Z"
},
"load": [
0
],
"activities": [
{
"jobId": "Job_10",
"type": "delivery",
"location": {
"lat": 51.06866,
"lng": 13.77273
},
"time": {
"start": "2021-10-24T10:31:12Z",
"end": "2021-10-24T10:53:42Z"
}
}
],
"location": {
"lat": 51.06866,
"lng": 13.77273
},
"distance": 23119
},
{
"time": {
"arrival": "2021-10-24T10:59:20Z",
"departure": "2021-10-24T11:21:50Z"
},
"load": [
1
],
"activities": [
{
"jobId": "Job_3",
"type": "pickup",
"location": {
"lat": 51.08511,
"lng": 13.76875
},
"time": {
"start": "2021-10-24T10:59:20Z",
"end": "2021-10-24T11:21:50Z"
}
}
],
"location": {
"lat": 51.08511,
"lng": 13.76875
},
"distance": 26548
},
{
"time": {
"arrival": "2021-10-24T11:44:40Z",
"departure": "2021-10-24T11:44:40Z"
},
"load": [
0
],
"activities": [
{
"jobId": "arrival",
"type": "arrival",
"location": {
"lat": 51.059188,
"lng": 13.540317
},
"time": {
"start": "2021-10-24T11:44:40Z",
"end": "2021-10-24T11:44:40Z"
}
}
],
"location": {
"lat": 51.059188,
"lng": 13.540317
},
"distance": 50767
}
],
"statistic": {
"cost": 141.174,
"distance": 50767,
"duration": 9880,
"times": {
"driving": 3130,
"serving": 6750,
"waiting": 0,
"stopping": 0,
"break": 0
}
},
"shiftIndex": 1
},
{
"vehicleId": "Vehicle_1_1",
"typeId": "Vehicle_1",
"stops": [
{
"time": {
"arrival": "2021-10-25T10:00:00Z",
"departure": "2021-10-25T12:40:29Z"
},
"load": [
1
],
"activities": [
{
"jobId": "departure",
"type": "departure",
"location": {
"lat": 51.059188,
"lng": 13.540317
},
"time": {
"start": "2021-10-25T10:00:00Z",
"end": "2021-10-25T12:40:29Z"
}
}
],
"location": {
"lat": 51.059188,
"lng": 13.540317
},
"distance": 0
},
{
"time": {
"arrival": "2021-10-25T13:00:00Z",
"departure": "2021-10-25T13:22:30Z"
},
"load": [
2
],
"activities": [
{
"jobId": "Job_4",
"type": "pickup",
"location": {
"lat": 51.1323847,
"lng": 13.7779515
},
"time": {
"start": "2021-10-25T13:00:00Z",
"end": "2021-10-25T13:22:30Z"
}
}
],
"location": {
"lat": 51.1323847,
"lng": 13.7779515
},
"distance": 23558
},
{
"time": {
"arrival": "2021-10-25T13:26:28Z",
"departure": "2021-10-25T13:48:58Z"
},
"load": [
1
],
"activities": [
{
"jobId": "Job_6",
"type": "delivery",
"location": {
"lat": 51.12308,
"lng": 13.76406
},
"time": {
"start": "2021-10-25T13:26:28Z",
"end": "2021-10-25T13:48:58Z"
}
}
],
"location": {
"lat": 51.12308,
"lng": 13.76406
},
"distance": 25366
},
{
"time": {
"arrival": "2021-10-25T13:54:21Z",
"departure": "2021-10-25T15:22:30Z"
},
"load": [
2
],
"activities": [
{
"jobId": "Job_5",
"type": "pickup",
"location": {
"lat": 51.11716,
"lng": 13.73054
},
"time": {
"start": "2021-10-25T15:00:00Z",
"end": "2021-10-25T15:22:30Z"
}
}
],
"location": {
"lat": 51.11716,
"lng": 13.73054
},
"distance": 29456
},
{
"time": {
"arrival": "2021-10-25T15:37:35Z",
"departure": "2021-10-25T15:37:35Z"
},
"load": [
0
],
"activities": [
{
"jobId": "arrival",
"type": "arrival",
"location": {
"lat": 51.059188,
"lng": 13.540317
},
"time": {
"start": "2021-10-25T15:37:35Z",
"end": "2021-10-25T15:37:35Z"
}
}
],
"location": {
"lat": 51.059188,
"lng": 13.540317
},
"distance": 49111
}
],
"statistic": {
"cost": 140.10000000000002,
"distance": 49111,
"duration": 10626,
"times": {
"driving": 2637,
"serving": 4050,
"waiting": 3939,
"stopping": 0,
"break": 0
}
},
"shiftIndex": 2
},
{
"vehicleId": "Vehicle_1_1",
"typeId": "Vehicle_1",
"stops": [
{
"time": {
"arrival": "2021-10-23T08:00:00Z",
"departure": "2021-10-23T11:10:08Z"
},
"load": [
0
],
"activities": [
{
"jobId": "departure",
"type": "departure",
"location": {
"lat": 51.059188,
"lng": 13.540317
},
"time": {
"start": "2021-10-23T08:00:00Z",
"end": "2021-10-23T11:10:08Z"
}
}
],
"location": {
"lat": 51.059188,
"lng": 13.540317
},
"distance": 0
},
{
"time": {
"arrival": "2021-10-23T11:31:57Z",
"departure": "2021-10-23T11:54:27Z"
},
"load": [
1
],
"activities": [
{
"jobId": "Job_1",
"type": "pickup",
"location": {
"lat": 51.05238,
"lng": 13.74114
},
"time": {
"start": "2021-10-23T11:31:57Z",
"end": "2021-10-23T11:54:27Z"
}
}
],
"location": {
"lat": 51.05238,
"lng": 13.74114
},
"distance": 19038
},
{
"time": {
"arrival": "2021-10-23T12:00:00Z",
"departure": "2021-10-23T12:22:30Z"
},
"load": [
2
],
"activities": [
{
"jobId": "Job_2",
"type": "pickup",
"location": {
"lat": 51.06099,
"lng": 13.75245
},
"time": {
"start": "2021-10-23T12:00:00Z",
"end": "2021-10-23T12:22:30Z"
}
}
],
"location": {
"lat": 51.06099,
"lng": 13.75245
},
"distance": 21408
},
{
"time": {
"arrival": "2021-10-23T12:43:05Z",
"departure": "2021-10-23T12:43:05Z"
},
"load": [
0
],
"activities": [
{
"jobId": "arrival",
"type": "arrival",
"location": {
"lat": 51.059188,
"lng": 13.540317
},
"time": {
"start": "2021-10-23T12:43:05Z",
"end": "2021-10-23T12:43:05Z"
}
}
],
"location": {
"lat": 51.059188,
"lng": 13.540317
},
"distance": 41474
}
],
"statistic": {
"cost": 109.679,
"distance": 41474,
"duration": 5577,
"times": {
"driving": 2877,
"serving": 2700,
"waiting": 0,
"stopping": 0,
"break": 0
}
},
"shiftIndex": 0
}
]
}次のステップ
- 時間枠の詳細については、「時間帯を使用してアクティビティの開始時間を制限する」を参照してください。
- VRP問題の詳細については、「問題」および「問題作成のベストプラクティスに従う」を参照してください。
26 日前の更新