ガイドAPIリファレンス
ガイド

複数の再積載地点を有効にする

車両の積載量には限りがあるため、1回の旅程ですべての商品を配送できない場合があります。したがって、シフト時間が許せば、より多くの商品を配達できるようにするために、車両は複数回のツアーを必要とする場合があります。reloads機能を使用すると、前回のツアーのすべてのタスクが完了した後、車両が集配センター (またはその他の場所) に戻り、さらにアイテムを受け取ることができます。

このユースケースの最も単純な例は、特定の積載量の車両と、その積載量を超える総需要のあるジョブがある場合です。車両の積載量に合わないジョブの一部はツアーに割り当てられないことが予想されます。したがって、車両の積載量を増やしたり車両を追加したりする機会はないものの、それでも既存の車両でツアーを完了する必要がある場合は、前のタスクが完了した後で車両がさらに商品を追加できるようにする再積載オプションを問題制約に追加する必要があります。再積載は、出発集配センター、配達場所または集荷場所、またはその他の場所など、さまざまな場所で行うことができます。次のように、再積載を行う正確なlocationとそのdurationとともに、再積載オプションを問題のfleet部分に追加する必要があります。

"reloads":[
   {
       "location":{
           "lat": 52.530976,
           "lng": 13.384916
       },
       "duration":60
   },
   {
       "location":{
           "lat": 52.530976,
           "lng": 13.384916
       },
       "duration":60
   },
]

車両の積載量がジョブの総需要 (積載量 - 3、需要 - 5) よりも小さい、つまり需要が車両の積載量を超えている単純な状況を考えてみましょう。このケースについては、このドキュメントの「容量制約付き配送計画問題を解決する」セクションで確認できます。前述の例の車両が旅程を完了できるように、問題にreloadsオプションを追加しましょう。以下の問題の例では、車両がツアーを開始したのと同じ場所にreloadsを追加しました。

問題

{
    "fleet": {
        "types": [
            {
                "id": "e429c9c1e6df",
                "profile": "car_bd5be9a38474",
                "costs": {
                    "fixed": 6.0,
                    "distance": 0.002,
                    "time": 0.007
                },
                "shifts": [
                    {
                        "start": {
                            "time": "2022-06-01T08:05:00Z",
                            "location": {
                                "lat": 52.530971,
                                "lng": 13.384915
                            }
                        },
                        "end": {
                            "time": "2022-06-01T18:05:00Z",
                            "location": {
                                "lat": 52.530971,
                                "lng": 13.384915
                            }
                        },
                        "reloads": [
                            {
                                "location": {
                                    "lat": 52.530971,
                                    "lng": 13.384915
                                },
                                "duration": 60
                            }
                        ]
                    }
                ],
                "capacity": [
                    3
                ],
                "amount": 1
            }
        ],
        "profiles": [
            {
                "type": "car",
                "name": "car_bd5be9a38474"
            }
        ]
    },
    "plan": {
        "jobs": [
            {
                "id": "job_1",
                "tasks": {
                    "pickups": [
                        {
                            "places": [
                                {
                                    "times": [
                                        [
                                            "2022-06-01T14:05:00Z",
                                            "2022-06-01T18:05:00Z"
                                        ]
                                    ],
                                    "location": {
                                        "lat": 52.44664947511696,
                                        "lng": 13.484988905387555
                                    },
                                    "duration": 300
                                }
                            ],
                            "demand": [
                                1
                            ]
                        }
                    ]
                }
            },
            {
                "id": "job_2",
                "tasks": {
                    "pickups": [
                        {
                            "places": [
                                {
                                    "times": [
                                        [
                                            "2022-06-01T08:05:00Z",
                                            "2022-06-01T13:05:00Z"
                                        ]
                                    ],
                                    "location": {
                                        "lat": 52.632489506294235,
                                        "lng": 13.341605471791963
                                    },
                                    "duration": 300
                                }
                            ],
                            "demand": [
                                1
                            ]
                        }
                    ]
                }
            },
            {
                "id": "job_3",
                "tasks": {
                    "pickups": [
                        {
                            "places": [
                                {
                                    "times": [
                                        [
                                            "2022-06-01T08:05:00Z",
                                            "2022-06-01T13:05:00Z"
                                        ]
                                    ],
                                    "location": {
                                        "lat": 52.5983459422347,
                                        "lng": 13.392007658723308
                                    },
                                    "duration": 300
                                }
                            ],
                            "demand": [
                                1
                            ]
                        }
                    ]
                }
            },
            {
                "id": "job_4",
                "tasks": {
                    "pickups": [
                        {
                            "places": [
                                {
                                    "times": [
                                        [
                                            "2022-06-01T08:05:00Z",
                                            "2022-06-01T12:05:00Z"
                                        ]
                                    ],
                                    "location": {
                                        "lat": 52.577856866026835,
                                        "lng": 13.423782100910442
                                    },
                                    "duration": 300
                                }
                            ],
                            "demand": [
                                1
                            ]
                        }
                    ]
                }
            },
	        {
                "id": "job_5",
                "tasks": {
                    "pickups": [
                        {
                            "places": [
                                {
                                    "times": [
                                        [
                                            "2022-06-01T08:05:00Z",
                                            "2022-06-01T13:05:00Z"
                                        ]
                                    ],
                                    "location": {
                                        "lat": 52.5983459422347,
                                        "lng": 13.392007658723308
                                    },
                                    "duration": 300
                                }
                            ],
                            "demand": [
                                1
                            ]
                        }
                    ]
                }
            }
        ]
    }
}

