优化具有固定时间的议程约会之间的路由

时间:2015-12-21 18:49:33

标签: javascript algorithm optimization

对于个人项目,我正在寻找一种方法/算法来优化包含特定时间约会的议程,包含暂停。但我似乎无法解决这个问题。我认为说清楚的最好方法是举个例子:

实施例

对于10个不同的销售人员,我有10个不同的议程,每个销售人员有时会在9:00,10:00,11:00~17:00之间包含约会或暂停(即空位)。这让我最终得到了每个时间段我需要一个推销员的位置列表(由于可能的暂停而在0到10之间变化)。

我的问题是:我可以使用哪种实施方式以最节省时间和成本的方式从上述数据中编制10个议程?这最好能够设定每个议程的最大约会数量,并记住约会之间的最长旅行时间。

我在JavaScript中这样做,但其他语言的例子当然很受欢迎。

1 个答案:

答案 0 :(得分:1)

这是一个日程安排问题,请查看Job shopNurse scheduling。它是NP难的,所以除了在非常有限或特定的情况下,你不会找到最佳解决方案。但是存在可以快速给出好结果的算法,这是一个让你开始的算法。

假设您有一系列会议M,其中包含n个元素。会议有开始时间和停止时间。 (我们忽略了会议中的暂停,你不适合那里的另一次会议)进一步假设你有一系列具有S元素的销售人员时间表k

sort M according to the END TIME of each meeting
let FinalTime be the time when the last meeting starts
for each salesman in S
    let t be the first available timeslot on the salesman's schedule
    while t <= FinalTime
        assign the unassigned meeting with start time >= t that finishes first to the salesman
        set t to the end time of the assigned meeting

通过选择首先结束的会议,我们将在更长时间之前支持缩短会议,并能够在我们的日程安排中安排更多会议。这假设会议的会议次数超过了可以纳入的时间表。