複数のシフトと休憩を伴う VRP

ジョブの時間枠の指定、運行のシフト時間と休憩を組み合わせて使用することで、より正確かつ高度な方法で複数のシフトと休憩を含む VRP を構築できます。これは、車両のシフトと休憩、ジョブの実行時間を 1 つの問題で異なる日ごとに個別に指定できることを意味します。たとえば、 1 週間または他の期間内に複数の配達または集荷を行う必要があります。 運行管理上、特定のシフト時間と休憩時間がある車両があり、曜日によって異なると想定しています。 このような問題を解決する 1 つの方法は、毎日個別に車両の制約を指定して、毎回別個の問題を作成することです Tour Planning API では、 1 つの問題で 1 週間または任意の期間、このような制約を指定できます。

複数のシフトを使用する最も簡単なケースは、時間の制約を受けずに実行できるジョブのリストが長く、車両の台数が限られている場合です。 つまり、 1 シフト以内に実行できないジョブの量が明らかになります。 この場合、車両に複数のシフトを設定して、ジョブが最適な方法で複数のシフトの範囲内で実行されるようにすることができます。

時間的制約のない15のジョブがあり、積載量が 10 の車両が 1 台あり、1 日のシフトが 3 時間しかないといった例を考えてみましょう。明らかに、車両はこれらのすべての作業を一度に実行することはできません。そのため、車両への複数のシフトを指定して、数日以内に最も有利な方法で作業を実行できるようにします。 そのためには、車両のシフト時間に日付を追加する必要があります。 この場合、 4 つのシフトを追加することにしました。

  • シフト 1 : 2021-10-23T09:00:00Z - 2021-10-23T12:00:00Z
  • シフト 2 : 2021-10-24T09:00:00Z - 2021-10-24T12:00:00Z
  • シフト 3 : 2021-10-25T09:00:00Z - 2021-10-25T12:00:00Z
  • シフト 4 : 2021-10-26T09:00:00Z - 2021-10-26T12:00:00Z

この例の問題は次のようになります。