ソリューション

以下のソリューションから、3つのジョブを遂行し、その積載量をすべて使用した後、車両は再積載場所 (このケースでは開始集配センター) に向かい、その後、ツアーに残っている最後のジョブを遂行することがわかります。

{
    "statistic": {
        "cost": 273.482,
        "distance": 92161,
        "duration": 11880,
        "times": {
            "driving": 9568,
            "serving": 1560,
            "waiting": 752,
            "break": 0
        }
    },
    "tours": [
        {
            "vehicleId": "e429c9c1e6df_1",
            "typeId": "e429c9c1e6df",
            "stops": [
                {
                    "location": {
                        "lat": 52.530971,
                        "lng": 13.384915
                    },
                    "time": {
                        "arrival": "2022-06-01T08:05:00Z",
                        "departure": "2022-06-01T11:20:56Z"
                    },
                    "load": [
                        0
                    ],
                    "activities": [
                        {
                            "jobId": "departure",
                            "type": "departure"
                        }
                    ],
                    "distance": 0
                },
                {
                    "location": {
                        "lat": 52.577856866026835,
                        "lng": 13.423782100910442
                    },
                    "time": {
                        "arrival": "2022-06-01T11:38:11Z",
                        "departure": "2022-06-01T11:43:11Z"
                    },
                    "load": [
                        1
                    ],
                    "activities": [
                        {
                            "jobId": "job_4",
                            "type": "pickup"
                        }
                    ],
                    "distance": 16100
                },
                {
                    "location": {
                        "lat": 52.5983459422347,
                        "lng": 13.392007658723308
                    },
                    "time": {
                        "arrival": "2022-06-01T11:57:43Z",
                        "departure": "2022-06-01T12:07:43Z"
                    },
                    "load": [
                        3
                    ],
                    "activities": [
                        {
                            "jobId": "job_3",
                            "type": "pickup",
                            "location": {
                                "lat": 52.5983459422347,
                                "lng": 13.392007658723308
                            },
                            "time": {
                                "start": "2022-06-01T11:57:43Z",
                                "end": "2022-06-01T12:02:43Z"
                            }
                        },
                        {
                            "jobId": "job_5",
                            "type": "pickup",
                            "location": {
                                "lat": 52.5983459422347,
                                "lng": 13.392007658723308
                            },
                            "time": {
                                "start": "2022-06-01T12:02:43Z",
                                "end": "2022-06-01T12:07:43Z"
                            }
                        }
                    ],
                    "distance": 27415
                },
                {
                    "location": {
                        "lat": 52.530971,
                        "lng": 13.384915
                    },
                    "time": {
                        "arrival": "2022-06-01T12:32:18Z",
                        "departure": "2022-06-01T12:33:18Z"
                    },
                    "load": [
                        0
                    ],
                    "activities": [
                        {
                            "jobId": "reload",
                            "type": "reload"
                        }
                    ],
                    "distance": 36817
                },
                {
                    "location": {
                        "lat": 52.632489506294235,
                        "lng": 13.341605471791963
                    },
                    "time": {
                        "arrival": "2022-06-01T13:05:00Z",
                        "departure": "2022-06-01T13:10:00Z"
                    },
                    "load": [
                        1
                    ],
                    "activities": [
                        {
                            "jobId": "job_2",
                            "type": "pickup"
                        }
                    ],
                    "distance": 44396
                },
                {
                    "location": {
                        "lat": 52.44664947511696,
                        "lng": 13.484988905387556
                    },
                    "time": {
                        "arrival": "2022-06-01T13:52:28Z",
                        "departure": "2022-06-01T14:10:00Z"
                    },
                    "load": [
                        2
                    ],
                    "activities": [
                        {
                            "jobId": "job_1",
                            "type": "pickup"
                        }
                    ],
                    "distance": 65595
                },
                {
                    "location": {
                        "lat": 52.530971,
                        "lng": 13.384915
                    },
                    "time": {
                        "arrival": "2022-06-01T14:38:56Z",
                        "departure": "2022-06-01T14:38:56Z"
                    },
                    "load": [
                        0
                    ],
                    "activities": [
                        {
                            "jobId": "arrival",
                            "type": "arrival"
                        }
                    ],
                    "distance": 82587
                }
            ],
            "statistic": {
                "cost": 273.482,
                "distance": 92161,
                "duration": 11880,
                "times": {
                    "driving": 9568,
                    "serving": 1560,
                    "waiting": 752,
                    "break": 0
                }
            },
            "shiftIndex": 0
        }
    ]
}

