容量制約付き配送計画問題を解決する
ここでは、需要と容量の相互関係や追加の容量パラメーターといった特定の制約を伴うラストマイル配送の問題の解決方法を検討します。
需要と容量の相関関係
容量制約を伴う車両ルート検索問題を解決する際は、車両のルート検索時に車両の容量を考慮する必要があります。ジョブの需要と車両の容量を考慮して、複数の場所を訪問する複数の車両に最適なルートを見つける必要がある状況を考えてみましょう。すべてのジョブの総需要がすべての車両の総容量を超えない場合に、この特定の問題を解決できると見なすことができます。
たとえば、4つの場所と2台の車両があるとします。各場所には特定のジョブの需要があり、これは集荷または配達されるアイテムの数量 (5、4、2、3) と一致しています。そして、各車両の最大容量は10です。車両の容量とは、車両が積載可能な最大の数です。車両が運搬できるアイテムの総数量は、車両の容量を超えることはできません。
ここで解決する必要のある問題は、最短の総走行距離となり、運搬する総量が車両の容量に収まるようなルートを見つけ、車両に割り当てることです。需要や容量の単位は指定しません。単位は、集荷または配達するアイテムの重量や容積など、各組織の事業ごとに定義されるため、需要と容量には正の数のみを入力します。
この問題のソリューションを計算するには、次の情報を提供する必要があります。
-
車両に関する情報 (開始地点と終了地点、コスト、シフト、容量)
-
ジョブに関する情報 (場所、所要時間、需要)
したがって、この例では、次の主な制約があります。
- 場所:4
- 各場所の需要:5、4、2、3
- 車両:2
- 各車両の容量:10、10
車両情報を設定する
この例では、運行管理プロファイル、各車両コスト、シフトフィールドの開始時間と終了時間、車両の容量と数量を指定しています。容量には10、数量には2が指定されています。つまり、このソリューションでは同じ容量の車両を最大2台使用できます。以下の例では、特に車両タイプについて、距離と時間の両方に0より大きいコストを指定しています。その結果、アルゴリズムによって、指定した2台の車両の走行距離とツアーの所要時間の両方が最適化されることが予想されます。
{
"fleet": {
"types": [
{
"id": "069ea42ae3e9",
"profile": "car_1",
"costs": {
"fixed": 5.0,
"distance": 0.007,
"time": 0.002
},
"shifts": [
{
"start": {
"time": "2021-07-10T08:37:00Z",
"location": {
"lat": 52.530971,
"lng": 13.384915
}
},
"end": {
"time": "2021-07-10T17:37:00Z",
"location": {
"lat": 52.5281430596138,
"lng": 13.36381375834569
}
}
}
],
"capacity": [
10
],
"amount": 2
}
],
"profiles": [
{
"type": "car",
"name": "car_1"
} ジョブ情報を設定する
前述のとおり、実行するジョブは4つあります。各ジョブに、タイプ (集荷または配達)、場所、所要時間、需要を指定します。この特定のケースで重要なパラメーターは需要であり、これは上で車両に指定した容量と直接関連があります。
"plan": {
"jobs": [
{
"id": "job_1",
"tasks": {
"pickups": [
{
"places": [
{
"location": {
"lat": 52.484104043903585,
"lng": 13.386732295521801
},
"duration": 840
}
],
"demand": [
5
]
}
]
}
},問題
上で説明した4つの配達ジョブを持つ例について、問題を設定してみましょう。
{
"fleet": {
"types": [
{
"id": "d3e7bb8d20c5",
"profile": "car_1",
"costs": {
"fixed": 5.0,
"distance": 0.007,
"time": 0.05
},
"shifts": [
{
"start": {
"time": "2021-08-27T08:03:00Z",
"location": {
"lat": 52.530971,
"lng": 13.384915
}
},
"end": {
"time": "2021-08-27T19:03:00Z",
"location": {
"lat": 52.43119084052164,
"lng": 13.39255783460401
}
}
}
],
"capacity": [
10
],
"amount": 2
}
],
"profiles": [
{
"type": "car",
"name": "car_1"
}
]
},
"plan": {
"jobs": [
{
"id": "job_1",
"tasks": {
"deliveries": [
{
"places": [
{
"location": {
"lat": 52.484104043903585,
"lng": 13.386732295521801
},
"duration": 840
}
],
"demand": [
5
]
}
]
}
},
{
"id": "job_2",
"tasks": {
"deliveries": [
{
"places": [
{
"location": {
"lat": 52.463735398833514,
"lng": 13.303616544747735
},
"duration": 600
}
],
"demand": [
4
]
}
]
}
},
{
"id": "job_3",
"tasks": {
"deliveries": [
{
"places": [
{
"location": {
"lat": 52.542308727849075,
"lng": 13.350779211496564
},
"duration": 60
}
],
"demand": [
2
]
}
]
}
},
{
"id": "job_4",
"tasks": {
"deliveries": [
{
"places": [
{
"location": {
"lat": 52.48460493700661,
"lng": 13.315372249087625
},
"duration": 1140
}
],
"demand": [
3
]
}
]
}
}
]
}
} ソリューション
このような問題のソリューションは次のようになります。
{
"statistic": {
"cost": 679.9580000000001,
"distance": 39944,
"duration": 7807,
"times": {
"driving": 5167,
"serving": 2640,
"waiting": 0,
"break": 0
}
},
"tours": [
{
"vehicleId": "d3e7bb8d20c5_2",
"typeId": "d3e7bb8d20c5",
"stops": [
{
"location": {
"lat": 52.530971,
"lng": 13.384915
},
"time": {
"arrival": "2021-08-27T08:03:00Z",
"departure": "2021-08-27T08:03:00Z"
},
"load": [
7
],
"activities": [
{
"jobId": "departure",
"type": "departure"
}
],
"distance": 0
},
{
"location": {
"lat": 52.48460493700661,
"lng": 13.315372249087623
},
"time": {
"arrival": "2021-08-27T08:21:09Z",
"departure": "2021-08-27T08:40:09Z"
},
"load": [
4
],
"activities": [
{
"jobId": "job_4",
"type": "delivery"
}
],
"distance": 3986
},
{
"location": {
"lat": 52.463735398833514,
"lng": 13.303616544747737
},
"time": {
"arrival": "2021-08-27T08:46:35Z",
"departure": "2021-08-27T08:56:35Z"
},
"load": [
0
],
"activities": [
{
"jobId": "job_2",
"type": "delivery"
}
],
"distance": 16455
},
{
"location": {
"lat": 52.43119084052164,
"lng": 13.39255783460401
},
"time": {
"arrival": "2021-08-27T09:14:16Z",
"departure": "2021-08-27T09:14:16Z"
},
"load": [
0
],
"activities": [
{
"jobId": "arrival",
"type": "arrival"
}
],
"distance": 20069
}
],
"statistic": {
"cost": 364.68,
"distance": 20840,
"duration": 4276,
"times": {
"driving": 2536,
"serving": 1740,
"waiting": 0,
"break": 0
}
}
},
{
"vehicleId": "d3e7bb8d20c5_1",
"typeId": "d3e7bb8d20c5",
"stops": [
{
"location": {
"lat": 52.530971,
"lng": 13.384915
},
"time": {
"arrival": "2021-08-27T08:03:00Z",
"departure": "2021-08-27T08:03:00Z"
},
"load": [
7
],
"activities": [
{
"jobId": "departure",
"type": "departure"
}
],
"distance": 0
},
{
"location": {
"lat": 52.542308727849075,
"lng": 13.350779211496564
},
"time": {
"arrival": "2021-08-27T08:12:53Z",
"departure": "2021-08-27T08:13:53Z"
},
"load": [
5
],
"activities": [
{
"jobId": "job_3",
"type": "delivery"
}
],
"distance": 7108
},
{
"location": {
"lat": 52.484104043903585,
"lng": 13.3867322955218
},
"time": {
"arrival": "2021-08-27T08:32:38Z",
"departure": "2021-08-27T08:46:38Z"
},
"load": [
0
],
"activities": [
{
"jobId": "job_1",
"type": "delivery"
}
],
"distance": 13595
},
{
"location": {
"lat": 52.43119084052164,
"lng": 13.39255783460401
},
"time": {
"arrival": "2021-08-27T09:01:51Z",
"departure": "2021-08-27T09:01:51Z"
},
"load": [
0
],
"activities": [
{
"jobId": "arrival",
"type": "arrival"
}
],
"distance": 20065
}
],
"statistic": {
"cost": 315.278,
"distance": 19104,
"duration": 3531,
"times": {
"driving": 2631,
"serving": 900,
"waiting": 0,
"break": 0
}
}
}
]
}このレスポンスでは、各場所への最適な訪問順序と合わせて、最適な車両、走行距離、各ジョブを実行する車両の合計積載量 (車両の容量に適合) と、走行、サービス、待機、シフト休憩の正確なタイミングを含むツアーの合計所要時間を確認できます。
異なるジョブタイプを含む問題
1つの問題で異なるジョブタイプ (集荷と配達) を設定する場合は、次のように問題を設定する必要があります。
{
"fleet": {
"types": [
{
"id": "d3e7bb8d20c5",
"profile": "car_1",
"costs": {
"fixed": 5.0,
"distance": 0.007,
"time": 0.05
},
"shifts": [
{
"start": {
"time": "2021-08-27T08:03:00Z",
"location": {
"lat": 52.530971,
"lng": 13.384915
}
},
"end": {
"time": "2021-08-27T19:03:00Z",
"location": {
"lat": 52.43119084052164,
"lng": 13.39255783460401
}
}
}
],
"capacity": [
10
],
"amount": 2
}
],
"profiles": [
{
"type": "car",
"name": "car_1"
}
]
},
"plan": {
"jobs": [
{
"id": "job_1",
"tasks": {
"pickups": [
{
"places": [
{
"location": {
"lat": 52.484104043903585,
"lng": 13.386732295521801
},
"duration": 840
}
],
"demand": [
5
]
}
]
}
},
{
"id": "job_2",
"tasks": {
"pickups": [
{
"places": [
{
"location": {
"lat": 52.463735398833514,
"lng": 13.303616544747735
},
"duration": 600
}
],
"demand": [
4
]
}
]
}
},
{
"id": "job_3",
"tasks": {
"deliveries": [
{
"places": [
{
"location": {
"lat": 52.542308727849075,
"lng": 13.350779211496564
},
"duration": 60
}
],
"demand": [
2
]
}
]
}
},
{
"id": "job_4",
"tasks": {
"deliveries": [
{
"places": [
{
"location": {
"lat": 52.48460493700661,
"lng": 13.315372249087625
},
"duration": 1140
}
],
"demand": [
3
]
}
]
}
}
]
}
} ソリューション
この問題のソリューションは次のようになります。
{
"statistic": {
"cost": 552.719,
"distance": 31667,
"duration": 6521,
"times": {
"driving": 3881,
"serving": 2640,
"waiting": 0,
"break": 0
}
},
"tours": [
{
"vehicleId": "d3e7bb8d20c5_1",
"typeId": "d3e7bb8d20c5",
"stops": [
{
"location": {
"lat": 52.530971,
"lng": 13.384915
},
"time": {
"arrival": "2021-08-27T08:03:00Z",
"departure": "2021-08-27T08:03:00Z"
},
"load": [
5
],
"activities": [
{
"jobId": "departure",
"type": "departure"
}
],
"distance": 0
},
{
"location": {
"lat": 52.542308727849075,
"lng": 13.350779211496564
},
"time": {
"arrival": "2021-08-27T08:12:53Z",
"departure": "2021-08-27T08:13:53Z"
},
"load": [
3
],
"activities": [
{
"jobId": "job_3",
"type": "delivery"
}
],
"distance": 3986
},
{
"location": {
"lat": 52.484104043903585,
"lng": 13.3867322955218
},
"time": {
"arrival": "2021-08-27T08:32:38Z",
"departure": "2021-08-27T08:46:38Z"
},
"load": [
8
],
"activities": [
{
"jobId": "job_1",
"type": "pickup"
}
],
"distance": 18132
},
{
"location": {
"lat": 52.48460493700661,
"lng": 13.315372249087623
},
"time": {
"arrival": "2021-08-27T08:58:34Z",
"departure": "2021-08-27T09:17:34Z"
},
"load": [
5
],
"activities": [
{
"jobId": "job_4",
"type": "delivery"
}
],
"distance": 22190
},
{
"location": {
"lat": 52.463735398833514,
"lng": 13.303616544747737
},
"time": {
"arrival": "2021-08-27T09:24:00Z",
"departure": "2021-08-27T09:34:00Z"
},
"load": [
9
],
"activities": [
{
"jobId": "job_2",
"type": "pickup"
}
],
"distance": 29897
},
{
"location": {
"lat": 52.43119084052164,
"lng": 13.39255783460401
},
"time": {
"arrival": "2021-08-27T09:51:41Z",
"departure": "2021-08-27T09:51:41Z"
},
"load": [
0
],
"activities": [
{
"jobId": "arrival",
"type": "arrival"
}
],
"distance": 36384
}
],
"statistic": {
"cost": 552.719,
"distance": 31667,
"duration": 6521,
"times": {
"driving": 3881,
"serving": 2640,
"waiting": 0,
"break": 0
}
}
}
]
}このソリューションでは、各集荷・配達ジョブの最適な実行順序と合わせて、最適な車両、走行距離、各ジョブを実行する車両の合計積載量 (車両の容量に適合) と、走行、サービス、待機、シフト休憩の正確なタイミングを含むツアーの合計所要時間を確認できます。
複数の尺度
車両の容量は複数の尺度で指定できます。このフィーチャーは、たとえば、パレット数と重量の両面でトラックが過積載にならないようにする必要がある中距離物流会社で使用できます。この方法を使用すると、希望する単位でのアイテム数だけでなく、サイズや重量なども指定できます。たとえば、トラックを使用する場合は、パレット数とその重量を指定できます。容量の単位は累積的である必要があります。つまり、長さや高さなどの尺度を指定することはできませんが、たとえばユニットの重量を使用できます。ジョブの需要は同じ尺度で指定され、容量データが考慮されて計算されます。このような制約を設定するには、車両の容量とジョブの需要の両方をカンマで区切って正確に同じ順序で指定する必要があります。
以下では、容量がそれぞれ50ユニットと20ユニットの2台の車両を使用して、ルート検索問題の制約を指定する方法を説明します。この問題では、2件の集荷ジョブと2件の配達ジョブを実行する必要があり、ジョブの需要 (50、20) は車両の容量と同じ順序で指定されます。
{
"fleet": {
"types": [
{
"id": "069ea42ae3e9",
"profile": "car_1",
"costs": {
"fixed": 10.0,
"distance": 0.07,
"time": 0.1
},
"shifts": [
{
"start": {
"time": "2021-07-10T08:37:00Z",
"location": {
"lat": 52.530971,
"lng": 13.384915
}
},
"end": {
"time": "2021-07-10T17:37:00Z",
"location": {
"lat": 52.5281430596138,
"lng": 13.36381375834569
}
}
}
],
"capacity": [
50,20
],
"amount": 2
}
],
"profiles": [
{
"type": "car",
"name": "car_1"
}
]
},
"plan": {
"jobs": [
{
"id": "job_1",
"tasks": {
"pickups": [
{
"places": [
{
"location": {
"lat": 52.484104043903585,
"lng": 13.386732295521801
},
"duration": 840
}
],
"demand": [
50, 20
]
}
]
}
},
{
"id": "job_2",
"tasks": {
"pickups": [
{
"places": [
{
"location": {
"lat": 52.463735398833514,
"lng": 13.303616544747735
},
"duration": 600
}
],
"demand": [
50, 20
]
}
]
}
},
{
"id": "job_3",
"tasks": {
"deliveries": [
{
"places": [
{
"location": {
"lat": 52.542308727849075,
"lng": 13.350779211496564
},
"duration": 60
}
],
"demand": [
50, 20
]
}
]
}
},
{
"id": "job_4",
"tasks": {
"deliveries": [
{
"places": [
{
"location": {
"lat": 52.48460493700661,
"lng": 13.315372249087625
},
"duration": 1140
}
],
"demand": [
50, 20
]
}
]
}
}
]
}
} このような問題のソリューションを確認すると、2台の車両がそれぞれの容量と2つの尺度で指定されたジョブの需要に基づいて、集荷ジョブと配達ジョブを実行することがわかります。
{
"statistic": {
"cost": 3663.9000000000005,
"distance": 41390,
"duration": 7466,
"times": {
"driving": 4826,
"serving": 2640,
"waiting": 0,
"break": 0
}
},
"tours": [
{
"vehicleId": "069ea42ae3e9_2",
"typeId": "069ea42ae3e9",
"stops": [
{
"location": {
"lat": 52.530971,
"lng": 13.384915
},
"time": {
"arrival": "2021-07-10T08:37:00Z",
"departure": "2021-07-10T08:37:00Z"
},
"load": [
50,
20
],
"activities": [
{
"jobId": "departure",
"type": "departure"
}
],
"distance": 0
},
{
"location": {
"lat": 52.542308727849075,
"lng": 13.350779211496564
},
"time": {
"arrival": "2021-07-10T08:46:29Z",
"departure": "2021-07-10T08:47:29Z"
},
"load": [
0,
0
],
"activities": [
{
"jobId": "job_3",
"type": "delivery"
}
],
"distance": 8638
},
{
"location": {
"lat": 52.484104043903585,
"lng": 13.3867322955218
},
"time": {
"arrival": "2021-07-10T09:04:35Z",
"departure": "2021-07-10T09:18:35Z"
},
"load": [
50,
20
],
"activities": [
{
"jobId": "job_1",
"type": "pickup"
}
],
"distance": 12252
},
{
"location": {
"lat": 52.5281430596138,
"lng": 13.36381375834569
},
"time": {
"arrival": "2021-07-10T09:30:33Z",
"departure": "2021-07-10T09:30:33Z"
},
"load": [
0,
0
],
"activities": [
{
"jobId": "arrival",
"type": "arrival"
}
],
"distance": 22665
}
],
"statistic": {
"cost": 1642.0500000000002,
"distance": 18725,
"duration": 3213,
"times": {
"driving": 2313,
"serving": 900,
"waiting": 0,
"break": 0
}
}
},
{
"vehicleId": "069ea42ae3e9_1",
"typeId": "069ea42ae3e9",
"stops": [
{
"location": {
"lat": 52.530971,
"lng": 13.384915
},
"time": {
"arrival": "2021-07-10T08:37:00Z",
"departure": "2021-07-10T08:37:00Z"
},
"load": [
50,
20
],
"activities": [
{
"jobId": "departure",
"type": "departure"
}
],
"distance": 0
},
{
"location": {
"lat": 52.48460493700661,
"lng": 13.315372249087623
},
"time": {
"arrival": "2021-07-10T08:54:30Z",
"departure": "2021-07-10T09:13:30Z"
},
"load": [
0,
0
],
"activities": [
{
"jobId": "job_4",
"type": "delivery"
}
],
"distance": 3986
},
{
"location": {
"lat": 52.463735398833514,
"lng": 13.303616544747737
},
"time": {
"arrival": "2021-07-10T09:19:48Z",
"departure": "2021-07-10T09:29:48Z"
},
"load": [
50,
20
],
"activities": [
{
"jobId": "job_2",
"type": "pickup"
}
],
"distance": 13499
},
{
"location": {
"lat": 52.5281430596138,
"lng": 13.36381375834569
},
"time": {
"arrival": "2021-07-10T09:47:53Z",
"departure": "2021-07-10T09:47:53Z"
},
"load": [
0,
0
],
"activities": [
{
"jobId": "arrival",
"type": "arrival"
}
],
"distance": 19607
}
],
"statistic": {
"cost": 2021.8500000000001,
"distance": 22665,
"duration": 4253,
"times": {
"driving": 2513,
"serving": 1740,
"waiting": 0,
"break": 0
}
}
}
]
}需要が容量を超える場合
輸送されるアイテムの総数量 (需要) が、利用可能な車両の総容量を超える状況を考えてみましょう。この状況で優先度が指定されている場合は、ソリューションは主にジョブの優先度に基づいたものになります。ジョブに優先度が指定されていない場合は、すべての優先度が等しいことを意味し、最適化は挿入コスト (場所間の距離、時間枠の待機、サービス時間) に基づいて行われます。
たとえば、容量が3ユニットの車両があり、遂行する必要があるすべてのジョブの総需要が4であるとします。これらのジョブはすべて異なる場所にあり、各ジョブの需要は1を超えません。このようなシナリオの問題リクエストは、次のようになります。
{
"fleet": {
"types": [
{
"id": "d3e7bb8d20c5",
"profile": "car_1",
"costs": {
"fixed": 10.0,
"distance": 0.005,
"time": 0.07
},
"shifts": [
{
"start": {
"time": "2021-08-27T08:03:00Z",
"location": {
"lat": 52.530971,
"lng": 13.384915
}
},
"end": {
"time": "2021-08-27T19:03:00Z",
"location": {
"lat": 52.43119084052164,
"lng": 13.39255783460401
}
}
}
],
"capacity": [
3
],
"amount": 1
}
],
"profiles": [
{
"type": "car",
"name": "car_1"
}
]
},
"plan": {
"jobs": [
{
"id": "job_1",
"tasks": {
"pickups": [
{
"places": [
{
"location": {
"lat": 52.484104043903585,
"lng": 13.386732295521801
},
"duration": 840
}
],
"demand": [
1
]
}
]
}
},
{
"id": "job_2",
"tasks": {
"pickups": [
{
"places": [
{
"location": {
"lat": 52.463735398833514,
"lng": 13.303616544747735
},
"duration": 600
}
],
"demand": [
1
]
}
]
}
},
{
"id": "job_3",
"tasks": {
"pickups": [
{
"places": [
{
"location": {
"lat": 52.542308727849075,
"lng": 13.350779211496564
},
"duration": 60
}
],
"demand": [
1
]
}
]
}
},
{
"id": "job_4",
"tasks": {
"pickups": [
{
"places": [
{
"location": {
"lat": 52.48460493700661,
"lng": 13.315372249087625
},
"duration": 1140
}
],
"demand": [
1
]
}
]
}
}
]
}
}この問題のソリューションは次のようになります。
{
"statistic": {
"cost": 464.5600000000001,
"distance": 28346,
"duration": 4469,
"times": {
"driving": 2669,
"serving": 1800,
"waiting": 0,
"break": 0
}
},
"tours": [
{
"vehicleId": "d3e7bb8d20c5_1",
"typeId": "d3e7bb8d20c5",
"stops": [
{
"location": {
"lat": 52.530971,
"lng": 13.384915
},
"time": {
"arrival": "2021-08-27T08:03:00Z",
"departure": "2021-08-27T08:03:00Z"
},
"load": [
0
],
"activities": [
{
"jobId": "departure",
"type": "departure"
}
],
"distance": 0
},
{
"location": {
"lat": 52.542308727849075,
"lng": 13.350779211496564
},
"time": {
"arrival": "2021-08-27T08:11:12Z",
"departure": "2021-08-27T08:12:12Z"
},
"load": [
1
],
"activities": [
{
"jobId": "job_3",
"type": "pickup"
}
],
"distance": 3986
},
{
"location": {
"lat": 52.48460493700661,
"lng": 13.315372249087623
},
"time": {
"arrival": "2021-08-27T08:27:05Z",
"departure": "2021-08-27T08:46:05Z"
},
"load": [
2
],
"activities": [
{
"jobId": "job_4",
"type": "pickup"
}
],
"distance": 16455
},
{
"location": {
"lat": 52.463735398833514,
"lng": 13.303616544747737
},
"time": {
"arrival": "2021-08-27T08:51:25Z",
"departure": "2021-08-27T09:01:25Z"
},
"load": [
3
],
"activities": [
{
"jobId": "job_2",
"type": "pickup"
}
],
"distance": 20069
},
{
"location": {
"lat": 52.43119084052164,
"lng": 13.39255783460401
},
"time": {
"arrival": "2021-08-27T09:17:29Z",
"departure": "2021-08-27T09:17:29Z"
},
"load": [
0
],
"activities": [
{
"jobId": "arrival",
"type": "arrival"
}
],
"distance": 28659
}
],
"statistic": {
"cost": 464.5600000000001,
"distance": 28346,
"duration": 4469,
"times": {
"driving": 2669,
"serving": 1800,
"waiting": 0,
"break": 0
}
},
"shiftIndex": 0
}
],
"unassigned": [
{
"jobId": "job_1",
"reasons": [
{
"code": "CAPACITY_CONSTRAINT",
"description": "does not fit into any vehicle due to capacity",
"details": [
{
"vehicleId": "d3e7bb8d20c5_1",
"shiftIndex": 0
}
]
}
]
}
]
}このソリューションでは、各場所に関する車両の最適なルート検索結果と合わせて、ツアーの総コスト、所要時間、距離に関する情報を取得できます。同時に、超過需要のために現在のツアー内で車両が実行できないジョブについては、以下のように説明とともに表示されます:「CAPACITY_CONSTRAINT - does not fit into any vehicle due to capacity (容量の制約により、どの車両にも積載できません) 」。
この状況では、問題の定義を再検討する必要があります。車両を追加するか、車両を需要に適合する容量を持つ車両に変更するか、再積載オプションを使用して、再試行してください。
高度なヒント
容量と需要の相互関係は、車両が運搬できるアイテム数の制限など、他の目的にも使用できます。ジョブの需要を1に指定し、車両の容量をたとえば10に指定すると、車両は容量 (たとえば10) で指定された数を超えるアイテムを運搬できません。
次のステップ
詳細については、以下を参照してください。
- Submit a Vehicle Routing Problem to solve it synchronously (車両ルート検索問題を送信して同期的に解決する)
- Submit a Vehicle Routing Problem to solve it asynchronously (車両ルート検索問題を送信して非同期的に解決する)
26 日前の更新