{
    "fleet": {
        "types": [
            {
                "id": "Vehicle_1",
                "profile": "car",
                "costs": {
                    "fixed": 10.0,
                    "distance": 0.002,
                    "time": 0.003
                },
                "shifts": [
                    {
                        "start": {
                            "time": "2021-10-23T09:00:00Z",
                            "location": {
                                "lat": 51.059188,
                                "lng": 13.540317
                            }
                        },
                        "end": {
                            "time": "2021-10-23T12:00:00Z",
                            "location": {
                                "lat": 51.059188,
                                "lng": 13.540317
                            }
                        }
                    },
                    {
                        "start": {
                            "time": "2021-10-24T09:00:00Z",
                            "location": {
                                "lat": 51.059188,
                                "lng": 13.540317
                            }
                        },
                        "end": {
                            "time": "2021-10-24T12:00:00Z",
                            "location": {
                                "lat": 51.059188,
                                "lng": 13.540317
                            }
                        }
                    },
                    {
                        "start": {
                            "time": "2021-10-25T09:00:00Z",
                            "location": {
                                "lat": 51.059188,
                                "lng": 13.540317
                            }
                        },
                        "end": {
                            "time": "2021-10-25T12:00:00Z",
                            "location": {
                                "lat": 51.059188,
                                "lng": 13.540317
                            }
                        }
                  },
                  {
                        "start": {
                            "time": "2021-10-26T09:00:00Z",
                            "location": {
                                "lat": 51.059188,
                                "lng": 13.540317
                            }
                        },
                        "end": {
                            "time": "2021-10-26T12:00:00Z",
                            "location": {
                                "lat": 51.059188,
                                "lng": 13.540317
                            }
                        }
                    }
                ],
                "capacity": [
                    10
                ],
                "amount": 1
            }
        ],
        "profiles": [
            {
                "type": "car",
                "name": "car"
            }
        ]
    },
    "plan": {
        "jobs": [
            {
                "id": "Job_1",
                "tasks": {
                    "pickups": [
                        {
                            "places": [
                                {
                                    "location": {
                                        "lat": 51.05238,
                                        "lng": 13.74114
                                    },
                                    "duration": 1350
                                }
                            ],
                            "demand": [
                                1
                            ]
                        }
                    ]
                }
            },
            {
                "id": "Job_2",
                "tasks": {
                    "pickups": [
                        {
                            "places": [
                                {
                                    "location": {
                                        "lat": 51.06099,
                                        "lng": 13.75245
                                    },
                                    "duration": 1350
                                }
                            ],
                            "demand": [
                                1
                            ]
                        }
                    ]
                }
            },
            {
                "id": "Job_3",
                "tasks": {
                    "pickups": [
                        {
                            "places": [
                                {
                                    "location": {
                                        "lat": 51.08511,
                                        "lng": 13.76875
                                    },
                                    "duration": 1350
                                }
                            ],
                            "demand": [
                                1
                            ]
                        }
                    ]
                }
            },
            {
                "id": "Job_4",
                "tasks": {
                    "pickups": [
                        {
                            "places": [
                                {
                                    "location": {
                                        "lat": 51.1323847,
                                        "lng": 13.7779515
                                    },
                                    "duration": 1350
                                }
                            ],
                            "demand": [
                                1
                            ]
                        }
                    ]
                }
            },
            {
                "id": "Job_5",
                "tasks": {
                    "pickups": [
                        {
                            "places": [
                                {
                                    "location": {
                                        "lat": 51.11716,
                                        "lng": 13.73054
                                    },
                                    "duration": 1350
                                }
                            ],
                            "demand": [
                                1
                            ]
                        }
                    ]
                }
            },
            {
                "id": "Job_6",
                "tasks": {
                    "deliveries": [
                        {
                            "places": [
                                {
                                    "location": {
                                        "lat": 51.12308,
                                        "lng": 13.76406
                                    },
                                    "duration": 1350
                                }
                            ],
                            "demand": [
                                1
                            ]
                        }
                    ]
                }
            },
            {
                "id": "Job_7",
                "tasks": {
                    "deliveries": [
                        {
                            "places": [
                                {
                                    "location": {
                                        "lat": 51.08588,
                                        "lng": 13.72637
                                    },
                                    "duration": 1350
                                }
                            ],
                            "demand": [
                                1
                            ]
                        }
                    ]
                }
            },
            {
                "id": "Job_8",
                "tasks": {
                    "deliveries": [
                        {
                            "places": [
                                {
                                    "location": {
                                        "lat": 51.08588,
                                        "lng": 13.72637
                                    },
                                    "duration": 1350
                                }
                            ],
                            "demand": [
                                1
                            ]
                        }
                    ]
                }
            },
            {
                "id": "Job_9",
                "tasks": {
                    "deliveries": [
                        {
                            "places": [
                                {
                                    "location": {
                                        "lat": 51.08588,
                                        "lng": 13.72637
                                    },
                                    "duration": 1350
                                }
                            ],
                            "demand": [
                                1
                            ]
                        }
                    ]
                }
            },
            {
                "id": "Job_10",
                "tasks": {
                    "deliveries": [
                        {
                            "places": [
                                {
                                    "location": {
                                        "lat": 51.18588,
                                        "lng": 13.52637
                                    },
                                    "duration": 1350
                                }
                            ],
                            "demand": [
                                1
                            ]
                        }
                    ]
                }
            },
            {
                "id": "Job_11",
                "tasks": {
                    "deliveries": [
                        {
                            "places": [
                                {
                                    "location": {
                                        "lat": 51.10588,
                                        "lng": 13.79637
                                    },
                                    "duration": 1350
                                }
                            ],
                            "demand": [
                                1
                            ]
                        }
                    ]
                }
            },
            {
                "id": "Job_12",
                "tasks": {
                    "deliveries": [
                        {
                            "places": [
                                {
                                    "location": {
                                        "lat": 51.01588,
                                        "lng": 13.52637
                                    },
                                    "duration": 1350
                                }
                            ],
                            "demand": [
                                1
                            ]
                        }
                    ]
                }
            },
            {
                "id": "Job_13",
                "tasks": {
                    "deliveries": [
                        {
                            "places": [
                                {
                                    "location": {
                                        "lat": 51.08588,
                                        "lng": 13.62637
                                    },
                                    "duration": 1350
                                }
                            ],
                            "demand": [
                                1
                            ]
                        }
                    ]
                }
            },
            {
                "id": "Job_14",
                "tasks": {
                    "deliveries": [
                        {
                            "places": [
                                {
                                    "location": {
                                        "lat": 51.00088,
                                        "lng": 13.02637
                                    },
                                    "duration": 1350
                                }
                            ],
                            "demand": [
                                1
                            ]
                        }
                    ]
                }
            },
            {
                "id": "Job_15",
                "tasks": {
                    "deliveries": [
                        {
                            "places": [
                                {
                                    "location": {
                                        "lat": 51.06866,
                                        "lng": 13.77273
                                    },
                                    "duration": 1350
                                }
                            ],
                            "demand": [
                                1
                            ]
                        }
                    ]
                }
            }
        ]
    }
}

