廃棄物運行管理に合わせて効率的なルートを計画する
効率的な旅程計画は、廃棄物管理業界など、複数の業界に大きな利点をもたらします。廃棄物収集車両のルートを最適化すると、燃料消費が最小限に抑えられ、移動時間が短縮され、車両の摩耗が低減されます。
次のセクションでは、廃棄物管理運行管理に関連するツアー計画のユースケースに合わせた問題を取り上げ、対応するソリューションを提示します。
一般に、提示されるすべての問題は次の目的に沿ったものです。
- トラックはルート沿いのすべてのゴミ箱からゴミを収集する必要がある。トラックが満杯になると、指定された廃棄場所まで移動して荷降ろしする必要があります。
- 再積載場所として廃棄場所が追加される。廃棄物の処理には一定の時間がかかります。トラックが満杯になると、再積載場所に移動して荷降ろしをしてからゴミの収集を再開します。
- ルートの最後に、トラックは残ったゴミを降ろすために廃棄場所でシフトを終える必要がある。まとめると、トラックは空のまま集配センターを出発し、割り当てられたタスクを完了した後は空のまま戻る必要があります。
次の図はこれらの目的の概要を視覚的に示しています。
オプション1:シフト終了場所として廃棄場所を定義する
次の問題では再積載場所の座標がシフト終了の座標と一致します。これにより、廃棄物収集トラックは、ルートの最後に残りのゴミを廃棄してから、必要に応じて、空の状態で集配センターに向かうよう徹底されます。
シフト終了場所として廃棄場所をマークすると、ルートの最終部分 (廃棄場所から集配センターまで) が最適化されません。ルートの完了後の廃棄場所と集配センター間の移動を考慮して、車両のshift時間は8時間から7時間30分に短縮されます。廃棄場所から集配センターまでの最終移動は静的セグメントであり、最適化には含まれません。
さらに、サンプル問題には以下の仕様も含まれています。
- 運行管理は
3台の車両が利用可能な1つの車両タイプで構成されている。 - 各車両の積載量は
30である。 - ルートプランには
15件の集荷ジョブが含まれており、各需要は10に設定されている。 - この問題には複数の車両が関係する場合にルートの重複を最小限に抑えるという高度な目的が含まれている。
- 車両ルート検索プロファイルには自動車に比べてトラックの旋回半径が大きいことを考慮してUターンを回避する制約と、20km/時の速度上限が含まれている。
次のセクションには、問題のJSON全体が含まれています。
Click to expand/collapse the sample JSON
{
"configuration": {
"experimentalFeatures": ["advancedObjectives"]
},
"fleet": {
"types": [
{
"id": "garbage_truck",
"profile": "truck",
"costs": {
"fixed": 5,
"distance": 0,
"time": 0.005
},
"shifts": [
{
"start": {
"time": "2023-05-28T08:00:00Z",
"location": {
"lat": 52.50935,
"lng": 13.41997
}
},
"end": {
"time": "2023-05-28T15:30:00Z",
"location": {
"lat": 52.488148,
"lng": 13.369797
}
},
"reloads": [
{
"location": {
"lat": 52.488148,
"lng": 13.369797
},
"duration": 600
}
]
}
],
"capacity": [30],
"amount": 3
}
],
"profiles": [
{
"name": "truck",
"type": "truck",
"avoid": {
"features": ["uTurns"]
},
"options": {
"speedCap": 20
}
}
]
},
"plan": {
"jobs": [
{
"id": "Job_1",
"tasks": {
"pickups": [
{
"places": [
{
"location": {
"lat": 52.56182,
"lng": 13.497167
},
"duration": 600
}
],
"demand": [10]
}
]
}
},
{
"id": "Job_2",
"tasks": {
"pickups": [
{
"places": [
{
"location": {
"lat": 52.534553,
"lng": 13.519429
},
"duration": 600
}
],
"demand": [10]
}
]
}
},
{
"id": "Job_3",
"tasks": {
"pickups": [
{
"places": [
{
"location": {
"lat": 52.482275,
"lng": 13.502456
},
"duration": 600
}
],
"demand": [10]
}
]
}
},
{
"id": "Job_4",
"tasks": {
"pickups": [
{
"places": [
{
"location": {
"lat": 52.473537,
"lng": 13.505414
},
"duration": 600
}
],
"demand": [10]
}
]
}
},
{
"id": "Job_5",
"tasks": {
"pickups": [
{
"places": [
{
"location": {
"lat": 52.463341,
"lng": 13.49061
},
"duration": 600
}
],
"demand": [10]
}
]
}
},
{
"id": "Job_6",
"tasks": {
"pickups": [
{
"places": [
{
"location": {
"lat": 52.434003,
"lng": 13.466142
},
"duration": 600
}
],
"demand": [10]
}
]
}
},
{
"id": "Job_7",
"tasks": {
"pickups": [
{
"places": [
{
"location": {
"lat": 52.447476,
"lng": 13.433062
},
"duration": 600
}
],
"demand": [10]
}
]
}
},
{
"id": "Job_8",
"tasks": {
"pickups": [
{
"places": [
{
"location": {
"lat": 52.458414,
"lng": 13.392079
},
"duration": 600
}
],
"demand": [10]
}
]
}
},
{
"id": "Job_9",
"tasks": {
"pickups": [
{
"places": [
{
"location": {
"lat": 52.446407,
"lng": 13.36047
},
"duration": 600
}
],
"demand": [10]
}
]
}
},
{
"id": "Job_10",
"tasks": {
"pickups": [
{
"places": [
{
"location": {
"lat": 52.440807,
"lng": 13.351399
},
"duration": 600
}
],
"demand": [10]
}
]
}
},
{
"id": "Job_11",
"tasks": {
"pickups": [
{
"places": [
{
"location": {
"lat": 52.462867,
"lng": 13.342188
},
"duration": 600
}
],
"demand": [10]
}
]
}
},
{
"id": "Job_12",
"tasks": {
"pickups": [
{
"places": [
{
"location": {
"lat": 52.458232,
"lng": 13.338698
},
"duration": 600
}
],
"demand": [10]
}
]
}
},
{
"id": "Job_13",
"tasks": {
"pickups": [
{
"places": [
{
"location": {
"lat": 52.457629,
"lng": 13.323742
},
"duration": 600
}
],
"demand": [10]
}
]
}
},
{
"id": "Job_14",
"tasks": {
"pickups": [
{
"places": [
{
"location": {
"lat": 52.552057,
"lng": 13.349613
},
"duration": 600
}
],
"demand": [10]
}
]
}
},
{
"id": "Job_15",
"tasks": {
"pickups": [
{
"places": [
{
"location": {
"lat": 52.447377,
"lng": 13.363822
},
"duration": 600
}
],
"demand": [10]
}
]
}
}
]
},
"advancedObjectives": [
[
{
"type": "minimizeUnassigned"
}
],
[
{
"type": "minimizeCost"
}
],
[
{
"type": "minimizeTourOverlap"
}
]
]
}ソリューション
次のセクションでは、前の問題の完全なソリューションについて説明します。
Click to expand/collapse the sample JSON
{
"statistic": {
"cost": 131.365,
"distance": 115071,
"duration": 23273,
"times": {
"driving": 13073,
"serving": 10200,
"waiting": 0,
"stopping": 0,
"break": 0
}
},
"tours": [
{
"vehicleId": "garbage_truck_1",
"typeId": "garbage_truck",
"stops": [
{
"time": {
"arrival": "2023-05-28T08:00:00Z",
"departure": "2023-05-28T08:00:00Z"
},
"load": [0],
"activities": [
{
"jobId": "departure",
"type": "departure",
"location": {
"lat": 52.50935,
"lng": 13.41997
},
"time": {
"start": "2023-05-28T08:00:00Z",
"end": "2023-05-28T08:00:00Z"
}
}
],
"location": {
"lat": 52.50935,
"lng": 13.41997
},
"distance": 0
},
{
"time": {
"arrival": "2023-05-28T08:15:48Z",
"departure": "2023-05-28T08:25:48Z"
},
"load": [10],
"activities": [
{
"jobId": "Job_3",
"type": "pickup",
"location": {
"lat": 52.482275,
"lng": 13.502456
},
"time": {
"start": "2023-05-28T08:15:48Z",
"end": "2023-05-28T08:25:48Z"
}
}
],
"location": {
"lat": 52.482275,
"lng": 13.502456
},
"distance": 8425
},
{
"time": {
"arrival": "2023-05-28T08:27:48Z",
"departure": "2023-05-28T08:37:48Z"
},
"load": [20],
"activities": [
{
"jobId": "Job_4",
"type": "pickup",
"location": {
"lat": 52.473537,
"lng": 13.505414
},
"time": {
"start": "2023-05-28T08:27:48Z",
"end": "2023-05-28T08:37:48Z"
}
}
],
"location": {
"lat": 52.473537,
"lng": 13.505414
},
"distance": 9711
},
{
"time": {
"arrival": "2023-05-28T08:44:40Z",
"departure": "2023-05-28T08:54:40Z"
},
"load": [30],
"activities": [
{
"jobId": "Job_5",
"type": "pickup",
"location": {
"lat": 52.463341,
"lng": 13.49061
},
"time": {
"start": "2023-05-28T08:44:40Z",
"end": "2023-05-28T08:54:40Z"
}
}
],
"location": {
"lat": 52.463341,
"lng": 13.49061
},
"distance": 12652
},
{
"time": {
"arrival": "2023-05-28T09:12:49Z",
"departure": "2023-05-28T09:22:49Z"
},
"load": [0],
"activities": [
{
"jobId": "reload",
"type": "reload",
"location": {
"lat": 52.488148,
"lng": 13.369797
},
"time": {
"start": "2023-05-28T09:12:49Z",
"end": "2023-05-28T09:22:49Z"
}
}
],
"location": {
"lat": 52.488148,
"lng": 13.369797
},
"distance": 24881
},
{
"time": {
"arrival": "2023-05-28T09:33:03Z",
"departure": "2023-05-28T09:43:03Z"
},
"load": [10],
"activities": [
{
"jobId": "Job_11",
"type": "pickup",
"location": {
"lat": 52.462867,
"lng": 13.342188
},
"time": {
"start": "2023-05-28T09:33:03Z",
"end": "2023-05-28T09:43:03Z"
}
}
],
"location": {
"lat": 52.462867,
"lng": 13.342188
},
"distance": 30463
},
{
"time": {
"arrival": "2023-05-28T09:46:08Z",
"departure": "2023-05-28T09:56:08Z"
},
"load": [20],
"activities": [
{
"jobId": "Job_12",
"type": "pickup",
"location": {
"lat": 52.458232,
"lng": 13.338698
},
"time": {
"start": "2023-05-28T09:46:08Z",
"end": "2023-05-28T09:56:08Z"
}
}
],
"location": {
"lat": 52.458232,
"lng": 13.338698
},
"distance": 31674
},
{
"time": {
"arrival": "2023-05-28T10:00:35Z",
"departure": "2023-05-28T10:10:35Z"
},
"load": [30],
"activities": [
{
"jobId": "Job_13",
"type": "pickup",
"location": {
"lat": 52.457629,
"lng": 13.323742
},
"time": {
"start": "2023-05-28T10:00:35Z",
"end": "2023-05-28T10:10:35Z"
}
}
],
"location": {
"lat": 52.457629,
"lng": 13.323742
},
"distance": 33821
},
{
"time": {
"arrival": "2023-05-28T10:23:15Z",
"departure": "2023-05-28T10:23:15Z"
},
"load": [0],
"activities": [
{
"jobId": "arrival",
"type": "arrival",
"location": {
"lat": 52.488148,
"lng": 13.369797
},
"time": {
"start": "2023-05-28T10:23:15Z",
"end": "2023-05-28T10:23:15Z"
}
}
],
"location": {
"lat": 52.488148,
"lng": 13.369797
},
"distance": 40870
}
],
"statistic": {
"cost": 47.975,
"distance": 40870,
"duration": 8595,
"times": {
"driving": 4395,
"serving": 4200,
"waiting": 0,
"stopping": 0,
"break": 0
}
},
"shiftIndex": 0
},
{
"vehicleId": "garbage_truck_2",
"typeId": "garbage_truck",
"stops": [
{
"time": {
"arrival": "2023-05-28T08:00:00Z",
"departure": "2023-05-28T08:00:00Z"
},
"load": [0],
"activities": [
{
"jobId": "departure",
"type": "departure",
"location": {
"lat": 52.50935,
"lng": 13.41997
},
"time": {
"start": "2023-05-28T08:00:00Z",
"end": "2023-05-28T08:00:00Z"
}
}
],
"location": {
"lat": 52.50935,
"lng": 13.41997
},
"distance": 0
},
{
"time": {
"arrival": "2023-05-28T08:23:27Z",
"departure": "2023-05-28T08:33:27Z"
},
"load": [10],
"activities": [
{
"jobId": "Job_6",
"type": "pickup",
"location": {
"lat": 52.434003,
"lng": 13.466142
},
"time": {
"start": "2023-05-28T08:23:27Z",
"end": "2023-05-28T08:33:27Z"
}
}
],
"location": {
"lat": 52.434003,
"lng": 13.466142
},
"distance": 12952
},
{
"time": {
"arrival": "2023-05-28T08:39:51Z",
"departure": "2023-05-28T08:49:51Z"
},
"load": [20],
"activities": [
{
"jobId": "Job_7",
"type": "pickup",
"location": {
"lat": 52.447476,
"lng": 13.433062
},
"time": {
"start": "2023-05-28T08:39:51Z",
"end": "2023-05-28T08:49:51Z"
}
}
],
"location": {
"lat": 52.447476,
"lng": 13.433062
},
"distance": 16481
},
{
"time": {
"arrival": "2023-05-28T08:57:03Z",
"departure": "2023-05-28T09:07:03Z"
},
"load": [30],
"activities": [
{
"jobId": "Job_8",
"type": "pickup",
"location": {
"lat": 52.458414,
"lng": 13.392079
},
"time": {
"start": "2023-05-28T08:57:03Z",
"end": "2023-05-28T09:07:03Z"
}
}
],
"location": {
"lat": 52.458414,
"lng": 13.392079
},
"distance": 20505
},
{
"time": {
"arrival": "2023-05-28T09:18:07Z",
"departure": "2023-05-28T09:28:07Z"
},
"load": [0],
"activities": [
{
"jobId": "reload",
"type": "reload",
"location": {
"lat": 52.488148,
"lng": 13.369797
},
"time": {
"start": "2023-05-28T09:18:07Z",
"end": "2023-05-28T09:28:07Z"
}
}
],
"location": {
"lat": 52.488148,
"lng": 13.369797
},
"distance": 25910
},
{
"time": {
"arrival": "2023-05-28T09:40:27Z",
"departure": "2023-05-28T09:50:27Z"
},
"load": [10],
"activities": [
{
"jobId": "Job_10",
"type": "pickup",
"location": {
"lat": 52.440807,
"lng": 13.351399
},
"time": {
"start": "2023-05-28T09:40:27Z",
"end": "2023-05-28T09:50:27Z"
}
}
],
"location": {
"lat": 52.440807,
"lng": 13.351399
},
"distance": 32474
},
{
"time": {
"arrival": "2023-05-28T09:53:00Z",
"departure": "2023-05-28T10:03:00Z"
},
"load": [20],
"activities": [
{
"jobId": "Job_9",
"type": "pickup",
"location": {
"lat": 52.446407,
"lng": 13.36047
},
"time": {
"start": "2023-05-28T09:53:00Z",
"end": "2023-05-28T10:03:00Z"
}
}
],
"location": {
"lat": 52.446407,
"lng": 13.36047
},
"distance": 33568
},
{
"time": {
"arrival": "2023-05-28T10:05:57Z",
"departure": "2023-05-28T10:15:57Z"
},
"load": [30],
"activities": [
{
"jobId": "Job_15",
"type": "pickup",
"location": {
"lat": 52.447377,
"lng": 13.363822
},
"time": {
"start": "2023-05-28T10:05:57Z",
"end": "2023-05-28T10:15:57Z"
}
}
],
"location": {
"lat": 52.447377,
"lng": 13.363822
},
"distance": 34587
},
{
"time": {
"arrival": "2023-05-28T10:26:54Z",
"departure": "2023-05-28T10:26:54Z"
},
"load": [0],
"activities": [
{
"jobId": "arrival",
"type": "arrival",
"location": {
"lat": 52.488148,
"lng": 13.369797
},
"time": {
"start": "2023-05-28T10:26:54Z",
"end": "2023-05-28T10:26:54Z"
}
}
],
"location": {
"lat": 52.488148,
"lng": 13.369797
},
"distance": 40083
}
],
"statistic": {
"cost": 49.07,
"distance": 40083,
"duration": 8814,
"times": {
"driving": 4614,
"serving": 4200,
"waiting": 0,
"stopping": 0,
"break": 0
}
},
"shiftIndex": 0
},
{
"vehicleId": "garbage_truck_3",
"typeId": "garbage_truck",
"stops": [
{
"time": {
"arrival": "2023-05-28T08:00:00Z",
"departure": "2023-05-28T08:00:00Z"
},
"load": [0],
"activities": [
{
"jobId": "departure",
"type": "departure",
"location": {
"lat": 52.50935,
"lng": 13.41997
},
"time": {
"start": "2023-05-28T08:00:00Z",
"end": "2023-05-28T08:00:00Z"
}
}
],
"location": {
"lat": 52.50935,
"lng": 13.41997
},
"distance": 0
},
{
"time": {
"arrival": "2023-05-28T08:15:10Z",
"departure": "2023-05-28T08:25:10Z"
},
"load": [10],
"activities": [
{
"jobId": "Job_2",
"type": "pickup",
"location": {
"lat": 52.534553,
"lng": 13.519429
},
"time": {
"start": "2023-05-28T08:15:10Z",
"end": "2023-05-28T08:25:10Z"
}
}
],
"location": {
"lat": 52.534553,
"lng": 13.519429
},
"distance": 8613
},
{
"time": {
"arrival": "2023-05-28T08:37:10Z",
"departure": "2023-05-28T08:47:10Z"
},
"load": [20],
"activities": [
{
"jobId": "Job_1",
"type": "pickup",
"location": {
"lat": 52.56182,
"lng": 13.497167
},
"time": {
"start": "2023-05-28T08:37:10Z",
"end": "2023-05-28T08:47:10Z"
}
}
],
"location": {
"lat": 52.56182,
"lng": 13.497167
},
"distance": 13256
},
{
"time": {
"arrival": "2023-05-28T09:09:10Z",
"departure": "2023-05-28T09:19:10Z"
},
"load": [30],
"activities": [
{
"jobId": "Job_14",
"type": "pickup",
"location": {
"lat": 52.552057,
"lng": 13.349613
},
"time": {
"start": "2023-05-28T09:09:10Z",
"end": "2023-05-28T09:19:10Z"
}
}
],
"location": {
"lat": 52.552057,
"lng": 13.349613
},
"distance": 25022
},
{
"time": {
"arrival": "2023-05-28T09:37:44Z",
"departure": "2023-05-28T09:37:44Z"
},
"load": [0],
"activities": [
{
"jobId": "arrival",
"type": "arrival",
"location": {
"lat": 52.488148,
"lng": 13.369797
},
"time": {
"start": "2023-05-28T09:37:44Z",
"end": "2023-05-28T09:37:44Z"
}
}
],
"location": {
"lat": 52.488148,
"lng": 13.369797
},
"distance": 34118
}
],
"statistic": {
"cost": 34.32,
"distance": 34118,
"duration": 5864,
"times": {
"driving": 4064,
"serving": 1800,
"waiting": 0,
"stopping": 0,
"break": 0
}
},
"shiftIndex": 0
}
]
}ソリューションが示すように、割り当てられたすべてのジョブが最適化により完了し、3台の車両 (garbage_truck_1、garbage_truck_2、garbage_truck_3) に分散されました。次の図はルートの内訳を視覚的に示したものです。
このルートではgarbage_truck_1 (緑色でマーク) とgarbage_truck_2 (青色でマーク) の両方で7件のタスクを完了しました。これらのタスクには廃棄場所での1回の再積載が含まれていました。再積載後のゴミ収集の後に、両方のトラックは廃棄場所に戻って荷降ろしをしてルートを完了しました。
オプション2:再積載のために複数の廃棄場所を指定する
Here Tour Planing APIを使用すると、シフト内で最大5つの再積載場所を定義できます。reloadアクティビティのために複数の潜在的な廃棄場所を許可することにより、トラックが廃棄物の収集により多くの時間を費やせるようになります。
トラックは最も近い廃棄場所まで移動できるため、遠方になる可能性のある1つの場所に戻る場合に比べて移動時間が短縮されます。このアプローチは、いずれかの場所でのボトルネックや過積載を防ぐためにも効果的です。
次の問題には4つの再積載場所が含まれています。そのうちの1つはシフトが終了する場所としても指定されています。前のオプションと同様に、廃棄場所から集配センターまでの最終移動は静的セグメントであり、最適化には含まれません。
Click to expand/collapse the sample JSON
{
"configuration": {
"experimentalFeatures": ["advancedObjectives"]
},
"fleet": {
"types": [
{
"id": "garbage_truck",
"profile": "truck",
"costs": {
"fixed": 5,
"distance": 0,
"time": 0.005
},
"shifts": [
{
"start": {
"time": "2023-05-28T08:00:00Z",
"location": {
"lat": 52.50935,
"lng": 13.41997
}
},
"end": {
"time": "2023-05-28T15:30:00Z",
"location": {
"lat": 52.488148,
"lng": 13.369797
}
},
"reloads": [
{
"location": {
"lat": 52.559049,
"lng": 13.533147
},
"duration": 600
},
{
"location": {
"lat": 52.488148,
"lng": 13.369797
},
"duration": 600
},
{
"location": {
"lat": 52.453058,
"lng": 13.429382
},
"duration": 600
},
{
"location": {
"lat": 52.528158,
"lng": 13.313056
},
"duration": 600
}
]
}
],
"capacity": [30],
"amount": 3
}
],
"profiles": [
{
"name": "truck",
"type": "truck",
"avoid": {
"features": ["uTurns"]
},
"options": {
"speedCap": 20
}
}
]
},
"plan": {
"jobs": [
{
"id": "Job_1",
"tasks": {
"pickups": [
{
"places": [
{
"location": {
"lat": 52.56182,
"lng": 13.497167
},
"duration": 600
}
],
"demand": [10]
}
]
}
},
{
"id": "Job_2",
"tasks": {
"pickups": [
{
"places": [
{
"location": {
"lat": 52.534553,
"lng": 13.519429
},
"duration": 600
}
],
"demand": [10]
}
]
}
},
{
"id": "Job_3",
"tasks": {
"pickups": [
{
"places": [
{
"location": {
"lat": 52.482275,
"lng": 13.502456
},
"duration": 600
}
],
"demand": [10]
}
]
}
},
{
"id": "Job_4",
"tasks": {
"pickups": [
{
"places": [
{
"location": {
"lat": 52.473537,
"lng": 13.505414
},
"duration": 600
}
],
"demand": [10]
}
]
}
},
{
"id": "Job_5",
"tasks": {
"pickups": [
{
"places": [
{
"location": {
"lat": 52.463341,
"lng": 13.49061
},
"duration": 600
}
],
"demand": [10]
}
]
}
},
{
"id": "Job_6",
"tasks": {
"pickups": [
{
"places": [
{
"location": {
"lat": 52.434003,
"lng": 13.466142
},
"duration": 600
}
],
"demand": [10]
}
]
}
},
{
"id": "Job_7",
"tasks": {
"pickups": [
{
"places": [
{
"location": {
"lat": 52.447476,
"lng": 13.433062
},
"duration": 600
}
],
"demand": [10]
}
]
}
},
{
"id": "Job_8",
"tasks": {
"pickups": [
{
"places": [
{
"location": {
"lat": 52.458414,
"lng": 13.392079
},
"duration": 600
}
],
"demand": [10]
}
]
}
},
{
"id": "Job_9",
"tasks": {
"pickups": [
{
"places": [
{
"location": {
"lat": 52.446407,
"lng": 13.36047
},
"duration": 600
}
],
"demand": [10]
}
]
}
},
{
"id": "Job_10",
"tasks": {
"pickups": [
{
"places": [
{
"location": {
"lat": 52.440807,
"lng": 13.351399
},
"duration": 600
}
],
"demand": [10]
}
]
}
},
{
"id": "Job_11",
"tasks": {
"pickups": [
{
"places": [
{
"location": {
"lat": 52.462867,
"lng": 13.342188
},
"duration": 600
}
],
"demand": [10]
}
]
}
},
{
"id": "Job_12",
"tasks": {
"pickups": [
{
"places": [
{
"location": {
"lat": 52.458232,
"lng": 13.338698
},
"duration": 600
}
],
"demand": [10]
}
]
}
},
{
"id": "Job_13",
"tasks": {
"pickups": [
{
"places": [
{
"location": {
"lat": 52.457629,
"lng": 13.323742
},
"duration": 600
}
],
"demand": [10]
}
]
}
},
{
"id": "Job_14",
"tasks": {
"pickups": [
{
"places": [
{
"location": {
"lat": 52.552057,
"lng": 13.349613
},
"duration": 600
}
],
"demand": [10]
}
]
}
},
{
"id": "Job_15",
"tasks": {
"pickups": [
{
"places": [
{
"location": {
"lat": 52.447377,
"lng": 13.363822
},
"duration": 600
}
],
"demand": [10]
}
]
}
}
]
},
"advancedObjectives": [
[
{
"type": "minimizeUnassigned"
}
],
[
{
"type": "minimizeCost"
}
],
[
{
"type": "minimizeTourOverlap"
}
]
]
}ソリューション
次のセクションでは、前の問題の完全なソリューションについて説明します。
Click to expand/collapse the sample JSON
{
"statistic": {
"cost": 120.435,
"distance": 108253,
"duration": 23087,
"times": {
"driving": 11687,
"serving": 11400,
"waiting": 0,
"stopping": 0,
"break": 0
}
},
"tours": [
{
"vehicleId": "garbage_truck_3",
"typeId": "garbage_truck",
"stops": [
{
"time": {
"arrival": "2023-05-28T08:00:00Z",
"departure": "2023-05-28T08:00:00Z"
},
"load": [0],
"activities": [
{
"jobId": "departure",
"type": "departure",
"location": {
"lat": 52.50935,
"lng": 13.41997
},
"time": {
"start": "2023-05-28T08:00:00Z",
"end": "2023-05-28T08:00:00Z"
}
}
],
"location": {
"lat": 52.50935,
"lng": 13.41997
},
"distance": 0
},
{
"time": {
"arrival": "2023-05-28T08:20:00Z",
"departure": "2023-05-28T08:30:00Z"
},
"load": [10],
"activities": [
{
"jobId": "Job_11",
"type": "pickup",
"location": {
"lat": 52.462867,
"lng": 13.342188
},
"time": {
"start": "2023-05-28T08:20:00Z",
"end": "2023-05-28T08:30:00Z"
}
}
],
"location": {
"lat": 52.462867,
"lng": 13.342188
},
"distance": 10938
},
{
"time": {
"arrival": "2023-05-28T08:33:05Z",
"departure": "2023-05-28T08:43:05Z"
},
"load": [20],
"activities": [
{
"jobId": "Job_12",
"type": "pickup",
"location": {
"lat": 52.458232,
"lng": 13.338698
},
"time": {
"start": "2023-05-28T08:33:05Z",
"end": "2023-05-28T08:43:05Z"
}
}
],
"location": {
"lat": 52.458232,
"lng": 13.338698
},
"distance": 12149
},
{
"time": {
"arrival": "2023-05-28T08:47:32Z",
"departure": "2023-05-28T08:57:32Z"
},
"load": [30],
"activities": [
{
"jobId": "Job_13",
"type": "pickup",
"location": {
"lat": 52.457629,
"lng": 13.323742
},
"time": {
"start": "2023-05-28T08:47:32Z",
"end": "2023-05-28T08:57:32Z"
}
}
],
"location": {
"lat": 52.457629,
"lng": 13.323742
},
"distance": 14296
},
{
"time": {
"arrival": "2023-05-28T09:16:28Z",
"departure": "2023-05-28T09:26:28Z"
},
"load": [0],
"activities": [
{
"jobId": "reload",
"type": "reload",
"location": {
"lat": 52.528158,
"lng": 13.313056
},
"time": {
"start": "2023-05-28T09:16:28Z",
"end": "2023-05-28T09:26:28Z"
}
}
],
"location": {
"lat": 52.528158,
"lng": 13.313056
},
"distance": 30908
},
{
"time": {
"arrival": "2023-05-28T09:35:09Z",
"departure": "2023-05-28T09:45:09Z"
},
"load": [10],
"activities": [
{
"jobId": "Job_14",
"type": "pickup",
"location": {
"lat": 52.552057,
"lng": 13.349613
},
"time": {
"start": "2023-05-28T09:35:09Z",
"end": "2023-05-28T09:45:09Z"
}
}
],
"location": {
"lat": 52.552057,
"lng": 13.349613
},
"distance": 35313
},
{
"time": {
"arrival": "2023-05-28T10:10:51Z",
"departure": "2023-05-28T10:20:51Z"
},
"load": [20],
"activities": [
{
"jobId": "Job_1",
"type": "pickup",
"location": {
"lat": 52.56182,
"lng": 13.497167
},
"time": {
"start": "2023-05-28T10:10:51Z",
"end": "2023-05-28T10:20:51Z"
}
}
],
"location": {
"lat": 52.56182,
"lng": 13.497167
},
"distance": 46860
},
{
"time": {
"arrival": "2023-05-28T10:28:10Z",
"departure": "2023-05-28T10:38:10Z"
},
"load": [30],
"activities": [
{
"jobId": "Job_2",
"type": "pickup",
"location": {
"lat": 52.534553,
"lng": 13.519429
},
"time": {
"start": "2023-05-28T10:28:10Z",
"end": "2023-05-28T10:38:10Z"
}
}
],
"location": {
"lat": 52.534553,
"lng": 13.519429
},
"distance": 50609
},
{
"time": {
"arrival": "2023-05-28T10:45:14Z",
"departure": "2023-05-28T10:55:14Z"
},
"load": [0],
"activities": [
{
"jobId": "reload",
"type": "reload",
"location": {
"lat": 52.559049,
"lng": 13.533147
},
"time": {
"start": "2023-05-28T10:45:14Z",
"end": "2023-05-28T10:55:14Z"
}
}
],
"location": {
"lat": 52.559049,
"lng": 13.533147
},
"distance": 54905
},
{
"time": {
"arrival": "2023-05-28T11:15:13Z",
"departure": "2023-05-28T11:25:13Z"
},
"load": [10],
"activities": [
{
"jobId": "Job_3",
"type": "pickup",
"location": {
"lat": 52.482275,
"lng": 13.502456
},
"time": {
"start": "2023-05-28T11:15:13Z",
"end": "2023-05-28T11:25:13Z"
}
}
],
"location": {
"lat": 52.482275,
"lng": 13.502456
},
"distance": 67409
},
{
"time": {
"arrival": "2023-05-28T11:27:13Z",
"departure": "2023-05-28T11:37:13Z"
},
"load": [20],
"activities": [
{
"jobId": "Job_4",
"type": "pickup",
"location": {
"lat": 52.473537,
"lng": 13.505414
},
"time": {
"start": "2023-05-28T11:27:13Z",
"end": "2023-05-28T11:37:13Z"
}
}
],
"location": {
"lat": 52.473537,
"lng": 13.505414
},
"distance": 68695
},
{
"time": {
"arrival": "2023-05-28T11:44:05Z",
"departure": "2023-05-28T11:54:05Z"
},
"load": [30],
"activities": [
{
"jobId": "Job_5",
"type": "pickup",
"location": {
"lat": 52.463341,
"lng": 13.49061
},
"time": {
"start": "2023-05-28T11:44:05Z",
"end": "2023-05-28T11:54:05Z"
}
}
],
"location": {
"lat": 52.463341,
"lng": 13.49061
},
"distance": 71636
},
{
"time": {
"arrival": "2023-05-28T12:03:34Z",
"departure": "2023-05-28T12:13:34Z"
},
"load": [0],
"activities": [
{
"jobId": "reload",
"type": "reload",
"location": {
"lat": 52.453058,
"lng": 13.429382
},
"time": {
"start": "2023-05-28T12:03:34Z",
"end": "2023-05-28T12:13:34Z"
}
}
],
"location": {
"lat": 52.453058,
"lng": 13.429382
},
"distance": 76873
},
{
"time": {
"arrival": "2023-05-28T12:21:20Z",
"departure": "2023-05-28T12:31:20Z"
},
"load": [10],
"activities": [
{
"jobId": "Job_6",
"type": "pickup",
"location": {
"lat": 52.434003,
"lng": 13.466142
},
"time": {
"start": "2023-05-28T12:21:20Z",
"end": "2023-05-28T12:31:20Z"
}
}
],
"location": {
"lat": 52.434003,
"lng": 13.466142
},
"distance": 81122
},
{
"time": {
"arrival": "2023-05-28T12:37:44Z",
"departure": "2023-05-28T12:47:44Z"
},
"load": [20],
"activities": [
{
"jobId": "Job_7",
"type": "pickup",
"location": {
"lat": 52.447476,
"lng": 13.433062
},
"time": {
"start": "2023-05-28T12:37:44Z",
"end": "2023-05-28T12:47:44Z"
}
}
],
"location": {
"lat": 52.447476,
"lng": 13.433062
},
"distance": 84651
},
{
"time": {
"arrival": "2023-05-28T12:54:56Z",
"departure": "2023-05-28T13:04:56Z"
},
"load": [30],
"activities": [
{
"jobId": "Job_8",
"type": "pickup",
"location": {
"lat": 52.458414,
"lng": 13.392079
},
"time": {
"start": "2023-05-28T12:54:56Z",
"end": "2023-05-28T13:04:56Z"
}
}
],
"location": {
"lat": 52.458414,
"lng": 13.392079
},
"distance": 88675
},
{
"time": {
"arrival": "2023-05-28T13:16:00Z",
"departure": "2023-05-28T13:26:00Z"
},
"load": [0],
"activities": [
{
"jobId": "reload",
"type": "reload",
"location": {
"lat": 52.488148,
"lng": 13.369797
},
"time": {
"start": "2023-05-28T13:16:00Z",
"end": "2023-05-28T13:26:00Z"
}
}
],
"location": {
"lat": 52.488148,
"lng": 13.369797
},
"distance": 94080
},
{
"time": {
"arrival": "2023-05-28T13:38:20Z",
"departure": "2023-05-28T13:48:20Z"
},
"load": [10],
"activities": [
{
"jobId": "Job_10",
"type": "pickup",
"location": {
"lat": 52.440807,
"lng": 13.351399
},
"time": {
"start": "2023-05-28T13:38:20Z",
"end": "2023-05-28T13:48:20Z"
}
}
],
"location": {
"lat": 52.440807,
"lng": 13.351399
},
"distance": 100644
},
{
"time": {
"arrival": "2023-05-28T13:50:53Z",
"departure": "2023-05-28T14:00:53Z"
},
"load": [20],
"activities": [
{
"jobId": "Job_9",
"type": "pickup",
"location": {
"lat": 52.446407,
"lng": 13.36047
},
"time": {
"start": "2023-05-28T13:50:53Z",
"end": "2023-05-28T14:00:53Z"
}
}
],
"location": {
"lat": 52.446407,
"lng": 13.36047
},
"distance": 101738
},
{
"time": {
"arrival": "2023-05-28T14:03:50Z",
"departure": "2023-05-28T14:13:50Z"
},
"load": [30],
"activities": [
{
"jobId": "Job_15",
"type": "pickup",
"location": {
"lat": 52.447377,
"lng": 13.363822
},
"time": {
"start": "2023-05-28T14:03:50Z",
"end": "2023-05-28T14:13:50Z"
}
}
],
"location": {
"lat": 52.447377,
"lng": 13.363822
},
"distance": 102757
},
{
"time": {
"arrival": "2023-05-28T14:24:47Z",
"departure": "2023-05-28T14:24:47Z"
},
"load": [0],
"activities": [
{
"jobId": "arrival",
"type": "arrival",
"location": {
"lat": 52.488148,
"lng": 13.369797
},
"time": {
"start": "2023-05-28T14:24:47Z",
"end": "2023-05-28T14:24:47Z"
}
}
],
"location": {
"lat": 52.488148,
"lng": 13.369797
},
"distance": 108253
}
],
"statistic": {
"cost": 120.435,
"distance": 108253,
"duration": 23087,
"times": {
"driving": 11687,
"serving": 11400,
"waiting": 0,
"stopping": 0,
"break": 0
}
},
"shiftIndex": 0
}
]
}この場合、最適化アルゴリズムはルートを完了するための最も効率的な方法として、4回の再積載などすべてのジョブを遂行する1台の車両を指定しました。次の図はルートの内訳を視覚的に示したものです。
最適化アルゴリズムによって割り当てられた車両は、最大容量に達するまで廃棄物を収集してルートを完了します。車両は途中にある利用可能な場所をすべて利用しながら、最も近い廃棄場所で荷降ろしをします。これにより、廃棄場所への往復の運転時間が短縮され、ルートの効率が向上します。
オプション3:位置とスキルの特徴を組み合わせて廃棄場所を指定する
ユースケースの目的を達成するもう1つの方法は、positionとskills機能を使用することです。まず、運行管理の各車両タイプにskills値を割り当てます。次に、skills値に一致する各車両タイプに対し配達ジョブを作成します。このジョブが常にルートの最後になるよう (集配センターに戻る前に荷台が空になるよう) 徹底するには、ジョブのpositionをlastに設定します。
注
この方法を使用すると、車両が空のときの最終廃棄場所から集配センターまでのルートがソリューションに含まれます。
この問題では、各車両タイプ (スキル"1"、"2"、"3") に、集配センターに戻る前に廃棄場所への最終訪問を表すジョブが割り当てられます。これらのジョブは同じ場所を共有し、positionパラメーターがlastに設定されます。reloads場所は廃棄場所と一致しているため、必要に応じて複数回訪問して荷降ろしをすることができます。
次のセクションには、問題のJSON全体が含まれています。
Click to expand/collapse the sample JSON
{
"fleet": {
"types": [
{
"id": "garbage_truck_1",
"profile": "truck",
"costs": {
"fixed": 5,
"distance": 0,
"time": 0.005
},
"shifts": [
{
"start": {
"time": "2023-05-28T08:00:00Z",
"location": {
"lat": 52.50935,
"lng": 13.41997
}
},
"end": {
"time": "2023-05-28T16:00:00Z",
"location": {
"lat": 52.50935,
"lng": 13.41997
}
},
"reloads": [
{
"location": {
"lat": 52.559049,
"lng": 13.533147
},
"duration": 600
}
]
}
],
"capacity": [30],
"skills": ["1"],
"amount": 1
},
{
"id": "garbage_truck_2",
"profile": "truck",
"costs": {
"fixed": 5,
"distance": 0,
"time": 0.005
},
"shifts": [
{
"start": {
"time": "2023-05-28T08:00:00Z",
"location": {
"lat": 52.50935,
"lng": 13.41997
}
},
"end": {
"time": "2023-05-28T15:30:00Z",
"location": {
"lat": 52.50935,
"lng": 13.41997
}
},
"reloads": [
{
"location": {
"lat": 52.559049,
"lng": 13.533147
},
"duration": 600
}
]
}
],
"capacity": [30],
"skills": ["2"],
"amount": 1
},
{
"id": "garbage_truck_3",
"profile": "truck",
"costs": {
"fixed": 5,
"distance": 0,
"time": 0.005
},
"shifts": [
{
"start": {
"time": "2023-05-28T08:00:00Z",
"location": {
"lat": 52.50935,
"lng": 13.41997
}
},
"end": {
"time": "2023-05-28T15:30:00Z",
"location": {
"lat": 52.50935,
"lng": 13.41997
}
},
"reloads": [
{
"location": {
"lat": 52.559049,
"lng": 13.533147
},
"duration": 600
}
]
}
],
"capacity": [30],
"skills": ["3"],
"amount": 1
}
],
"profiles": [
{
"name": "truck",
"type": "truck",
"avoid": {
"features": ["uTurns"]
},
"options": {
"speedCap": 20
}
}
]
},
"plan": {
"jobs": [
{
"id": "Job_1",
"tasks": {
"pickups": [
{
"places": [
{
"location": {
"lat": 52.56182,
"lng": 13.497167
},
"duration": 600
}
],
"demand": [10]
}
]
}
},
{
"id": "Job_2",
"tasks": {
"pickups": [
{
"places": [
{
"location": {
"lat": 52.534553,
"lng": 13.519429
},
"duration": 600
}
],
"demand": [10]
}
]
}
},
{
"id": "Job_3",
"tasks": {
"pickups": [
{
"places": [
{
"location": {
"lat": 52.482275,
"lng": 13.502456
},
"duration": 600
}
],
"demand": [10]
}
]
}
},
{
"id": "Job_4",
"tasks": {
"pickups": [
{
"places": [
{
"location": {
"lat": 52.473537,
"lng": 13.505414
},
"duration": 600
}
],
"demand": [10]
}
]
}
},
{
"id": "Job_5",
"tasks": {
"pickups": [
{
"places": [
{
"location": {
"lat": 52.463341,
"lng": 13.49061
},
"duration": 600
}
],
"demand": [10]
}
]
}
},
{
"id": "Job_6",
"tasks": {
"pickups": [
{
"places": [
{
"location": {
"lat": 52.434003,
"lng": 13.466142
},
"duration": 600
}
],
"demand": [10]
}
]
}
},
{
"id": "Job_7",
"tasks": {
"pickups": [
{
"places": [
{
"location": {
"lat": 52.447476,
"lng": 13.433062
},
"duration": 600
}
],
"demand": [10]
}
]
}
},
{
"id": "Job_8",
"tasks": {
"pickups": [
{
"places": [
{
"location": {
"lat": 52.458414,
"lng": 13.392079
},
"duration": 600
}
],
"demand": [10]
}
]
}
},
{
"id": "Job_9",
"tasks": {
"pickups": [
{
"places": [
{
"location": {
"lat": 52.446407,
"lng": 13.36047
},
"duration": 600
}
],
"demand": [10]
}
]
}
},
{
"id": "Job_10",
"tasks": {
"pickups": [
{
"places": [
{
"location": {
"lat": 52.440807,
"lng": 13.351399
},
"duration": 600
}
],
"demand": [10]
}
]
}
},
{
"id": "Job_11",
"tasks": {
"pickups": [
{
"places": [
{
"location": {
"lat": 52.462867,
"lng": 13.342188
},
"duration": 600
}
],
"demand": [10]
}
]
}
},
{
"id": "Job_12",
"tasks": {
"pickups": [
{
"places": [
{
"location": {
"lat": 52.458232,
"lng": 13.338698
},
"duration": 600
}
],
"demand": [10]
}
]
}
},
{
"id": "Job_13",
"tasks": {
"pickups": [
{
"places": [
{
"location": {
"lat": 52.457629,
"lng": 13.323742
},
"duration": 600
}
],
"demand": [10]
}
]
}
},
{
"id": "Job_14",
"tasks": {
"pickups": [
{
"places": [
{
"location": {
"lat": 52.552057,
"lng": 13.349613
},
"duration": 600
}
],
"demand": [10]
}
]
}
},
{
"id": "Job_15",
"tasks": {
"pickups": [
{
"places": [
{
"location": {
"lat": 52.447377,
"lng": 13.363822
},
"duration": 600
}
],
"demand": [10]
}
]
}
},
{
"id": "Dumping_Site_1",
"skills": ["1"],
"tasks": {
"deliveries": [
{
"places": [
{
"location": {
"lat": 52.559049,
"lng": 13.533147
},
"duration": 600
}
],
"demand": [0],
"position": {
"type": "last"
}
}
]
}
},
{
"id": "Dumping_Site_2",
"skills": ["2"],
"tasks": {
"deliveries": [
{
"places": [
{
"location": {
"lat": 52.559049,
"lng": 13.533147
},
"duration": 600
}
],
"demand": [0],
"position": {
"type": "last"
}
}
]
}
},
{
"id": "Dumping_Site_3",
"skills": ["3"],
"tasks": {
"deliveries": [
{
"places": [
{
"location": {
"lat": 52.559049,
"lng": 13.533147
},
"duration": 600
}
],
"demand": [0],
"position": {
"type": "last"
}
}
]
}
}
]
},
"advancedObjectives": [
[
{
"type": "minimizeUnassigned"
}
],
[
{
"type": "minimizeTourOverlap"
}
],
[
{
"type": "optimizeTaskPosition"
}
],
[
{
"type": "minimizeCost"
}
]
]
}ソリューション
次のセクションでは、前の問題の完全なソリューションについて説明します。
Click to expand/collapse the sample JSON
{
"statistic": {
"cost": 191.005,
"distance": 219765,
"duration": 35201,
"times": {
"driving": 23201,
"serving": 12000,
"waiting": 0,
"stopping": 0,
"break": 0
}
},
"tours": [
{
"vehicleId": "garbage_truck_1_1",
"typeId": "garbage_truck_1",
"stops": [
{
"time": {
"arrival": "2023-05-28T08:00:00Z",
"departure": "2023-05-28T08:00:00Z"
},
"load": [0],
"activities": [
{
"jobId": "departure",
"type": "departure",
"location": {
"lat": 52.50935,
"lng": 13.41997
},
"time": {
"start": "2023-05-28T08:00:00Z",
"end": "2023-05-28T08:00:00Z"
}
}
],
"location": {
"lat": 52.50935,
"lng": 13.41997
},
"distance": 0
},
{
"time": {
"arrival": "2023-05-28T08:20:26Z",
"departure": "2023-05-28T08:30:26Z"
},
"load": [10],
"activities": [
{
"jobId": "Job_14",
"type": "pickup",
"location": {
"lat": 52.552057,
"lng": 13.349613
},
"time": {
"start": "2023-05-28T08:20:26Z",
"end": "2023-05-28T08:30:26Z"
}
}
],
"location": {
"lat": 52.552057,
"lng": 13.349613
},
"distance": 9830
},
{
"time": {
"arrival": "2023-05-28T08:56:08Z",
"departure": "2023-05-28T09:06:08Z"
},
"load": [20],
"activities": [
{
"jobId": "Job_1",
"type": "pickup",
"location": {
"lat": 52.56182,
"lng": 13.497167
},
"time": {
"start": "2023-05-28T08:56:08Z",
"end": "2023-05-28T09:06:08Z"
}
}
],
"location": {
"lat": 52.56182,
"lng": 13.497167
},
"distance": 21377
},
{
"time": {
"arrival": "2023-05-28T09:13:27Z",
"departure": "2023-05-28T09:23:27Z"
},
"load": [30],
"activities": [
{
"jobId": "Job_2",
"type": "pickup",
"location": {
"lat": 52.534553,
"lng": 13.519429
},
"time": {
"start": "2023-05-28T09:13:27Z",
"end": "2023-05-28T09:23:27Z"
}
}
],
"location": {
"lat": 52.534553,
"lng": 13.519429
},
"distance": 25126
},
{
"time": {
"arrival": "2023-05-28T09:30:31Z",
"departure": "2023-05-28T09:40:31Z"
},
"load": [0],
"activities": [
{
"jobId": "reload",
"type": "reload",
"location": {
"lat": 52.559049,
"lng": 13.533147
},
"time": {
"start": "2023-05-28T09:30:31Z",
"end": "2023-05-28T09:40:31Z"
}
}
],
"location": {
"lat": 52.559049,
"lng": 13.533147
},
"distance": 29422
},
{
"time": {
"arrival": "2023-05-28T10:03:44Z",
"departure": "2023-05-28T10:13:44Z"
},
"load": [10],
"activities": [
{
"jobId": "Job_5",
"type": "pickup",
"location": {
"lat": 52.463341,
"lng": 13.49061
},
"time": {
"start": "2023-05-28T10:03:44Z",
"end": "2023-05-28T10:13:44Z"
}
}
],
"location": {
"lat": 52.463341,
"lng": 13.49061
},
"distance": 43551
},
{
"time": {
"arrival": "2023-05-28T10:21:03Z",
"departure": "2023-05-28T10:31:03Z"
},
"load": [20],
"activities": [
{
"jobId": "Job_3",
"type": "pickup",
"location": {
"lat": 52.482275,
"lng": 13.502456
},
"time": {
"start": "2023-05-28T10:21:03Z",
"end": "2023-05-28T10:31:03Z"
}
}
],
"location": {
"lat": 52.482275,
"lng": 13.502456
},
"distance": 47269
},
{
"time": {
"arrival": "2023-05-28T10:33:03Z",
"departure": "2023-05-28T10:43:03Z"
},
"load": [30],
"activities": [
{
"jobId": "Job_4",
"type": "pickup",
"location": {
"lat": 52.473537,
"lng": 13.505414
},
"time": {
"start": "2023-05-28T10:33:03Z",
"end": "2023-05-28T10:43:03Z"
}
}
],
"location": {
"lat": 52.473537,
"lng": 13.505414
},
"distance": 48555
},
{
"time": {
"arrival": "2023-05-28T11:02:09Z",
"departure": "2023-05-28T11:12:09Z"
},
"load": [30],
"activities": [
{
"jobId": "Dumping_Site_1",
"type": "delivery",
"location": {
"lat": 52.559049,
"lng": 13.533147
},
"time": {
"start": "2023-05-28T11:02:09Z",
"end": "2023-05-28T11:12:09Z"
}
}
],
"location": {
"lat": 52.559049,
"lng": 13.533147
},
"distance": 61015
},
{
"time": {
"arrival": "2023-05-28T11:32:01Z",
"departure": "2023-05-28T11:32:01Z"
},
"load": [0],
"activities": [
{
"jobId": "arrival",
"type": "arrival",
"location": {
"lat": 52.50935,
"lng": 13.41997
},
"time": {
"start": "2023-05-28T11:32:01Z",
"end": "2023-05-28T11:32:01Z"
}
}
],
"location": {
"lat": 52.50935,
"lng": 13.41997
},
"distance": 73024
}
],
"statistic": {
"cost": 68.605,
"distance": 73024,
"duration": 12721,
"times": {
"driving": 7921,
"serving": 4800,
"waiting": 0,
"stopping": 0,
"break": 0
}
},
"shiftIndex": 0
},
{
"vehicleId": "garbage_truck_2_1",
"typeId": "garbage_truck_2",
"stops": [
{
"time": {
"arrival": "2023-05-28T08:00:00Z",
"departure": "2023-05-28T08:00:00Z"
},
"load": [0],
"activities": [
{
"jobId": "departure",
"type": "departure",
"location": {
"lat": 52.50935,
"lng": 13.41997
},
"time": {
"start": "2023-05-28T08:00:00Z",
"end": "2023-05-28T08:00:00Z"
}
}
],
"location": {
"lat": 52.50935,
"lng": 13.41997
},
"distance": 0
},
{
"time": {
"arrival": "2023-05-28T08:21:57Z",
"departure": "2023-05-28T08:31:57Z"
},
"load": [10],
"activities": [
{
"jobId": "Job_11",
"type": "pickup",
"location": {
"lat": 52.462867,
"lng": 13.342188
},
"time": {
"start": "2023-05-28T08:21:57Z",
"end": "2023-05-28T08:31:57Z"
}
}
],
"location": {
"lat": 52.462867,
"lng": 13.342188
},
"distance": 11790
},
{
"time": {
"arrival": "2023-05-28T08:35:02Z",
"departure": "2023-05-28T08:45:02Z"
},
"load": [20],
"activities": [
{
"jobId": "Job_12",
"type": "pickup",
"location": {
"lat": 52.458232,
"lng": 13.338698
},
"time": {
"start": "2023-05-28T08:35:02Z",
"end": "2023-05-28T08:45:02Z"
}
}
],
"location": {
"lat": 52.458232,
"lng": 13.338698
},
"distance": 13001
},
{
"time": {
"arrival": "2023-05-28T08:49:29Z",
"departure": "2023-05-28T08:59:29Z"
},
"load": [30],
"activities": [
{
"jobId": "Job_13",
"type": "pickup",
"location": {
"lat": 52.457629,
"lng": 13.323742
},
"time": {
"start": "2023-05-28T08:49:29Z",
"end": "2023-05-28T08:59:29Z"
}
}
],
"location": {
"lat": 52.457629,
"lng": 13.323742
},
"distance": 15148
},
{
"time": {
"arrival": "2023-05-28T09:38:24Z",
"departure": "2023-05-28T09:48:24Z"
},
"load": [0],
"activities": [
{
"jobId": "reload",
"type": "reload",
"location": {
"lat": 52.559049,
"lng": 13.533147
},
"time": {
"start": "2023-05-28T09:38:24Z",
"end": "2023-05-28T09:48:24Z"
}
}
],
"location": {
"lat": 52.559049,
"lng": 13.533147
},
"distance": 39313
},
{
"time": {
"arrival": "2023-05-28T10:20:22Z",
"departure": "2023-05-28T10:30:22Z"
},
"load": [10],
"activities": [
{
"jobId": "Job_6",
"type": "pickup",
"location": {
"lat": 52.434003,
"lng": 13.466142
},
"time": {
"start": "2023-05-28T10:20:22Z",
"end": "2023-05-28T10:30:22Z"
}
}
],
"location": {
"lat": 52.434003,
"lng": 13.466142
},
"distance": 58177
},
{
"time": {
"arrival": "2023-05-28T10:36:46Z",
"departure": "2023-05-28T10:46:46Z"
},
"load": [20],
"activities": [
{
"jobId": "Job_7",
"type": "pickup",
"location": {
"lat": 52.447476,
"lng": 13.433062
},
"time": {
"start": "2023-05-28T10:36:46Z",
"end": "2023-05-28T10:46:46Z"
}
}
],
"location": {
"lat": 52.447476,
"lng": 13.433062
},
"distance": 61706
},
{
"time": {
"arrival": "2023-05-28T10:53:58Z",
"departure": "2023-05-28T11:03:58Z"
},
"load": [30],
"activities": [
{
"jobId": "Job_8",
"type": "pickup",
"location": {
"lat": 52.458414,
"lng": 13.392079
},
"time": {
"start": "2023-05-28T10:53:58Z",
"end": "2023-05-28T11:03:58Z"
}
}
],
"location": {
"lat": 52.458414,
"lng": 13.392079
},
"distance": 65730
},
{
"time": {
"arrival": "2023-05-28T11:39:25Z",
"departure": "2023-05-28T11:49:25Z"
},
"load": [30],
"activities": [
{
"jobId": "Dumping_Site_2",
"type": "delivery",
"location": {
"lat": 52.559049,
"lng": 13.533147
},
"time": {
"start": "2023-05-28T11:39:25Z",
"end": "2023-05-28T11:49:25Z"
}
}
],
"location": {
"lat": 52.559049,
"lng": 13.533147
},
"distance": 88296
},
{
"time": {
"arrival": "2023-05-28T12:09:17Z",
"departure": "2023-05-28T12:09:17Z"
},
"load": [0],
"activities": [
{
"jobId": "arrival",
"type": "arrival",
"location": {
"lat": 52.50935,
"lng": 13.41997
},
"time": {
"start": "2023-05-28T12:09:17Z",
"end": "2023-05-28T12:09:17Z"
}
}
],
"location": {
"lat": 52.50935,
"lng": 13.41997
},
"distance": 100305
}
],
"statistic": {
"cost": 79.785,
"distance": 100305,
"duration": 14957,
"times": {
"driving": 10157,
"serving": 4800,
"waiting": 0,
"stopping": 0,
"break": 0
}
},
"shiftIndex": 0
},
{
"vehicleId": "garbage_truck_3_1",
"typeId": "garbage_truck_3",
"stops": [
{
"time": {
"arrival": "2023-05-28T08:00:00Z",
"departure": "2023-05-28T08:00:00Z"
},
"load": [0],
"activities": [
{
"jobId": "departure",
"type": "departure",
"location": {
"lat": 52.50935,
"lng": 13.41997
},
"time": {
"start": "2023-05-28T08:00:00Z",
"end": "2023-05-28T08:00:00Z"
}
}
],
"location": {
"lat": 52.50935,
"lng": 13.41997
},
"distance": 0
},
{
"time": {
"arrival": "2023-05-28T08:22:19Z",
"departure": "2023-05-28T08:32:19Z"
},
"load": [10],
"activities": [
{
"jobId": "Job_10",
"type": "pickup",
"location": {
"lat": 52.440807,
"lng": 13.351399
},
"time": {
"start": "2023-05-28T08:22:19Z",
"end": "2023-05-28T08:32:19Z"
}
}
],
"location": {
"lat": 52.440807,
"lng": 13.351399
},
"distance": 10902
},
{
"time": {
"arrival": "2023-05-28T08:34:52Z",
"departure": "2023-05-28T08:44:52Z"
},
"load": [20],
"activities": [
{
"jobId": "Job_9",
"type": "pickup",
"location": {
"lat": 52.446407,
"lng": 13.36047
},
"time": {
"start": "2023-05-28T08:34:52Z",
"end": "2023-05-28T08:44:52Z"
}
}
],
"location": {
"lat": 52.446407,
"lng": 13.36047
},
"distance": 11996
},
{
"time": {
"arrival": "2023-05-28T08:47:49Z",
"departure": "2023-05-28T08:57:49Z"
},
"load": [30],
"activities": [
{
"jobId": "Job_15",
"type": "pickup",
"location": {
"lat": 52.447377,
"lng": 13.363822
},
"time": {
"start": "2023-05-28T08:47:49Z",
"end": "2023-05-28T08:57:49Z"
}
}
],
"location": {
"lat": 52.447377,
"lng": 13.363822
},
"distance": 13015
},
{
"time": {
"arrival": "2023-05-28T09:35:31Z",
"departure": "2023-05-28T09:45:31Z"
},
"load": [30],
"activities": [
{
"jobId": "Dumping_Site_3",
"type": "delivery",
"location": {
"lat": 52.559049,
"lng": 13.533147
},
"time": {
"start": "2023-05-28T09:35:31Z",
"end": "2023-05-28T09:45:31Z"
}
}
],
"location": {
"lat": 52.559049,
"lng": 13.533147
},
"distance": 34427
},
{
"time": {
"arrival": "2023-05-28T10:05:23Z",
"departure": "2023-05-28T10:05:23Z"
},
"load": [0],
"activities": [
{
"jobId": "arrival",
"type": "arrival",
"location": {
"lat": 52.50935,
"lng": 13.41997
},
"time": {
"start": "2023-05-28T10:05:23Z",
"end": "2023-05-28T10:05:23Z"
}
}
],
"location": {
"lat": 52.50935,
"lng": 13.41997
},
"distance": 46436
}
],
"statistic": {
"cost": 42.615,
"distance": 46436,
"duration": 7523,
"times": {
"driving": 5123,
"serving": 2400,
"waiting": 0,
"stopping": 0,
"break": 0
}
},
"shiftIndex": 0
}
]
}次の図はルートの内訳を視覚的に示したものです。
ソリューションと対応する視覚化の両方が示すように、すべての車両は集配センターの場所でルートを開始し終了しました。すべての車両にとって、廃棄場所は再積載場所 (積載量の上限である30に達した場合) であるとともに、集配センターに戻る前に残りのゴミを降ろす最終停車地でもありました。
結論
HERE Tour Planning APIには幅広い機能が用意されており、さまざまなユースケースに合わせてルートプランをカスタマイズできるため、特定のニーズに最適なソリューションを確実に提供できます。食品配達、乗客輸送、廃棄物管理などであっても、APIが提供するツールを使用することにより、物流業務を効率化できます。
次のステップ
26 日前の更新