最大走行距離の制約を伴う VRP
一部の特定のタイプの車両、特に電気自動車で VRP を解決する場合、最大走行距離が重要な制約になります。デポで EV を扱う場合、車両タイプに依存する電力蓄積の制限があり、フルバッテリー充電から次の充電ステーションまでの最大走行距離にも制限があると想定する必要があります。 そのため、電気自動車の VRP を解決する際には、車両の最大距離および充電ステーションの場所を考慮する必要があります。
同じデポでシフトを開始および終了し、1 回のフル充電で最大走行距離 200km をドライブできる電気自動車を使用している場合の問題を検討してみましょう。これらの制約を設定するには、上限に maxDistance パラメーターを追加し、最大距離をメートル単位で指定する必要があります。
その後、通常どおり、場所と需要を伴うジョブを追加して問題を設定します。ただし、車両が持つ maxDistance を含む制約を考慮して問題が解決されるので、これらの制限事項によって実行できないジョブは実行されません。最大走行距離が 200 km で、さまざまな場所で配達作業が発生する EV の問題を解決してみましょう。
Problems
{
"fleet": {
"types": [
{
"id": "Vehicle_1",
"profile": "car",
"costs": {
"fixed": 7.0,
"distance": 0.003,
"time": 0.007
},
"shifts": [
{
"start": {
"time": "2021-05-10T09:00:00Z",
"location": {
"lat": 52.57222054041576,
"lng": 13.353990529709701
}
},
"end": {
"time": "2021-05-10T21:01:00Z",
"location": {
"lat": 52.57222054041576,
"lng": 13.353990529709701
}
}
}
],
"capacity": [
12
],
"limits": {
"maxDistance": 200000
},
"amount": 1
}
],
"profiles": [
{
"type": "car",
"name": "car"
}
]
},
"plan": {
"jobs": [
{
"id": "job_1",
"tasks": {
"deliveries": [
{
"places": [
{
"times": [
[
"2021-05-10T12:00:00Z",
"2021-05-10T12:30:00Z"
]
],
"location": {
"lat": 52.471480179496325,
"lng": 13.33652317328511
},
"duration": 180
}
],
"demand": [
1
]
}
]
}
},
{
"id": "job_2",
"tasks": {
"deliveries": [
{
"places": [
{
"times": [
[
"2021-05-10T09:30:00Z",
"2021-05-10T10:00:00Z"
]
],
"location": {
"lat": 52.48262965703328,
"lng": 13.306346002296653
},
"duration": 300
}
],
"demand": [
1
]
}
]
}
},
{
"id": "job_3",
"tasks": {
"deliveries": [
{
"places": [
{
"times": [
[
"2021-05-10T10:00:00Z",
"2021-05-10T10:30:00Z"
]
],
"location": {
"lat": 52.48262965703328,
"lng": 13.306346002296653
},
"duration": 60
}
],
"demand": [
1
]
}
]
}
},
{
"id": "job_4",
"tasks": {
"deliveries": [
{
"places": [
{
"times": [
[
"2021-05-10T10:30:00Z",
"2021-05-10T11:00:00Z"
]
],
"location": {
"lat": 52.52013955092772,
"lng": 13.332585890518219
},
"duration": 300
}
],
"demand": [
1
]
}
]
}
},
{
"id": "job_5",
"tasks": {
"deliveries": [
{
"places": [
{
"times": [
[
"2021-05-10T11:00:00Z",
"2021-05-10T11:30:00Z"
]
],
"location": {
"lat": 52.52013955092772,
"lng": 13.332585890518219
},
"duration": 720
}
],
"demand": [
1
]
}
]
}
},
{
"id": "job_6",
"tasks": {
"deliveries": [
{
"places": [
{
"times": [
[
"2021-05-10T11:30:00Z",
"2021-05-10T12:00:00Z"
]
],
"location": {
"lat": 52.471480179496325,
"lng": 13.33652317328512
},
"duration": 720
}
],
"demand": [
1
]
}
]
}
},
{
"id": "job_7",
"tasks": {
"deliveries": [
{
"places": [
{
"times": [
[
"2021-05-10T12:00:00Z",
"2021-05-10T12:30:00Z"
]
],
"location": {
"lat": 52.471480179496325,
"lng": 13.33652317328511
},
"duration": 720
}
],
"demand": [
1
]
}
]
}
}
]
}
}
Solution
この問題の解決方法は次のとおりです。
{
"statistic": {
"cost": 217.291,
"distance": 45387,
"duration": 10590,
"times": {
"driving": 4181,
"serving": 3000,
"waiting": 3409,
"break": 0
}
},
"tours": [
{
"vehicleId": "Vehicle_1_1",
"typeId": "Vehicle_1",
"stops": [
{
"location": {
"lat": 52.57222054041576,
"lng": 13.3539905297097
},
"time": {
"arrival": "2021-05-10T09:00:00Z",
"departure": "2021-05-10T09:42:00Z"
},
"load": [
7
],
"activities": [
{
"jobId": "departure",
"type": "departure"
}
],
"distance": 0
},
{
"location": {
"lat": 52.48262965703328,
"lng": 13.306346002296651
},
"time": {
"arrival": "2021-05-10T10:00:00Z",
"departure": "2021-05-10T10:06:00Z"
},
"load": [
5
],
"activities": [
{
"jobId": "job_2",
"type": "delivery",
"location": {
"lat": 52.48262965703328,
"lng": 13.306346002296651
},
"time": {
"start": "2021-05-10T10:00:00Z",
"end": "2021-05-10T10:05:00Z"
}
},
{
"jobId": "job_3",
"type": "delivery",
"location": {
"lat": 52.48262965703328,
"lng": 13.306346002296651
},
"time": {
"start": "2021-05-10T10:05:00Z",
"end": "2021-05-10T10:06:00Z"
}
}
],
"distance": 13742
},
{
"location": {
"lat": 52.52013955092772,
"lng": 13.33258589051822
},
"time": {
"arrival": "2021-05-10T10:20:57Z",
"departure": "2021-05-10T11:12:00Z"
},
"load": [
3
],
"activities": [
{
"jobId": "job_4",
"type": "delivery",
"location": {
"lat": 52.52013955092772,
"lng": 13.33258589051822
},
"time": {
"start": "2021-05-10T10:20:57Z",
"end": "2021-05-10T10:35:00Z"
}
},
{
"jobId": "job_5",
"type": "delivery",
"location": {
"lat": 52.52013955092772,
"lng": 13.33258589051822
},
"time": {
"start": "2021-05-10T10:35:00Z",
"end": "2021-05-10T11:12:00Z"
}
}
],
"distance": 21047
},
{
"location": {
"lat": 52.471480179496325,
"lng": 13.33652317328512
},
"time": {
"arrival": "2021-05-10T11:25:14Z",
"departure": "2021-05-10T11:42:00Z"
},
"load": [
2
],
"activities": [
{
"jobId": "job_6",
"type": "delivery"
}
],
"distance": 27784
},
{
"location": {
"lat": 52.471480179496325,
"lng": 13.33652317328511
},
"time": {
"arrival": "2021-05-10T11:42:00Z",
"departure": "2021-05-10T12:15:00Z"
},
"load": [
0
],
"activities": [
{
"jobId": "job_1",
"type": "delivery",
"location": {
"lat": 52.471480179496325,
"lng": 13.33652317328511
},
"time": {
"start": "2021-05-10T11:42:00Z",
"end": "2021-05-10T12:03:00Z"
}
},
{
"jobId": "job_7",
"type": "delivery",
"location": {
"lat": 52.471480179496325,
"lng": 13.33652317328511
},
"time": {
"start": "2021-05-10T12:03:00Z",
"end": "2021-05-10T12:15:00Z"
}
}
],
"distance": 27784
},
{
"location": {
"lat": 52.57222054041576,
"lng": 13.3539905297097
},
"time": {
"arrival": "2021-05-10T12:38:30Z",
"departure": "2021-05-10T12:38:30Z"
},
"load": [
0
],
"activities": [
{
"jobId": "arrival",
"type": "arrival"
}
],
"distance": 45390
}
],
"statistic": {
"cost": 217.291,
"distance": 45387,
"duration": 10590,
"times": {
"driving": 4181,
"serving": 3000,
"waiting": 3409,
"break": 0
}
}
}
]
}
このソリューションの統計情報から、指定された制約について、配達、配達、待機の車両総コスト、距離、所要時間、時間を確認できます。