A ソリューションから確認できます。ツアーは、車両の 4 シフト以内に作業が配分されるように最適化され、次のように実施されます。 10 月 23 日 5 人、 10 月 24 日 5 人、 10 月 25 日 1 人、 10 月 26 日 4 人。

{
    "statistic": {
        "cost": 673.386,
        "distance": 262603,
        "duration": 36060,
        "times": {
            "driving": 15810,
            "serving": 20250,
            "waiting": 0,
            "break": 0
        }
    },
    "tours": [
        {
            "vehicleId": "Vehicle_1_1",
            "typeId": "Vehicle_1",
            "stops": [
                {
                    "location": {
                        "lat": 51.059188,
                        "lng": 13.540317
                    },
                    "time": {
                        "arrival": "2021-10-24T09:00:00Z",
                        "departure": "2021-10-24T09:00:00Z"
                    },
                    "load": [
                        2
                    ],
                    "activities": [
                        {
                            "jobId": "departure",
                            "type": "departure"
                        }
                    ]
                },
                {
                    "location": {
                        "lat": 51.05238,
                        "lng": 13.74114
                    },
                    "time": {
                        "arrival": "2021-10-24T09:23:14Z",
                        "departure": "2021-10-24T09:45:44Z"
                    },
                    "load": [
                        3
                    ],
                    "activities": [
                        {
                            "jobId": "Job_1",
                            "type": "pickup"
                        }
                    ]
                },
                {
                    "location": {
                        "lat": 51.06099,
                        "lng": 13.75245
                    },
                    "time": {
                        "arrival": "2021-10-24T09:50:59Z",
                        "departure": "2021-10-24T10:13:29Z"
                    },
                    "load": [
                        4
                    ],
                    "activities": [
                        {
                            "jobId": "Job_2",
                            "type": "pickup"
                        }
                    ]
                },
                {
                    "location": {
                        "lat": 51.06866,
                        "lng": 13.77273
                    },
                    "time": {
                        "arrival": "2021-10-24T10:16:40Z",
                        "departure": "2021-10-24T10:39:10Z"
                    },
                    "load": [
                        3
                    ],
                    "activities": [
                        {
                            "jobId": "Job_15",
                            "type": "delivery"
                        }
                    ]
                },
                {
                    "location": {
                        "lat": 51.08511,
                        "lng": 13.76875
                    },
                    "time": {
                        "arrival": "2021-10-24T10:45:22Z",
                        "departure": "2021-10-24T11:07:52Z"
                    },
                    "load": [
                        4
                    ],
                    "activities": [
                        {
                            "jobId": "Job_3",
                            "type": "pickup"
                        }
                    ]
                },
                {
                    "location": {
                        "lat": 51.10588,
                        "lng": 13.79637
                    },
                    "time": {
                        "arrival": "2021-10-24T11:13:48Z",
                        "departure": "2021-10-24T11:36:18Z"
                    },
                    "load": [
                        3
                    ],
                    "activities": [
                        {
                            "jobId": "Job_11",
                            "type": "delivery"
                        }
                    ]
                },
                {
                    "location": {
                        "lat": 51.059188,
                        "lng": 13.540317
                    },
                    "time": {
                        "arrival": "2021-10-24T11:57:06Z",
                        "departure": "2021-10-24T11:57:06Z"
                    },
                    "load": [
                        0
                    ],
                    "activities": [
                        {
                            "jobId": "arrival",
                            "type": "arrival"
                        }
                    ]
                }
            ],
            "statistic": {
                "cost": 152.36999999999998,
                "distance": 55246,
                "duration": 10626,
                "times": {
                    "driving": 3876,
                    "serving": 6750,
                    "waiting": 0,
                    "break": 0
                }
            },
            "shiftIndex": 1
        },
        {
            "vehicleId": "Vehicle_1_1",
            "typeId": "Vehicle_1",
            "stops": [
                {
                    "location": {
                        "lat": 51.059188,
                        "lng": 13.540317
                    },
                    "time": {
                        "arrival": "2021-10-26T09:00:00Z",
                        "departure": "2021-10-26T09:00:00Z"
                    },
                    "load": [
                        2
                    ],
                    "activities": [
                        {
                            "jobId": "departure",
                            "type": "departure"
                        }
                    ]
                },
                {
                    "location": {
                        "lat": 51.18588,
                        "lng": 13.52637
                    },
                    "time": {
                        "arrival": "2021-10-26T09:28:01Z",
                        "departure": "2021-10-26T09:50:31Z"
                    },
                    "load": [
                        1
                    ],
                    "activities": [
                        {
                            "jobId": "Job_10",
                            "type": "delivery"
                        }
                    ]
                },
                {
                    "location": {
                        "lat": 51.1323847,
                        "lng": 13.7779515
                    },
                    "time": {
                        "arrival": "2021-10-26T10:16:25Z",
                        "departure": "2021-10-26T10:38:55Z"
                    },
                    "load": [
                        2
                    ],
                    "activities": [
                        {
                            "jobId": "Job_4",
                            "type": "pickup"
                        }
                    ]
                },
                {
                    "location": {
                        "lat": 51.12308,
                        "lng": 13.76406
                    },
                    "time": {
                        "arrival": "2021-10-26T10:43:05Z",
                        "departure": "2021-10-26T11:05:35Z"
                    },
                    "load": [
                        1
                    ],
                    "activities": [
                        {
                            "jobId": "Job_6",
                            "type": "delivery"
                        }
                    ]
                },
                {
                    "location": {
                        "lat": 51.11716,
                        "lng": 13.73054
                    },
                    "time": {
                        "arrival": "2021-10-26T11:11:20Z",
                        "departure": "2021-10-26T11:33:50Z"
                    },
                    "load": [
                        2
                    ],
                    "activities": [
                        {
                            "jobId": "Job_5",
                            "type": "pickup"
                        }
                    ]
                },
                {
                    "location": {
                        "lat": 51.059188,
                        "lng": 13.540317
                    },
                    "time": {
                        "arrival": "2021-10-26T11:49:06Z",
                        "departure": "2021-10-26T11:49:06Z"
                    },
                    "load": [
                        0
                    ],
                    "activities": [
                        {
                            "jobId": "arrival",
                            "type": "arrival"
                        }
                    ]
                }
            ],
            "statistic": {
                "cost": 180.524,
                "distance": 70043,
                "duration": 10146,
                "times": {
                    "driving": 4746,
                    "serving": 5400,
                    "waiting": 0,
                    "break": 0
                }
            },
            "shiftIndex": 3
        },
        {
            "vehicleId": "Vehicle_1_1",
            "typeId": "Vehicle_1",
            "stops": [
                {
                    "location": {
                        "lat": 51.059188,
                        "lng": 13.540317
                    },
                    "time": {
                        "arrival": "2021-10-23T09:00:00Z",
                        "departure": "2021-10-23T09:00:00Z"
                    },
                    "load": [
                        5
                    ],
                    "activities": [
                        {
                            "jobId": "departure",
                            "type": "departure"
                        }
                    ]
                },
                {
                    "location": {
                        "lat": 51.08588,
                        "lng": 13.62637
                    },
                    "time": {
                        "arrival": "2021-10-23T09:13:53Z",
                        "departure": "2021-10-23T09:36:23Z"
                    },
                    "load": [
                        4
                    ],
                    "activities": [
                        {
                            "jobId": "Job_13",
                            "type": "delivery"
                        }
                    ]
                },
                {
                    "location": {
                        "lat": 51.08588,
                        "lng": 13.72637
                    },
                    "time": {
                        "arrival": "2021-10-23T09:51:23Z",
                        "departure": "2021-10-23T10:58:53Z"
                    },
                    "load": [
                        1
                    ],
                    "activities": [
                        {
                            "jobId": "Job_9",
                            "type": "delivery",
                            "location": {
                                "lat": 51.08588,
                                "lng": 13.72637
                            },
                            "time": {
                                "start": "2021-10-23T09:51:23Z",
                                "end": "2021-10-23T10:13:53Z"
                            }
                        },
                        {
                            "jobId": "Job_7",
                            "type": "delivery",
                            "location": {
                                "lat": 51.08588,
                                "lng": 13.72637
                            },
                            "time": {
                                "start": "2021-10-23T10:13:53Z",
                                "end": "2021-10-23T10:36:23Z"
                            }
                        },
                        {
                            "jobId": "Job_8",
                            "type": "delivery",
                            "location": {
                                "lat": 51.08588,
                                "lng": 13.72637
                            },
                            "time": {
                                "start": "2021-10-23T10:36:23Z",
                                "end": "2021-10-23T10:58:53Z"
                            }
                        }
                    ]
                },
                {
                    "location": {
                        "lat": 51.01588,
                        "lng": 13.52637
                    },
                    "time": {
                        "arrival": "2021-10-23T11:20:08Z",
                        "departure": "2021-10-23T11:42:38Z"
                    },
                    "load": [
                        0
                    ],
                    "activities": [
                        {
                            "jobId": "Job_12",
                            "type": "delivery"
                        }
                    ]
                },
                {
                    "location": {
                        "lat": 51.059188,
                        "lng": 13.540317
                    },
                    "time": {
                        "arrival": "2021-10-23T11:55:00Z",
                        "departure": "2021-10-23T11:55:00Z"
                    },
                    "load": [
                        0
                    ],
                    "activities": [
                        {
                            "jobId": "arrival",
                            "type": "arrival"
                        }
                    ]
                }
            ],
            "statistic": {
                "cost": 148.944,
                "distance": 53722,
                "duration": 10500,
                "times": {
                    "driving": 3750,
                    "serving": 6750,
                    "waiting": 0,
                    "break": 0
                }
            },
            "shiftIndex": 0
        },
        {
            "vehicleId": "Vehicle_1_1",
            "typeId": "Vehicle_1",
            "stops": [
                {
                    "location": {
                        "lat": 51.059188,
                        "lng": 13.540317
                    },
                    "time": {
                        "arrival": "2021-10-25T09:00:00Z",
                        "departure": "2021-10-25T09:00:00Z"
                    },
                    "load": [
                        1
                    ],
                    "activities": [
                        {
                            "jobId": "departure",
                            "type": "departure"
                        }
                    ]
                },
                {
                    "location": {
                        "lat": 51.00088,
                        "lng": 13.02637
                    },
                    "time": {
                        "arrival": "2021-10-25T09:28:45Z",
                        "departure": "2021-10-25T09:51:15Z"
                    },
                    "load": [
                        0
                    ],
                    "activities": [
                        {
                            "jobId": "Job_14",
                            "type": "delivery"
                        }
                    ]
                },
                {
                    "location": {
                        "lat": 51.059188,
                        "lng": 13.540317
                    },
                    "time": {
                        "arrival": "2021-10-25T10:19:48Z",
                        "departure": "2021-10-25T10:19:48Z"
                    },
                    "load": [
                        0
                    ],
                    "activities": [
                        {
                            "jobId": "arrival",
                            "type": "arrival"
                        }
                    ]
                }
            ],
            "statistic": {
                "cost": 191.548,
                "distance": 83592,
                "duration": 4788,
                "times": {
                    "driving": 3438,
                    "serving": 1350,
                    "waiting": 0,
                    "break": 0
                }
            },
            "shiftIndex": 2
        }
    ]
}

