【发布时间】:2015-10-19 23:13:28
【问题描述】:
我有一个任务数组,其中每个任务都是具有以下属性的对象:
-
startTime:任务开始时间(previous finishTime + travelTime) -
serviceTime:完成任务所需的时间 -
waitTime:空闲时间(客观) -
finishTime:sum(starTime, serviceTime, waitTime) -
travelTime: 是时候做下一个任务了 -
earlyStart: 在这个时间之前任务可能不会开始 -
lateStart: 任务可能不迟于这个时间开始
用 LP 术语(忽略无聊的东西):
- 目标:最小化
waitTime - 受制于:
earlyStart <= startTimestartTime <= lateStart
顺序是固定的,所有作业必须按顺序一次执行一项。如果没有找到可行的解决方案,我将不返回任何内容,尽管在大多数情况下,我从一个可行的解决方案开始,但它不一定是最佳的。我在这方面的尝试花费了 O(n!) 时间,所以我很确定有一个更好的方法我没有考虑。这似乎是一个很常见的问题,我很确定它甚至不是 NP 完全的,但我找不到它的名称来进一步研究。我正在用 JavaScript 编写它,但欢迎任何想法、链接、伪代码或超高性能 C++ 实现!
【问题讨论】:
-
你说“订单是固定的”。优化器会做出哪些选择?优化器能否决定跳过某个作业,即使它在其窗口内?一次可以运行多少个作业?
-
好点,我更新了上面的最后一段。一次只能运行 1 个作业,并且不能跳过任何作业。优化器只能调整
waitTime变量,这反过来会影响任务的完成时间,从而导致后续任务的开始时间发生变化。
标签: javascript algorithm math optimization