ガイドAPIリファレンス
ガイド

歩行者の歩行速度をカスタマイズする

歩行者の歩行速度をカスタマイズする

歩行者のツアーを計画する際は、歩行速度が重要な要素となります。ツアーの所要時間やジョブの割り当てに影響するため、速度を正確にモデル化することが不可欠です。

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 (cartruckscooterプロファイルで使用可能) とは異なります。

歩行速度がツアーの所要時間に与える影響を分析する

次のセクションでは、単一の問題を速度範囲全体 (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時間のシフト時間枠内に収まります。その後の速度の増加により、所要時間が比例して短縮されることが示されます。次の図はベースラインとなるソリューションの内訳を示しています。

0.5 m/sの歩行速度のツアー統計を示すベースラインソリューション

次のセクションに完全なソリューションの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.54時間26分重い荷物、困難な条件
0.63時間52分
0.73時間28分
0.83時間10分
0.92時間56分
1.02時間45分デフォルト/average速度
1.12時間35分
1.22時間27分
1.32時間21分
1.42時間15分
1.52時間10分速い速度/experienced歩行者
1.62時間6分
1.72時間3分
1.81時間59分
1.91時間56分
2.01時間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.510/15速度が低すぎる
0.612/15速度が低すぎる
0.713/15速度が低すぎる
0.814/15速度が低すぎる
0.915/15すべてのジョブに対応する最小速度

このサンプルシナリオでは、短縮されたシフト時間内にすべてのジョブを完了するために必要な最小歩行速度は0.9 m/sです。配達員の歩行速度がこのしきい値を下回る場合、シフト時間を延長するか、割り当てるジョブ数を減らすか、配達員を追加する必要があります。

次のステップ