さらに、日によってシフト時間が異なる車両によって、特定の時間的制約を伴う 10 件のジョブを実行する必要がある状況についても考えてみましょう。この場合、車両のシフト時間だけでなく、シフトの日付も指定する必要があります。

今回の例では、車両は、以下の通り利用できると仮定しましょう。

  • 10 月 23 日 8:00 ~ 21:00
  • 10 月 24 日 8:00 ~ 15:00
  • 10 月 25 日 10:00 ~ 21:00

そのため、日付に応じてシフトが指定されます。ジョブの時間帯を指定する場合も、同じ方法が適用されます。時間に加え特定の日付にジョブを実行する必要がある場合は、日付を指定する必要があります。

これらの制約を考慮すると、この問題は次のようになります。

{
    "fleet": {
        "types": [
            {
                "id": "Vehicle_1",
                "profile": "car",
                "costs": {
                    "fixed": 10.0,
                    "distance": 0.002,
                    "time": 0.003
                },
                "shifts": [
                    {
                        "start": {
                            "time": "2021-10-23T08:00:00Z",
                            "location": {
                                "lat": 51.059188,
                                "lng": 13.540317
                            }
                        },
                        "end": {
                            "time": "2021-10-23T21:00:00Z",
                            "location": {
                                "lat": 51.059188,
                                "lng": 13.540317
                            }
                        }
                    },
                    {
                        "start": {
                            "time": "2021-10-24T08:00:00Z",
                            "location": {
                                "lat": 51.059188,
                                "lng": 13.540317
                            }
                        },
                        "end": {
                            "time": "2021-10-24T21:15:00Z",
                            "location": {
                                "lat": 51.059188,
                                "lng": 13.540317
                            }
                        }
                    },
                    {
                        "start": {
                            "time": "2021-10-25T10:00:00Z",
                            "location": {
                                "lat": 51.059188,
                                "lng": 13.540317
                            }
                        },
                        "end": {
                            "time": "2021-10-25T21:00:00Z",
                            "location": {
                                "lat": 51.059188,
                                "lng": 13.540317
                            }
                        }
                  }
                ],
                "capacity": [
                    10
                ],
                "amount": 1
            }
        ],
        "profiles": [
            {
                "type": "car",
                "name": "car"
            }
        ]
    },
    "plan": {
        "jobs": [
            {
                "id": "Job_1",
                "tasks": {
                    "pickups": [
                        {
                            "places": [
                                {
                                    "times": [
                                        [
                                            "2021-10-23T08:30:00Z",
                                            "2021-10-23T09:00:00Z"
                                        ]
                                    ],
                                    "location": {
                                        "lat": 51.05238,
                                        "lng": 13.74114
                                    },
                                    "duration": 1350
                                }
                            ],
                            "demand": [
                                1
                            ]
                        }
                    ]
                }
            },
            {
                "id": "Job_2",
                "tasks": {
                    "pickups": [
                        {
                            "places": [
                                {
                                    "times": [
                                        [
                                            "2021-10-23T09:05:00Z",
                                            "2021-10-23T09:30:00Z"
                                        ]
                                    ],
                                    "location": {
                                        "lat": 51.06099,
                                        "lng": 13.75245
                                    },
                                    "duration": 1350
                                }
                            ],
                            "demand": [
                                1
                            ]
                        }
                    ]
                }
            },
            {
                "id": "Job_3",
                "tasks": {
                    "pickups": [
                        {
                            "places": [
                                {
                                    "times": [
                                        [
                                            "2021-10-23T09:35:00Z",
                                            "2021-10-23T10:00:00Z"
                                        ]
                                    ],
                                    "location": {
                                        "lat": 51.08511,
                                        "lng": 13.76875
                                    },
                                    "duration": 1350
                                }
                            ],
                            "demand": [
                                1
                            ]
                        }
                    ]
                }
            },
            {
                "id": "Job_4",
                "tasks": {
                    "pickups": [
                        {
                            "places": [
                                {
                                    "times": [
                                        [
                                            "2021-10-23T10:05:00Z",
                                            "2021-10-23T10:30:00Z"
                                        ]
                                    ],
                                    "location": {
                                        "lat": 51.1323847,
                                        "lng": 13.7779515
                                    },
                                    "duration": 1350
                                }
                            ],
                            "demand": [
                                1
                            ]
                        }
                    ]
                }
            },
            {
                "id": "Job_5",
                "tasks": {
                    "pickups": [
                        {
                            "places": [
                                {
                                    "times": [
                                        [
                                            "2021-10-23T10:35:00Z",
                                            "2021-10-23T11:00:00Z"
                                        ]
                                    ],
                                    "location": {
                                        "lat": 51.11716,
                                        "lng": 13.73054
                                    },
                                    "duration": 1350
                                }
                            ],
                            "demand": [
                                1
                            ]
                        }
                    ]
                }
            },
            {
                "id": "Job_6",
                "tasks": {
                    "deliveries": [
                        {
                            "places": [
                                {
                                    "times": [
                                        [
                                            "2021-10-24T15:01:00Z",
                                            "2021-10-24T15:30:00Z"
                                        ]
                                    ],
                                    "location": {
                                        "lat": 51.12308,
                                        "lng": 13.76406
                                    },
                                    "duration": 1350
                                }
                            ],
                            "demand": [
                                1
                            ]
                        }
                    ]
                }
            },
            {
                "id": "Job_7",
                "tasks": {
                    "deliveries": [
                        {
                            "places": [
                                {
                                    "times": [
                                        [
                                            "2021-10-24T15:35:00Z",
                                            "2021-10-24T16:05:00Z"
                                        ]
                                    ],
                                    "location": {
                                        "lat": 51.08588,
                                        "lng": 13.72637
                                    },
                                    "duration": 1350
                                }
                            ],
                            "demand": [
                                1
                            ]
                        }
                    ]
                }
            },
            {
                "id": "Job_8",
                "tasks": {
                    "deliveries": [
                        {
                            "places": [
                                {
                                    "times": [
                                        [
                                            "2021-10-24T16:10:00Z",
                                            "2021-10-24T16:40:00Z"
                                        ]
                                    ],
                                    "location": {
                                        "lat": 51.08588,
                                        "lng": 13.72637
                                    },
                                    "duration": 1350
                                }
                            ],
                            "demand": [
                                1
                            ]
                        }
                    ]
                }
            },
            {
                "id": "Job_9",
                "tasks": {
                    "deliveries": [
                        {
                            "places": [
                                {
                                    "times": [
                                        [
                                            "2021-10-25T16:45:00Z",
                                            "2021-10-25T17:10:00Z"
                                        ]
                                    ],
                                    "location": {
                                        "lat": 51.08588,
                                        "lng": 13.72637
                                    },
                                    "duration": 1350
                                }
                            ],
                            "demand": [
                                1
                            ]
                        }
                    ]
                }
            },
            {
                "id": "Job_10",
                "tasks": {
                    "deliveries": [
                        {
                            "places": [
                                {
                                    "times": [
                                        [
                                            "2021-10-25T17:15:00Z",
                                            "2021-10-25T17:40:00Z"
                                        ]
                                    ],
                                    "location": {
                                        "lat": 51.06866,
                                        "lng": 13.77273
                                    },
                                    "duration": 1350
                                }
                            ],
                            "demand": [
                                1
                            ]
                        }
                    ]
                }
            }
        ]
    }
}

