メインコンテンツまでスキップ

車両の開始場所と終了場所の設定

統合APIを使用すると、車両の開始場所と終了場所を設定できます。一般的なユースケースは次のとおりです。

デポベースのルーティング

配送会社は中央倉庫(デポ)から営業しています。トラックはデポを出発し、複数の顧客に商品を配達し、同じデポに戻ります。

  • 開始場所:デポの場所。
  • 終了場所:同じデポの場所。
  • 目的:これは最も一般的な設定であり、すべてのルートが中央配送ポイントから始まり、そこで終了することを保証します。

複数デポのルーティング

大手物流会社は、地域全体に複数の倉庫を持っています。トラックは1つのデポから出発し、別のデポで終了する場合があります。

  • 開始場所:車両に割り当てられた特定のデポ。
  • 終了場所:運用戦略に応じて、別のデポまたは同じデポの可能性があります。
  • 目的:より柔軟なルーティングを可能にし、デポ間で作業負荷を分散し、長距離輸送を最適化します。

在宅サービス技術者

フィールドサービス技術者は、自宅から1日を始め、顧客の場所を訪問し、1日の終わりに自宅に戻る場合と戻らない場合があります。

  • 開始場所:技術者の自宅住所。
  • 終了場所:技術者の自宅住所または指定された場所(会社のオフィスなど)。
  • 目的:技術者の日常業務と移動要件の現実世界の制約をモデル化します。

廃棄物収集

廃棄物収集トラックはデポから出発し、さまざまな場所から廃棄物を収集し、処分場で廃棄物を空にしてからデポに戻ります。

  • 開始場所:廃棄物収集デポ。
  • 終了場所:廃棄物収集デポ。
  • 中間場所:処分場。
  • 目的:収集と処分のプロセスをモデル化し、トラックが定義されたルートに従い、指定された場所で荷物を空にすることを保証します。

統合APIでの実装

SWAT APIは、車両の開始場所と終了場所の構成をサポートしています。実装は、最適化APIと統合APIで異なります。 統合APIでは、新しいノードのセットを作成し、車両に事前に割り当てる必要があります。ノードはシミュレーションに属しているため、テンプレートレベルで事前に割り当てられた場所を確立でき、そのテンプレートから作成された各シミュレーションでその場所が再利用されます。

各車両の開始場所と終了場所は、開始ノードと終了ノードを割り当てることによって構成できます。または、最適化APIを使用してこれらの場所を設定することもできます(/docs/manuals/concepts/depot.mdを参照)。

ノードを使用した構成

開始場所と終了場所(ノード)

開始場所は、3つの追加プロパティが設定された車両の開始ノードを作成することによって追加できます。

  • node.status = assignedは、ノードが車両に事前に割り当てられていることを確立します
  • node.partial_route_index = 1は、このノードが事前に割り当てられたノードのシーケンスの最初のノードであるか、最後のノードの場合は-1であることを確立します
  • node.finalization_type = maxは、出発時のスラックを回避するために、開始ノードからの出発時刻をできるだけ遅くするように要求します
  • node.type = pointは、ノードがウェイポイントと見なされることを要求します

ノードは、たとえば次のように作成できます。 POST {{base_url}}/api/v2/node

{
"lat": 1.312, // 開始場所の座標
"lon": 103.8,
"uid": "6f657979-a390-49b6-ab29-8be4d014a63e", // ノードのランダムな一意の識別子
"scheduled_ts": "2021-01-01T00:00:00+07:00", // 出発に制限がない場合、シミュレーションの時間境界と一致させることができる時間枠
"open_time_ts": "2021-01-01T00:00:00+07:00",
"close_time_ts": "2021-01-01T23:59:59+07:00",
"close_time_ts_dynamic": "2021-01-01T23:59:59+07:00",
"location_name": "Somelocation", // 場所の名前
"assigned_vehicle": "/api/v2/vehicle/1487568", // この開始場所を作成する必要がある車両のID
"node_type": "point", // ノードのタイプ
"service_time": 0, // このノードではサービスは不要
"booking_uid": "eb94f0aa-198a-4df5-b0c8-1e286a1bb5ff", // ランダムな予約UID(他では使用されない)
"status": "assigned", // このノードはルート最適化中に計画されるべきではない
"partial_route_index": 1, // このノードは事前に割り当てられたノードのシーケンスの最初のノードである必要がある
"finalization_type": "max", // スラックを最小限に抑えるように試みる
}

終了場所

同様に、最後のノードの構成は次のようになります。

    {
"lat": 1.312,
"lon": 103.8,
"uid": "3c516dc8-b08e-400e-9322-cf447e6eff28",
"scheduled_ts": "2021-02-01T23:59:59+07:00",
"open_time_ts": "2021-01-01T00:00:00+07:00",
"close_time_ts": "2021-02-01T23:59:59+07:00",
"close_time_ts_dynamic": "2021-02-01T23:59:59+07:00",
"location_name": "Some End location",
"assigned_vehicle": "/api/v2/vehicle/1487568",
"node_type": "point",
"service_time": 0,
"booking_uid": "765ab521-708f-42a1-8fae-c4512ffd9d28",
"status": "assigned",
"partial_route_index": -1, // このノードはシーケンスの最後のノードである必要がある(-1は最大整数を表す)
"finalization_type": "min", // 与えられたソリューションでこのノードにできるだけ早く到着するように試みる
}