これが基本的なreloadsオプションの仕組みですが、場合によっては、再積載を使用するときに他の制約を考慮する必要があります。以下では、複数の再積載があり、さらに再積載が集配センターの場所以外でも行われるサンプル問題を構築してみましょう。さらに、再積載場所は日中の特定の時間帯しか利用できないため、再積載の時間枠も考慮する必要があります。

Tour Planningでは、車両シフトごとに最大5つのreloadsを追加できます。各reloadsに異なるlocationdurationtimesを設定できます (任意)。

以下の例でも、需要が積載量を超える(積載量が5に対してジョブ需要が7)だけでなく、再積載に特定の時間帯がある状況であり、これを車両シフト時間の制約に追加します。また、積載量には集配センターだけでなく、任意の場所を追加できます。したがって、この例では、積載量の1つは車両の出発場所 (集配センター) で行われ、もう1つはジョブの場所の1つで行われます。

問題

{
    "fleet": {
        "types": [
            {
                "id": "e429c9c1e6df",
                "profile": "car_bd5be9a38474",
                "costs": {
                    "fixed": 6.0,
                    "distance": 0.002,
                    "time": 0.007
                },
                "shifts": [
                    {
                        "start": {
                            "time": "2022-06-01T08:05:00Z",
                            "location": {
                                "lat": 52.530971,
                                "lng": 13.384915
                            }
                        },
                        "end": {
                            "time": "2022-06-01T18:05:00Z",
                            "location": {
                                "lat": 52.530971,
                                "lng": 13.384915
                            }
                        },
                        "reloads": [
                            {
                                 "times": [
                                    [
                                         "2022-06-01T09:05:00Z",
                                         "2022-06-01T13:05:00Z"
                                    ]
                                ],
                                "location": {
                                    "lat": 52.530971,
                                    "lng": 13.384915
                                },
                                "duration": 60
                            },
                            {
                                "times": [
                                    [
                                        "2022-06-01T13:05:00Z",
                                        "2022-06-01T18:05:00Z"
                                    ]
                                ],
                                "location": {
                                    "lat": 52.57541509905306,
                                    "lng": 13.409878314747719
                                },
                                "duration": 60
                            }
                        ]
                    }
                ],
                "capacity": [
                    5
                ],
                "amount": 1
            }
        ],
        "profiles": [
            {
                "type": "car",
                "name": "car_bd5be9a38474"
            }
        ]
    },
    "plan": {
        "jobs": [
            {
                "id": "job_1",
                "tasks": {
                    "pickups": [
                        {
                            "places": [
                                {
                                    "times": [
                                        [
                                            "2022-06-01T09:05:00Z",
                                            "2022-06-01T13:05:00Z"
                                        ]
                                    ],
                                    "location": {
                                        "lat": 52.44664947511696,
                                        "lng": 13.484988905387555
                                    },
                                    "duration": 300
                                }
                            ],
                            "demand": [
                                1
                            ]
                        }
                    ]
                }
            },
            {
                "id": "job_2",
                "tasks": {
                    "pickups": [
                        {
                            "places": [
                                {
                                    "times": [
                                        [
                                            "2022-06-01T08:05:00Z",
                                            "2022-06-01T13:05:00Z"
                                        ]
                                    ],
                                    "location": {
                                        "lat": 52.632489506294235,
                                        "lng": 13.341605471791963
                                    },
                                    "duration": 300
                                }
                            ],
                            "demand": [
                                1
                            ]
                        }
                    ]
                }
            },
            {
                "id": "job_3",
                "tasks": {
                    "pickups": [
                        {
                            "places": [
                                {
                                    "times": [
                                        [
                                            "2022-06-01T08:05:00Z",
                                            "2022-06-01T13:05:00Z"
                                        ]
                                    ],
                                    "location": {
                                        "lat": 52.5983459422347,
                                        "lng": 13.392007658723308
                                    },
                                    "duration": 300
                                }
                            ],
                            "demand": [
                                1
                            ]
                        }
                    ]
                }
            },
            {
                "id": "job_4",
                "tasks": {
                    "pickups": [
                        {
                            "places": [
                                {
                                    "times": [
                                        [
                                            "2022-06-01T08:05:00Z",
                                            "2022-06-01T12:05:00Z"
                                        ]
                                    ],
                                    "location": {
                                        "lat": 52.577856866026835,
                                        "lng": 13.423782100910442
                                    },
                                    "duration": 300
                                }
                            ],
                            "demand": [
                                1
                            ]
                        }
                    ]
                }
            },
            {
                "id": "job_5",
                "tasks": {
                    "pickups": [
                        {
                            "places": [
                                {
                                    "times": [
                                        [
                                            "2022-06-01T09:05:00Z",
                                            "2022-06-01T14:05:00Z"
                                        ]
                                    ],
                                    "location": {
                                        "lat": 52.57541509905306,
                                        "lng": 13.409878314747719
                                    },
                                    "duration": 300
                                }
                            ],
                            "demand": [
                                1
                            ]
                        }
                    ]
                }
            },
            {
                "id": "job_6",
                "tasks": {
                    "pickups": [
                        {
                            "places": [
                                {
                                    "times": [
                                        [
                                            "2022-06-01T09:05:00Z",
                                            "2022-06-01T14:05:00Z"
                                        ]
                                    ],
                                    "location": {
                                        "lat": 52.486595664301646,
                                        "lng": 13.423728674699783
                                    },
                                    "duration": 300
                                }
                            ],
                            "demand": [
                                1
                            ]
                        }
                    ]
                }
            },
            {
                "id": "job_7",
                "tasks": {
                    "pickups": [
                        {
                            "places": [
                                {
                                    "times": [
                                        [
                                            "2022-06-01T08:05:00Z",
                                            "2022-06-01T13:05:00Z"
                                        ]
                                    ],
                                    "location": {
                                        "lat": 52.471783668934606,
                                        "lng": 13.469038314828833
                                    },
                                    "duration": 300
                                }
                            ],
                            "demand": [
                                1
                            ]
                        }
                    ]
                }
            }
        ]
    }
}