この解決策から、ツアーは日付や時間枠、その日の車両のシフトスケジュールを考慮して、特定の作業を解決するように最適化されていることがわかります。

  • jobs_9job_10 は 10月 25 日に実行されます
  • job_1job_2job_3job_4 および job_5 は 10 月 23 日に実行されます
  • job_6job_7job_8 は 10 月 24 日に

同じ方法で、重複しない最大 7 つの時間帯 / シフトのツアーを計画できます。

{
    "statistic": {
        "cost": 403.375,
        "distance": 151859,
        "duration": 23219,
        "times": {
            "driving": 9719,
            "serving": 13500,
            "waiting": 0,
            "break": 0
        }
    },
    "tours": [
        {
            "vehicleId": "Vehicle_1_1",
            "typeId": "Vehicle_1",
            "stops": [
                {
                    "location": {
                        "lat": 51.059188,
                        "lng": 13.540317
                    },
                    "time": {
                        "arrival": "2021-10-23T08:00:00Z",
                        "departure": "2021-10-23T08:14:01Z"
                    },
                    "load": [
                        0
                    ],
                    "activities": [
                        {
                            "jobId": "departure",
                            "type": "departure"
                        }
                    ]
                },
                {
                    "location": {
                        "lat": 51.05238,
                        "lng": 13.74114
                    },
                    "time": {
                        "arrival": "2021-10-23T08:37:15Z",
                        "departure": "2021-10-23T08:59:45Z"
                    },
                    "load": [
                        1
                    ],
                    "activities": [
                        {
                            "jobId": "Job_1",
                            "type": "pickup"
                        }
                    ]
                },
                {
                    "location": {
                        "lat": 51.06099,
                        "lng": 13.75245
                    },
                    "time": {
                        "arrival": "2021-10-23T09:05:00Z",
                        "departure": "2021-10-23T09:27:30Z"
                    },
                    "load": [
                        2
                    ],
                    "activities": [
                        {
                            "jobId": "Job_2",
                            "type": "pickup"
                        }
                    ]
                },
                {
                    "location": {
                        "lat": 51.08511,
                        "lng": 13.76875
                    },
                    "time": {
                        "arrival": "2021-10-23T09:35:15Z",
                        "departure": "2021-10-23T09:57:45Z"
                    },
                    "load": [
                        3
                    ],
                    "activities": [
                        {
                            "jobId": "Job_3",
                            "type": "pickup"
                        }
                    ]
                },
                {
                    "location": {
                        "lat": 51.1323847,
                        "lng": 13.7779515
                    },
                    "time": {
                        "arrival": "2021-10-23T10:08:35Z",
                        "departure": "2021-10-23T10:31:05Z"
                    },
                    "load": [
                        4
                    ],
                    "activities": [
                        {
                            "jobId": "Job_4",
                            "type": "pickup"
                        }
                    ]
                },
                {
                    "location": {
                        "lat": 51.11716,
                        "lng": 13.73054
                    },
                    "time": {
                        "arrival": "2021-10-23T10:39:21Z",
                        "departure": "2021-10-23T11:01:51Z"
                    },
                    "load": [
                        5
                    ],
                    "activities": [
                        {
                            "jobId": "Job_5",
                            "type": "pickup"
                        }
                    ]
                },
                {
                    "location": {
                        "lat": 51.059188,
                        "lng": 13.540317
                    },
                    "time": {
                        "arrival": "2021-10-23T11:17:07Z",
                        "departure": "2021-10-23T11:17:07Z"
                    },
                    "load": [
                        0
                    ],
                    "activities": [
                        {
                            "jobId": "arrival",
                            "type": "arrival"
                        }
                    ]
                }
            ],
            "statistic": {
                "cost": 156.89999999999998,
                "distance": 56971,
                "duration": 10986,
                "times": {
                    "driving": 4236,
                    "serving": 6750,
                    "waiting": 0,
                    "break": 0
                }
            },
            "shiftIndex": 0
        },
        {
            "vehicleId": "Vehicle_1_1",
            "typeId": "Vehicle_1",
            "stops": [
                {
                    "location": {
                        "lat": 51.059188,
                        "lng": 13.540317
                    },
                    "time": {
                        "arrival": "2021-10-24T08:00:00Z",
                        "departure": "2021-10-24T14:56:47Z"
                    },
                    "load": [
                        3
                    ],
                    "activities": [
                        {
                            "jobId": "departure",
                            "type": "departure"
                        }
                    ]
                },
                {
                    "location": {
                        "lat": 51.12308,
                        "lng": 13.76406
                    },
                    "time": {
                        "arrival": "2021-10-24T15:15:39Z",
                        "departure": "2021-10-24T15:38:09Z"
                    },
                    "load": [
                        2
                    ],
                    "activities": [
                        {
                            "jobId": "Job_6",
                            "type": "delivery"
                        }
                    ]
                },
                {
                    "location": {
                        "lat": 51.08588,
                        "lng": 13.72637
                    },
                    "time": {
                        "arrival": "2021-10-24T15:47:30Z",
                        "departure": "2021-10-24T16:32:30Z"
                    },
                    "load": [
                        0
                    ],
                    "activities": [
                        {
                            "jobId": "Job_7",
                            "type": "delivery",
                            "location": {
                                "lat": 51.08588,
                                "lng": 13.72637
                            },
                            "time": {
                                "start": "2021-10-24T15:47:30Z",
                                "end": "2021-10-24T16:10:00Z"
                            }
                        },
                        {
                            "jobId": "Job_8",
                            "type": "delivery",
                            "location": {
                                "lat": 51.08588,
                                "lng": 13.72637
                            },
                            "time": {
                                "start": "2021-10-24T16:10:00Z",
                                "end": "2021-10-24T16:32:30Z"
                            }
                        }
                    ]
                },
                {
                    "location": {
                        "lat": 51.059188,
                        "lng": 13.540317
                    },
                    "time": {
                        "arrival": "2021-10-24T16:48:33Z",
                        "departure": "2021-10-24T16:48:33Z"
                    },
                    "load": [
                        0
                    ],
                    "activities": [
                        {
                            "jobId": "arrival",
                            "type": "arrival"
                        }
                    ]
                }
            ],
            "statistic": {
                "cost": 130.63400000000001,
                "distance": 50258,
                "duration": 6706,
                "times": {
                    "driving": 2656,
                    "serving": 4050,
                    "waiting": 0,
                    "break": 0
                }
            },
            "shiftIndex": 1
        },
        {
            "vehicleId": "Vehicle_1_1",
            "typeId": "Vehicle_1",
            "stops": [
                {
                    "location": {
                        "lat": 51.059188,
                        "lng": 13.540317
                    },
                    "time": {
                        "arrival": "2021-10-25T10:00:00Z",
                        "departure": "2021-10-25T16:29:32Z"
                    },
                    "load": [
                        2
                    ],
                    "activities": [
                        {
                            "jobId": "departure",
                            "type": "departure"
                        }
                    ]
                },
                {
                    "location": {
                        "lat": 51.08588,
                        "lng": 13.72637
                    },
                    "time": {
                        "arrival": "2021-10-25T16:45:00Z",
                        "departure": "2021-10-25T17:07:30Z"
                    },
                    "load": [
                        1
                    ],
                    "activities": [
                        {
                            "jobId": "Job_9",
                            "type": "delivery"
                        }
                    ]
                },
                {
                    "location": {
                        "lat": 51.06866,
                        "lng": 13.77273
                    },
                    "time": {
                        "arrival": "2021-10-25T17:16:11Z",
                        "departure": "2021-10-25T17:38:41Z"
                    },
                    "load": [
                        0
                    ],
                    "activities": [
                        {
                            "jobId": "Job_10",
                            "type": "delivery"
                        }
                    ]
                },
                {
                    "location": {
                        "lat": 51.059188,
                        "lng": 13.540317
                    },
                    "time": {
                        "arrival": "2021-10-25T18:01:39Z",
                        "departure": "2021-10-25T18:01:39Z"
                    },
                    "load": [
                        0
                    ],
                    "activities": [
                        {
                            "jobId": "arrival",
                            "type": "arrival"
                        }
                    ]
                }
            ],
            "statistic": {
                "cost": 115.84100000000001,
                "distance": 44630,
                "duration": 5527,
                "times": {
                    "driving": 2827,
                    "serving": 2700,
                    "waiting": 0,
                    "break": 0
                }
            },
            "shiftIndex": 2
        }
    ]
}

」に一致する結果は 件です

    」に一致する結果はありません