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

CVRPTWステートレスモデルにおけるドロップオフまたはピックアップの優先順位付け

ステートレスAPIは、prebook_cvrptwモードでのドロップオフまたはピックアップ配送の優先順位付けをサポートしているため、ピックアップ/ドロップオフノードが1つしかなく、各車両が1回の実行しかできない場合にのみサポートされます。ドロップオフまたはピックアップポイントの優先順位付けは、そのグループに属するドロップオフとピックアップの各ペアでgroupsの順序付けを使用することによって実現されます。

注記

グループは、ステートレスAPIのprebook(PDPモード)では無視されます。

Run In Postman

優先順位付けされたドロップオフの例を以下に示します。

JSONペイロードを参照
CVRPTWモードでドロップオフを優先する

{
"current_time": "2024-07-10T08:00:00+00:00",
"engine_settings": {
"calculation_parameters": {
"calculations_mode": "sync",
"scheduling_mode": "prebook_cvrptw"
},
"model_parameters": {
"mixed_fleet": false,
"optimize_quantity": "total_time",
"groups_order": {
// 優先ノードのグループを作成する
"high_priority": 0
}
},
"routing_engine": {
"batch_matrix_size": 250,
"continue_straight": true,
"curb": false,
"key": "<routing_key>",
"make_depot_zero": true,
"road_network": "van",
"routing_engine_name": "osrme",
"speed": null,
"time_factor": 1,
"url": "http://mapbox-osrm-proxy",
"use_speed_in_routing": false
},
"solver_parameters": {}
},
"nodes": [
{
"booking_uid": "b00c0000-2024-0421-0616-000000000001",
"close_time_ts": "2026-01-03T09:00:00+00:00",
"close_time_ts_dynamic": "2026-01-03T09:00:00+00:00",
"demand": {
"units": 10
},
"end_of_trip": false,
"geofence_ids": [],
// このノードを優先グループに割り当てる
"groups": ["high_priority"],
"lat": 1.280097,
"lon": 103.889129,
"lifo_order_check": false,
"lifo_order_penalty": null,
"location_name": "ドロップオフ場所1",
"matrix_timestamp": "2024-07-10T08:00:00+00:00",
"max_slack": null,
"node_type": "dropoff",
"open_time_ts": "2026-01-01T00:00:00+00:00",
"service_time": 360.0,
"trip_cost": 0.0,
"uid": "f0de0001-2024-0731-88ad-05ddd46ce72d",
"vehicle_characteristics": {}
},
{
"booking_uid": "b00c0000-2024-0421-0616-000000000002",
"close_time_ts": "2026-01-03T09:00:00+00:00",
"close_time_ts_dynamic": "2026-01-03T09:00:00+00:00",
"demand": {
"units": 10
},
"end_of_trip": false,
"geofence_ids": [],
"groups": [],
"lat": 1.290097,
"lon": 103.989129,
"lifo_order_check": false,
"lifo_order_penalty": null,
"location_name": "ドロップオフ場所2",
"matrix_timestamp": "2024-07-10T08:00:00+00:00",
"max_slack": null,
"node_type": "dropoff",
"open_time_ts": "2026-01-01T00:00:00+00:00",
"service_time": 360.0,
"trip_cost": 0.0,
"uid": "f0de0001-2024-0731-88ad-05ddd46ce74d",
"vehicle_characteristics": {}
},
{
"close_time_ts": "2026-01-05T00:35:00+00:00",
"close_time_ts_dynamic": "2026-01-05T00:35:00+00:00",
"demand": {
"units": 0
},
"lat": 1.290662,
"lon": 103.943407,
"location_name": "オフィス",
"max_trip_duration": 0,
"node_type": "point",
"open_time_ts": "2026-01-01T00:00:00+00:00",
"end_of_trip": true,
"service_time": 0.0,
"trip_cost": 0,
"weight": 0.0,
"uid": "dc1e0000-2024-0731-b23d-5206f1c21d09"
}
],
"vehicles": [
{
"agent_id": "dc1e0000-2024-0731-aaaa-5206f1c21d09",
"capacity": {
"units": 999
},
"characteristics": {},
"partial_route": ["dc1e0000-2024-0731-b23d-5206f1c21d09"],
"completed_nodes": [],
"end_time": "2026-01-10T14:59:59+00:00",
"lat": 1.290662,
"lon": 103.943407,
"routing_engine": {
"batch_matrix_size": 250,
"curb": false,
"key": "routing_key",
"make_depot_zero": true,
"road_network": "van",
"routing_engine_name": "osrme",
"speed": null,
"time_factor": 1,
"url": "http://mapbox-osrm-proxy",
"use_speed_in_routing": false
},
"service_number": "Van 2 - instance",
"start_time": "2024-01-01T00:00:00+00:00",
"vehicle_cost": 1000.0
}
]
}

ノードの優先順位付けのルール

ノードの順序は、割り当てられたグループとgroups_order構成によって異なります。

  1. **groups_orderにグループがあるノード:**これらのノードは、優先順位の値で並べ替えられます。優先順位の値が高いほど、早く表示されます。
  2. **groups_orderにグループがないノード:**これらのノードは優先順位が最も低く、ポイント1のすべてのノードの後に表示されます。
  3. **groups_orderにグループがあるが、優先順位がNoneのノード:**これらのノードの順序は未定義であり、シーケンスのどこにでも表示される場合があります。
警告

優先順位付けロジックはpointノードには影響しません。無視されます。

注文優先順位実装の技術的な詳細

この構成が与えられた場合

"model_parameters": {
"mixed_fleet": false,
"optimize_quantity": "total_time",
"groups_order": {
// 優先ノードのグループを作成する
"high_priority": 0,
"mid_priority": 1,
"low_priority": 2
}
}

特定の車両では、ノードは優先順位番号に基づいて昇順にシーケンスされます。つまり、優先順位番号が低いノードがシーケンスの早い段階で表示されます。

単一の車両に複数の優先度の高いノードを含めることができます。

優先順位番号のないノードは、この順序付けルールの対象ではなく、車両のシーケンスのどこにでも配置できます。

車両ごとに1つのhigh priotityまたはlow priorityの停車地のみをモデル化する

この例でgroupsを使用すると、同じ優先順位の複数の注文が同じ車両に割り当てられる可能性があり、特定の状況では望ましくない場合があります。車両が優先度の高い注文または低い注文を1つだけ受け取るようにするには、demandフィールドを調整できます。

ノードの需要タイプとその値を指定し、車両の対応する容量タイプと値を指定するには、ノードのdemandフィールドと車両のcapacityフィールドを使用します。たとえば、ノード定義には次のものが含まれる場合があります。

        {
"uid": "1318f77b-b424-421f-83ff-54fe4b315b22",
...
"demand": {
"CBCM": 1771100,
"WEIGHT": 645,
"lowest_priority": 1
},
...

そして、車両定義には次のものが含まれる場合があります。

      {
"agent_id": "Truck_10W",
"capacity": {
"CBCM": 7000000,
"WEIGHT": 33,
"lowest_priority": 1
}
...
}
ヒント

特定の優先順位タイプの容量値を調整することにより、その同じ優先順位の複数の(capacity値の値以下の)注文を車両に割り当てることができます。