ソリューション

以下のソリューションから、車両はjob_2job_3job_6job_1job_7を処理してから、指定された時間枠内に集配センターで再積載を行い、その後job_5job_4を処理することがわかります。

{
    "statistic": {
        "cost": 260.9809999999999,
        "distance": 81441,
        "duration": 13157,
        "times": {
            "driving": 10997,
            "serving": 2160,
            "waiting": 0,
            "break": 0
        }
    },
    "tours": [
        {
            "vehicleId": "e429c9c1e6df_1",
            "typeId": "e429c9c1e6df",
            "stops": [
                {
                    "location": {
                        "lat": 52.530971,
                        "lng": 13.384915
                    },
                    "time": {
                        "arrival": "2022-06-01T08:05:00Z",
                        "departure": "2022-06-01T08:05:00Z"
                    },
                    "load": [
                        0
                    ],
                    "activities": [
                        {
                            "jobId": "departure",
                            "type": "departure"
                        }
                    ],
                    "distance": 0
                },
                {
                    "location": {
                        "lat": 52.632489506294235,
                        "lng": 13.341605471791963
                    },
                    "time": {
                        "arrival": "2022-06-01T08:36:42Z",
                        "departure": "2022-06-01T08:41:42Z"
                    },
                    "load": [
                        1
                    ],
                    "activities": [
                        {
                            "jobId": "job_2",
                            "type": "pickup"
                        }
                    ],
                    "distance": 6640
                },
                {
                    "location": {
                        "lat": 52.5983459422347,
                        "lng": 13.392007658723308
                    },
                    "time": {
                        "arrival": "2022-06-01T09:05:56Z",
                        "departure": "2022-06-01T09:10:56Z"
                    },
                    "load": [
                        2
                    ],
                    "activities": [
                        {
                            "jobId": "job_3",
                            "type": "pickup"
                        }
                    ],
                    "distance": 8022
                },
                {
                    "location": {
                        "lat": 52.486595664301646,
                        "lng": 13.423728674699785
                    },
                    "time": {
                        "arrival": "2022-06-01T09:49:34Z",
                        "departure": "2022-06-01T09:54:34Z"
                    },
                    "load": [
                        3
                    ],
                    "activities": [
                        {
                            "jobId": "job_6",
                            "type": "pickup"
                        }
                    ],
                    "distance": 24199
                },
                {
                    "location": {
                        "lat": 52.44664947511696,
                        "lng": 13.484988905387556
                    },
                    "time": {
                        "arrival": "2022-06-01T10:10:22Z",
                        "departure": "2022-06-01T10:15:22Z"
                    },
                    "load": [
                        4
                    ],
                    "activities": [
                        {
                            "jobId": "job_1",
                            "type": "pickup"
                        }
                    ],
                    "distance": 29363
                },
                {
                    "location": {
                        "lat": 52.471783668934606,
                        "lng": 13.469038314828833
                    },
                    "time": {
                        "arrival": "2022-06-01T10:24:23Z",
                        "departure": "2022-06-01T10:29:23Z"
                    },
                    "load": [
                        5
                    ],
                    "activities": [
                        {
                            "jobId": "job_7",
                            "type": "pickup"
                        }
                    ],
                    "distance": 37457
                },
                {
                    "location": {
                        "lat": 52.530971,
                        "lng": 13.384915
                    },
                    "time": {
                        "arrival": "2022-06-01T10:56:26Z",
                        "departure": "2022-06-01T10:57:26Z"
                    },
                    "load": [
                        0
                    ],
                    "activities": [
                        {
                            "jobId": "reload",
                            "type": "reload"
                        }
                    ],
                    "distance": 45849
                },
                {
                    "location": {
                        "lat": 52.57541509905306,
                        "lng": 13.40987831474772
                    },
                    "time": {
                        "arrival": "2022-06-01T11:12:34Z",
                        "departure": "2022-06-01T11:17:34Z"
                    },
                    "load": [
                        1
                    ],
                    "activities": [
                        {
                            "jobId": "job_5",
                            "type": "pickup"
                        }
                    ],
                    "distance": 61949
                },
                {
                    "location": {
                        "lat": 52.577856866026835,
                        "lng": 13.423782100910442
                    },
                    "time": {
                        "arrival": "2022-06-01T11:21:24Z",
                        "departure": "2022-06-01T11:26:24Z"
                    },
                    "load": [
                        2
                    ],
                    "activities": [
                        {
                            "jobId": "job_4",
                            "type": "pickup"
                        }
                    ],
                    "distance": 73264
                },
                {
                    "location": {
                        "lat": 52.530971,
                        "lng": 13.384915
                    },
                    "time": {
                        "arrival": "2022-06-01T11:44:17Z",
                        "departure": "2022-06-01T11:44:17Z"
                    },
                    "load": [
                        0
                    ],
                    "activities": [
                        {
                            "jobId": "arrival",
                            "type": "arrival"
                        }
                    ],
                    "distance": 82666
                }
            ],
            "statistic": {
                "cost": 260.9809999999999,
                "distance": 81441,
                "duration": 13157,
                "times": {
                    "driving": 10997,
                    "serving": 2160,
                    "waiting": 0,
                    "break": 0
                }
            },
            "shiftIndex": 0
        }
    ]
}

次のステップ

詳細については、以下を参照してください。