歩行者の歩行速度をカスタマイズする
歩行者の歩行速度をカスタマイズする
歩行者のツアーを計画する際は、歩行速度が重要な要素となります。ツアーの所要時間やジョブの割り当てに影響するため、速度を正確にモデル化することが不可欠です。
pedestrianフリートプロファイルには正確な速度モデリングを可能にするspeedパラメーターが含まれています。デフォルト値は1.0 m/sで、平均的な歩行速度を表します。
この値は0.5~2.0 m/sの範囲で調整でき、次のような要素を反映できます。
- 重い荷物:速度を低下
- 地形や天候条件:状況に応じて調整
- 歩行者の体力レベル:速度を上げる/下げる
次の例に示すように、歩行者プロファイルオプションでspeedパラメーターを設定します。
{
"fleet": {
"profiles": [
{
"type": "pedestrian",
"name": "pedestrian",
"options": {
"speed": 1.2
}
}
]
}
}注
speedパラメーターは、pedestrianプロファイルでのみ使用できます- このパラメーターは必須ではありません。省略した場合、最適化アルゴリズムはデフォルトの速度である1.0 m/sを使用します。
speedパラメーターは実際の歩行速度を設定し、歩行時間の計算に直接影響します。これは、車両タイプのすべての速度に対して割合で調整するspeedFactor(car、truck、scooterプロファイルで使用可能) とは異なります。
歩行速度がツアーの所要時間に与える影響を分析する
次のセクションでは、単一の問題を速度範囲全体 (0.5~2 m/s) でテストし、他のすべてのパラメーターを一定に保つことで速度の影響を切り分けて把握し、speedパラメーター値がツアー完了時間にどのように直接影響するかを段階的に分析します。
課題の設定
サンプル問題では、歩行者の配達員が、ベルリン中心部に分散した15件の配達ジョブを、各ジョブあたり一貫して240秒のサービス時間で、4.5時間の時間枠内に完了するユースケースを示します。配達員の容量はすべてのジョブに対応できるよう15に設定され、初期のspeed値は有効な最小値である0.5に設定されています。
注
歩行速度の影響を示すため、この問題は0.5~2.0 m/sの範囲で0.1 m/s刻みの速度値で繰り返しテストします。
次のセクションでは、問題全体のJSONについて説明します。
Click to expand/collapse the sample JSON
{
"fleet": {
"types": [
{
"id": "courier_1",
"profile": "pedestrian",
"costs": {
"fixed": 10.0,
"distance": 0.001,
"time": 0.002
},
"shifts": [
{
"start": {
"time": "2024-06-24T08:00:00Z",
"location": {
"lat": 52.53097,
"lng": 13.38504
}
},
"end": {
"time": "2024-06-24T12:30:00Z",
"location": {
"lat": 52.53097,
"lng": 13.38504
}
}
}
],
"capacity": [
15
],
"amount": 1
}
],
"profiles": [
{
"type": "pedestrian",
"name": "pedestrian",
"options": {
"speed": 0.5
}
}
]
},
"plan": {
"jobs": [
{
"id": "Job_1",
"tasks": {
"deliveries": [
{
"places": [
{
"location": {
"lat": 52.53148,
"lng": 13.39665
},
"duration": 240
}
],
"demand": [
1
]
}
]
}
},
{
"id": "Job_2",
"tasks": {
"deliveries": [
{
"places": [
{
"location": {
"lat": 52.5332,
"lng": 13.39519
},
"duration": 240
}
],
"demand": [
1
]
}
]
}
},
{
"id": "Job_3",
"tasks": {
"deliveries": [
{
"places": [
{
"location": {
"lat": 52.53306,
"lng": 13.3902
},
"duration": 240
}
],
"demand": [
1
]
}
]
}
},
{
"id": "Job_4",
"tasks": {
"deliveries": [
{
"places": [
{
"location": {
"lat": 52.53436,
"lng": 13.38273
},
"duration": 240
}
],
"demand": [
1
]
}
]
}
},
{
"id": "Job_5",
"tasks": {
"deliveries": [
{
"places": [
{
"location": {
"lat": 52.53178,
"lng": 13.39206
},
"duration": 240
}
],
"demand": [
1
]
}
]
}
},
{
"id": "Job_6",
"tasks": {
"deliveries": [
{
"places": [
{
"location": {
"lat": 52.52756,
"lng": 13.38836
},
"duration": 240
}
],
"demand": [
1
]
}
]
}
},
{
"id": "Job_7",
"tasks": {
"deliveries": [
{
"places": [
{
"location": {
"lat": 52.528909,
"lng": 13.385381
},
"duration": 240
}
],
"demand": [
1
]
}
]
}
},
{
"id": "Job_8",
"tasks": {
"deliveries": [
{
"places": [
{
"location": {
"lat": 52.52716,
"lng": 13.38202
},
"duration": 240
}
],
"demand": [
1
]
}
]
}
},
{
"id": "Job_9",
"tasks": {
"deliveries": [
{
"places": [
{
"location": {
"lat": 52.53077,
"lng": 13.39388
},
"duration": 240
}
],
"demand": [
1
]
}
]
}
},
{
"id": "Job_10",
"tasks": {
"deliveries": [
{
"places": [
{
"location": {
"lat": 52.52871,
"lng": 13.39338
},
"duration": 240
}
],
"demand": [
1
]
}
]
}
},
{
"id": "Job_11",
"tasks": {
"deliveries": [
{
"places": [
{
"location": {
"lat": 52.53011,
"lng": 13.38086
},
"duration": 240
}
],
"demand": [
1
]
}
]
}
},
{
"id": "Job_12",
"tasks": {
"deliveries": [
{
"places": [
{
"location": {
"lat": 52.53403,
"lng": 13.38023
},
"duration": 240
}
],
"demand": [
1
]
}
]
}
},
{
"id": "Job_13",
"tasks": {
"deliveries": [
{
"places": [
{
"location": {
"lat": 52.53248,
"lng": 13.3788
},
"duration": 240
}
],
"demand": [
1
]
}
]
}
},
{
"id": "Job_14",
"tasks": {
"deliveries": [
{
"places": [
{
"location": {
"lat": 52.531,
"lng": 13.37755
},
"duration": 240
}
],
"demand": [
1
]
}
]
}
},
{
"id": "Job_15",
"tasks": {
"deliveries": [
{
"places": [
{
"location": {
"lat": 52.52978,
"lng": 13.39248
},
"duration": 240
}
],
"demand": [
1
]
}
]
}
}
]
}
}初期ソリューション (速度:0.5 m/s)
このソリューションは、最も遅い歩行速度である0.5 m/sを基準として設定します。この速度では、配達員は15件すべてのジョブを4時間26分で完了し、4.5時間のシフト時間枠内に収まります。その後の速度の増加により、所要時間が比例して短縮されることが示されます。次の図はベースラインとなるソリューションの内訳を示しています。
次のセクションに完全なソリューションのJSONを示します。
Click to expand/collapse the sample JSON
{
"statistic": {
"cost": 48.152,
"distance": 6116,
"duration": 16018,
"times": {
"driving": 12418,
"serving": 3600,
"waiting": 0,
"stopping": 0,
"break": 0
}
},
"tours": [
{
"vehicleId": "courier_1_1",
"typeId": "courier_1",
"stops": [
{
"time": {
"arrival": "2024-06-24T08:00:00Z",
"departure": "2024-06-24T08:00:00Z"
},
"load": [
15
],
"activities": [
{
"jobId": "departure",
"type": "departure",
"location": {
"lat": 52.53097,
"lng": 13.38504
},
"time": {
"start": "2024-06-24T08:00:00Z",
"end": "2024-06-24T08:00:00Z"
}
}
],
"location": {
"lat": 52.53097,
"lng": 13.38504
},
"distance": 0
},
{
"time": {
"arrival": "2024-06-24T08:10:57Z",
"departure": "2024-06-24T08:14:57Z"
},
"load": [
14
],
"activities": [
{
"jobId": "Job_11",
"type": "delivery",
"location": {
"lat": 52.53011,
"lng": 13.38086
},
"time": {
"start": "2024-06-24T08:10:57Z",
"end": "2024-06-24T08:14:57Z"
}
}
],
"location": {
"lat": 52.53011,
"lng": 13.38086
},
"distance": 324
},
{
"time": {
"arrival": "2024-06-24T08:25:21Z",
"departure": "2024-06-24T08:29:21Z"
},
"load": [
13
],
"activities": [
{
"jobId": "Job_14",
"type": "delivery",
"location": {
"lat": 52.531,
"lng": 13.37755
},
"time": {
"start": "2024-06-24T08:25:21Z",
"end": "2024-06-24T08:29:21Z"
}
}
],
"location": {
"lat": 52.531,
"lng": 13.37755
},
"distance": 636
},
{
"time": {
"arrival": "2024-06-24T08:48:12Z",
"departure": "2024-06-24T08:52:12Z"
},
"load": [
12
],
"activities": [
{
"jobId": "Job_8",
"type": "delivery",
"location": {
"lat": 52.52716,
"lng": 13.38202
},
"time": {
"start": "2024-06-24T08:48:12Z",
"end": "2024-06-24T08:52:12Z"
}
}
],
"location": {
"lat": 52.52716,
"lng": 13.38202
},
"distance": 1196
},
{
"time": {
"arrival": "2024-06-24T09:07:18Z",
"departure": "2024-06-24T09:11:18Z"
},
"load": [
11
],
"activities": [
{
"jobId": "Job_7",
"type": "delivery",
"location": {
"lat": 52.528909,
"lng": 13.385381
},
"time": {
"start": "2024-06-24T09:07:18Z",
"end": "2024-06-24T09:11:18Z"
}
}
],
"location": {
"lat": 52.528909,
"lng": 13.385381
},
"distance": 1644
},
{
"time": {
"arrival": "2024-06-24T09:22:07Z",
"departure": "2024-06-24T09:26:07Z"
},
"load": [
10
],
"activities": [
{
"jobId": "Job_6",
"type": "delivery",
"location": {
"lat": 52.52756,
"lng": 13.38836
},
"time": {
"start": "2024-06-24T09:22:07Z",
"end": "2024-06-24T09:26:07Z"
}
}
],
"location": {
"lat": 52.52756,
"lng": 13.38836
},
"distance": 1963
},
{
"time": {
"arrival": "2024-06-24T09:40:28Z",
"departure": "2024-06-24T09:44:28Z"
},
"load": [
9
],
"activities": [
{
"jobId": "Job_10",
"type": "delivery",
"location": {
"lat": 52.52871,
"lng": 13.39338
},
"time": {
"start": "2024-06-24T09:40:28Z",
"end": "2024-06-24T09:44:28Z"
}
}
],
"location": {
"lat": 52.52871,
"lng": 13.39338
},
"distance": 2388
},
{
"time": {
"arrival": "2024-06-24T09:48:50Z",
"departure": "2024-06-24T09:52:50Z"
},
"load": [
8
],
"activities": [
{
"jobId": "Job_15",
"type": "delivery",
"location": {
"lat": 52.52978,
"lng": 13.39248
},
"time": {
"start": "2024-06-24T09:48:50Z",
"end": "2024-06-24T09:52:50Z"
}
}
],
"location": {
"lat": 52.52978,
"lng": 13.39248
},
"distance": 2519
},
{
"time": {
"arrival": "2024-06-24T09:59:40Z",
"departure": "2024-06-24T10:03:40Z"
},
"load": [
7
],
"activities": [
{
"jobId": "Job_9",
"type": "delivery",
"location": {
"lat": 52.53077,
"lng": 13.39388
},
"time": {
"start": "2024-06-24T09:59:40Z",
"end": "2024-06-24T10:03:40Z"
}
}
],
"location": {
"lat": 52.53077,
"lng": 13.39388
},
"distance": 2724
},
{
"time": {
"arrival": "2024-06-24T10:15:55Z",
"departure": "2024-06-24T10:19:55Z"
},
"load": [
6
],
"activities": [
{
"jobId": "Job_1",
"type": "delivery",
"location": {
"lat": 52.53148,
"lng": 13.39665
},
"time": {
"start": "2024-06-24T10:15:55Z",
"end": "2024-06-24T10:19:55Z"
}
}
],
"location": {
"lat": 52.53148,
"lng": 13.39665
},
"distance": 3081
},
{
"time": {
"arrival": "2024-06-24T10:27:34Z",
"departure": "2024-06-24T10:31:34Z"
},
"load": [
5
],
"activities": [
{
"jobId": "Job_2",
"type": "delivery",
"location": {
"lat": 52.5332,
"lng": 13.39519
},
"time": {
"start": "2024-06-24T10:27:34Z",
"end": "2024-06-24T10:31:34Z"
}
}
],
"location": {
"lat": 52.5332,
"lng": 13.39519
},
"distance": 3306
},
{
"time": {
"arrival": "2024-06-24T10:41:41Z",
"departure": "2024-06-24T10:45:41Z"
},
"load": [
4
],
"activities": [
{
"jobId": "Job_5",
"type": "delivery",
"location": {
"lat": 52.53178,
"lng": 13.39206
},
"time": {
"start": "2024-06-24T10:41:41Z",
"end": "2024-06-24T10:45:41Z"
}
}
],
"location": {
"lat": 52.53178,
"lng": 13.39206
},
"distance": 3601
},
{
"time": {
"arrival": "2024-06-24T10:58:53Z",
"departure": "2024-06-24T11:02:53Z"
},
"load": [
3
],
"activities": [
{
"jobId": "Job_3",
"type": "delivery",
"location": {
"lat": 52.53306,
"lng": 13.3902
},
"time": {
"start": "2024-06-24T10:58:53Z",
"end": "2024-06-24T11:02:53Z"
}
}
],
"location": {
"lat": 52.53306,
"lng": 13.3902
},
"distance": 3989
},
{
"time": {
"arrival": "2024-06-24T11:25:20Z",
"departure": "2024-06-24T11:29:20Z"
},
"load": [
2
],
"activities": [
{
"jobId": "Job_4",
"type": "delivery",
"location": {
"lat": 52.53436,
"lng": 13.38273
},
"time": {
"start": "2024-06-24T11:25:20Z",
"end": "2024-06-24T11:29:20Z"
}
}
],
"location": {
"lat": 52.53436,
"lng": 13.38273
},
"distance": 4651
},
{
"time": {
"arrival": "2024-06-24T11:48:23Z",
"departure": "2024-06-24T11:52:23Z"
},
"load": [
1
],
"activities": [
{
"jobId": "Job_12",
"type": "delivery",
"location": {
"lat": 52.53403,
"lng": 13.38023
},
"time": {
"start": "2024-06-24T11:48:23Z",
"end": "2024-06-24T11:52:23Z"
}
}
],
"location": {
"lat": 52.53403,
"lng": 13.38023
},
"distance": 5218
},
{
"time": {
"arrival": "2024-06-24T12:03:19Z",
"departure": "2024-06-24T12:07:19Z"
},
"load": [
0
],
"activities": [
{
"jobId": "Job_13",
"type": "delivery",
"location": {
"lat": 52.53248,
"lng": 13.3788
},
"time": {
"start": "2024-06-24T12:03:19Z",
"end": "2024-06-24T12:07:19Z"
}
}
],
"location": {
"lat": 52.53248,
"lng": 13.3788
},
"distance": 5536
},
{
"time": {
"arrival": "2024-06-24T12:26:58Z",
"departure": "2024-06-24T12:26:58Z"
},
"load": [
0
],
"activities": [
{
"jobId": "arrival",
"type": "arrival",
"location": {
"lat": 52.53097,
"lng": 13.38504
},
"time": {
"start": "2024-06-24T12:26:58Z",
"end": "2024-06-24T12:26:58Z"
}
}
],
"location": {
"lat": 52.53097,
"lng": 13.38504
},
"distance": 6116
}
],
"statistic": {
"cost": 48.152,
"distance": 6116,
"duration": 16018,
"times": {
"driving": 12418,
"serving": 3600,
"waiting": 0,
"stopping": 0,
"break": 0
}
},
"shiftIndex": 0
}
]
}速度の影響を分析する
前述の問題に基づき、この分析では、次のサンプルの実用的な速度範囲でspeedパラメーター値を0.1 m/sずつ段階的に増加させた場合、速度とツアー所要時間が線形関係になることを示します。
- 0.5~0.7 m/s:重い荷物、困難な地形、悪天候の場合
- 0.8~1.0 m/s:標準的な荷物での一般的な歩行速度 (1.0 m/sがデフォルト値)
- 1.1~1.5 m/s:軽量な荷物を持つ経験豊富な歩行者が良好な地形で移動する場合
- 1.6~2.0 m/s:速配または荷物が少ない場合
次の表は、前述の問題で歩行速度の全範囲でのツアー所要時間の変化を示します。
| 歩行速度 (m/s) | ツアーの所要時間: | 注 |
|---|---|---|
| 0.5 | 4時間26分 | 重い荷物、困難な条件 |
| 0.6 | 3時間52分 | |
| 0.7 | 3時間28分 | |
| 0.8 | 3時間10分 | |
| 0.9 | 2時間56分 | |
| 1.0 | 2時間45分 | デフォルト/average速度 |
| 1.1 | 2時間35分 | |
| 1.2 | 2時間27分 | |
| 1.3 | 2時間21分 | |
| 1.4 | 2時間15分 | |
| 1.5 | 2時間10分 | 速い速度/experienced歩行者 |
| 1.6 | 2時間6分 | |
| 1.7 | 2時間3分 | |
| 1.8 | 1時間59分 | |
| 1.9 | 1時間56分 | |
| 2.0 | 1時間54分 | 速配 |
次のグラフは、異なる速度設定におけるツアー所要時間を視覚的に比較し、歩行速度が速いほど大きな時間短縮が得られることを示します。
データから、速度を1.0から2.0 m/sに倍増させると、ツアー所要時間が約31%短縮される (2時間45分から1時間54分) ことがわかります。最も遅い速度 (0.5 m/s) では、配達員は4.5時間のシフト時間枠内でかろうじてすべての配達を完了しますが、最大速度 (2.0 m/s) では、同じルートを半分未満の時間で完了します。これは、楽観的な推定ではなく実際の現場条件に合った現実的な速度値を選択することの重要性を示しています。
歩行速度の変化に伴うシフト制約がジョブ割り当てに与える影響
歩行速度が変化すると、ジョブの実行可否はシフト時間に大きく左右されます。この関係を示すために、シフト時間を4.5時間から3時間に短縮した次の制約付きユースケースを考えます。
最小歩行速度しきい値
次の表は、すべてのジョブを完了するために必要な最小歩行速度を示しています。
| 歩行速度 (m/s) | 完了ジョブ数 | ステータス |
|---|---|---|
| 0.5 | 10/15 | 速度が低すぎる |
| 0.6 | 12/15 | 速度が低すぎる |
| 0.7 | 13/15 | 速度が低すぎる |
| 0.8 | 14/15 | 速度が低すぎる |
| 0.9 | 15/15 | すべてのジョブに対応する最小速度 |
このサンプルシナリオでは、短縮されたシフト時間内にすべてのジョブを完了するために必要な最小歩行速度は0.9 m/sです。配達員の歩行速度がこのしきい値を下回る場合、シフト時間を延長するか、割り当てるジョブ数を減らすか、配達員を追加する必要があります。
次のステップ
pedestrian以外の車両タイプの制限速度を適用する方法の詳細については、「制限速度を適用する」を参照してください。- 全体的な速度調整については、「APIリファレンス」の
speedFactorパラメーターを参照してください。 - 複数の車両プロファイルの使用方法については、「多様な車タイプに合わせて旅程を最適化する」を参照してください。
26 日前の更新