Algorithm 允许重叠的区间调度算法

Algorithm 允许重叠的区间调度算法,algorithm,job-scheduling,Algorithm,Job Scheduling,我偶然遇到了一个类似于经典的问题 然而,在我的例子中,我确实允许间隔之间的重叠-只是希望尽可能地将其最小化 有解决这个问题的标准算法吗?我没有在网上找到一个“轻松”的替代方案。我认为这个问题与任何经典的日程安排文献都没有很好的对应关系。我会尝试使用(例如:)作为一个整数程序来解决它 使这个问题变得困难的是,工作的顺序是未知的。否则,我们可能会编写一个动态程序。有效地处理连续时间将是棘手但可行的 类似地,对于混合整数规划公式的第一次尝试自然是在每个作业的开始时间使用一个变量,但是重叠函数是非常非凸

我偶然遇到了一个类似于经典的问题 然而,在我的例子中,我确实允许间隔之间的重叠-只是希望尽可能地将其最小化


有解决这个问题的标准算法吗?我没有在网上找到一个“轻松”的替代方案。

我认为这个问题与任何经典的日程安排文献都没有很好的对应关系。我会尝试使用(例如:)作为一个整数程序来解决它

使这个问题变得困难的是,工作的顺序是未知的。否则,我们可能会编写一个动态程序。有效地处理连续时间将是棘手但可行的

类似地,对于混合整数规划公式的第一次尝试自然是在每个作业的开始时间使用一个变量,但是重叠函数是非常非凸的,我看不到使用整数变量进行编码的好方法

我首先尝试的公式是量化时间,然后为每个有效(作业、开始时间)对创建一个0-1变量
x[j,s]
。然后,我们编写约束以强制每个作业只调度一次:

for all j, sum over s of x[j,s] = 1.
至于目标,我们有两种不同的选择。我将展示一个,但是有很多灵活性,只要运行
I+j
作业的一个时间单位比运行
I
作业的一个时间单位和运行
j
作业的另一个时间单位差

对于每次
t
,我们都会生成一个非负整数变量
y[t]
,它将表示在
t
上运行的多余作业的数量。我们编写约束:

for all t, -y[t] + sum over (j,s) overlapping t of x[j,s] ≤ 1.
从技术上讲,此约束仅强制
y[t]
大于或等于多余作业的数量。但由于目标的原因,最优解决方案将使其相等:

minimize sum over t of y[t].

您已经指定了两个目标,一个是显式的(最小化重叠),一个是隐式的来自间隔调度问题(最大化选择的间隔),但没有说明如何对它们进行优先级排序。@Davidisenstat,我有一堆作业需要在某个时间窗口运行。不管怎样。假设我提前知道执行时间。但我想以一种最小化执行重叠(以减少并发资源消耗)的方式将它们隔开。执行时间是否因作业而异?@davidesenstat是的。当间隔之间存在显著重叠时,执行时间是否会增加?谢谢。我正在考虑。