CVRPTW ステートレスモデルにおけるドロップオフまたはピックアップの優先順位付け (Prioritization of drop off or pickup in CVRPTW Stateless model)
Stateless API は、prebook_cvrptw モードでのドロップオフまたはピックアップ配達の優先順位付けをサポートしていますが、それはピックアップ/ドロップオフノードが1つしかなく、各車両が1回の実行しかできない場合のみです。ドロップオフまたはピックアップポイントの優先順位付けは、そのグループに属するドロップオフとピックアップの各ペアで groups 順序付けを使用することによって実現されます。
グループは、Stateless API の prebook (PDP モード) では無視されます。
優先ドロップオフの例を以下に示します。
JSON ペイロードを見る
{
"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": {
// Create group for priority nodes
"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": [],
// Assign this node to a prioritized group
"groups": ["high_priority"],
"lat": 1.280097,
"lon": 103.889129,
"lifo_order_check": false,
"lifo_order_penalty": null,
"location_name": "Dropoff location 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": "Dropoff location 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": "Office",
"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
}
]
}
ノードの優先順位適用のルール (Rules for applying priorities for the nodes)
ノードの順序付けは、割り当てられたグループと groups_order 構成によって異なります。
groups_orderにグループがあるノード: これらのノードは、優先順位の値でソートされ ます。優先順位の値が高いほど、先に表示されます。groups_orderにグループがないノード: これらのノードの優先順位は最も低く、ポイント1のすべてのノードの後に表示されます。groups_orderにグループがあるが優先順位がNoneのノード: これらのノードの順序は未定義であり、シーケンスのどこにでも表示される可能性があります。
優先順位付けロジックは point ノードには影響しません。それらは無視されます。
注文優先順位の実装に関する技術的な詳細 (Technical details for the order priority implementation)
次のような構成があるとします。
"model_parameters": {
"mixed_fleet": false,
"optimize_quantity": "total_time",
"groups_order": {
// Create group for priority nodes
"high_priority": 0,
"mid_priority": 1,
"low_priority": 2
}
}
特定の車両では、ノードは優先順位番号に基づいて昇順に配列されます。これは、優先順位番号が低いノードがシーケンスの早い段階に表示されることを意味します。
単一の車両に複数の高優先順位ノードを含めることができます。
優先順位番号のないノードはこの順序付けルールの対象ではなく、車両のシーケンスのどこにでも配置できます。
prebook_cvrptw モードが正しく機能するには、各車両に、デポノードの uid で始まる partial_route が定義されている必要があります。これが設定されていない場合、車両はデポで開始しない可能性があり、予期しないルーティングや優先順位付けの結果につながる可能性があります。
車両ごとに1つの high priority または low priority ストップのみをモデル化する (Modelling only one high priotity or low priority stop per vehicle)
例で 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 値の値以下)を車両に割り当てることができます。