Javascript 有效减少时间受限任务之间的等待时间
我有一个任务数组,其中每个任务都是一个具有以下属性的对象:Javascript 有效减少时间受限任务之间的等待时间,javascript,algorithm,math,optimization,Javascript,Algorithm,Math,Optimization,我有一个任务数组,其中每个任务都是一个具有以下属性的对象: startTime:任务开始的时间(previousfinishtime+travelTime) serviceTime:任务完成所需的时间 等待时间:空闲时间(目标) finishTime:sum(开始时间、服务时间、等待时间) travelTime:到达下一个任务的时间 earlyStart:在此时间之前,任务可能无法启动 lateStart:任务可能不晚于此时间启动 在LP术语中(忽略无聊的东西): 目标:最小化等待时间 受
:任务开始的时间(startTime
)previousfinishtime+travelTime
:任务完成所需的时间serviceTime
- 等待时间:空闲时间(目标)
:finishTime
sum(开始时间、服务时间、等待时间)
:到达下一个任务的时间travelTime
:在此时间之前,任务可能无法启动earlyStart
:任务可能不晚于此时间启动lateStart
- 目标:最小化等待时间
- 受制于:
earlyStart这个问题相当于最小化最后一个任务的开始时间和第一个任务的开始时间的差异。等价性的结果是,如果在中间推送任何任务的开始时间,则整个等待时间不会改变(任务减少后的等待时间与任务扩展前的等待时间相同)。 一个简单的O(n^2)算法如下:
- 让第一项任务尽可能晚地开始
- 迭代剩余的任务
- 根据上一个任务查找尽可能早的开始时间
- 如果这是不可能的(因为这一时间晚于
),则将上一个任务尽可能少地推向开始位置。如果它随后与前一个任务发生冲突,则在那里执行相同的操作,以此类推lateStart
- 如果您需要将第一个任务推到其
早期启动之前,则没有解决方案
如果可以将所有任务(或包含第一个和最后一个任务或不包含任何任务的子集)按固定时间推送,则可能没有唯一的解决方案。您说“顺序是固定的”优化器可以做出什么选择?优化器可以决定跳过作业吗,即使它在其窗口内?一次可以运行多少个作业?很好,我更新了上面的最后一段。一次只能运行一个作业&不能跳过任何作业。优化器只能调整
变量,这反过来会影响性能任务的完成时间,这会导致以下任务的开始时间发生变化。啊,这就是我一直在努力解决的步骤2中的反向循环。不必担心唯一的解决方案,因为等待时间发生在哪里都无关紧要。这看起来很棒,干杯。waitTime