问题我有一些工作要在P秒内安排在无限数量的工作机器上,这些机器之间具有相关性,即。对于每个工作,都有一组工作,只有在完成这项工作后才能安排。在任何机器上以j th 秒调度i th 作业的利润是f(i,j),这是正的。
我的目标是通过在最多P秒内完成一次调度每个作业来最大化总利润。
我们可以假设所有作业都可以在P秒内安排。
事先知道一切,即离线问题。
0 <= f(i,j)&lt; = B.对于所有我,j。
和依赖数是O(n)。
这个问题容易吗? [可能是由于有限约束]
我的方法
为简单起见,首先假设对于一项工作,其利润与时间无关。
即f(i,j)对于所有i而言与j无关,并且仅依赖于i
然后任何适合P秒的拓扑排序都可以。
如果没有依赖关系,那么我们也会为每项工作选择最高的利润给予时间,这也很容易。
但问题是,当工作的利润随着时间的推移随着依赖性而变化时,在这种情况下,我无法想到任何通用算法。
我在处理作业之间的依赖关系时遇到问题,在线调度算法的依赖单元任务是否有任何资源?
请分享任何可以帮助的想法......
更新:我已添加各种参数的界限,因为它们可能是分析问题所必需的。
答案 0 :(得分:3)
这是一个动态编程问题。让我们简单地假设所有利润都是非负的。
将F(i, j)
定义为通过安排i
'工作以及所有依赖于它的工作(递归向下)在j
或更晚的时间来获得的最大利润{1}}第二次,或-1
如果不可能的话。
F(i, j)
-1
F(i_1, j+1)
-1
i_1
i
f(i, j)
F(i_1, j+1)
F(i, j+1)
。否则,它是(F(i, 0)
加上i
)或A
之和的较大者。
然后你的答案是B
对所有工作C
的总和而没有依赖关系。
(如果没有无限制的机器,这个问题就会变得很难......)
以下是如何使用您的问题对MAX-SAT方程进行建模的示例,其中每个子句都包含所有未被否定的项或所有项被否定。
假设我们有4个布尔变量D
,(A && B) || (!A && !C) || (!B && !C && !D) || (C && D)
,!
和&&
。作为一个例子,假设我们想要对方程||
做最大的可满足性。 (J1 > J2
表示不是,J1
表示,而J2
表示或。)
让我们使用符号J1 > (J2, J3)
进行J1) is a dependency for both
必须在and
之前运行的作业。并在括号上分发,以便A1 > A2 > A3
表示B1 > B2 > B3
J2 C1 > C2 > C3
J3`。
现在为布尔人模拟,我们设置了12个工作岗位。 D1 > D2 > D3
,A2, B2, C2, D2
,2
和3
。然后,作业A
必须在时间A2
或1
发生,布尔11
是声明的真实情况&#34; 2
发生在时间2&#34 ;.同样对于其他布尔人。
无论他们在什么时间工作,所有这些工作都会获得3
的利润。我们引入了3到3个与布尔一样多的工作,但到目前为止这很简单。
现在让我们为子句添加作业。如果这些作业在几秒钟内1
或(A2, B2) > J1
以及(A && B)
运行,则每个作业的利润为J2 > (A2, C2))
。因此,当您找到布尔值的设置时,将达到您的最大利润,从而最大限度地增加条款的数量。
(!A && !C)
模拟J3 > (B2, C2, D2)
的真相。
(!B && !C && !D)
模拟(C2, D2) > J4
的真相。
(C && D)
模拟(A && !B)
的真相。
{{1}}模拟{{1}}的真相。
这又是一个简单的转变,添加的工作数量等于条款数量。
因此,我们通过调度对MAX-SAT问题进行建模。但我们无法对所有这些进行建模。特别是我们无法使用{{1}}这样的混合否定来构建子句。因此,尽管MAX-SAT是NP-hard,但这种限制版本可能不是。然而,MAX-SAT的其他限制版本,例如MAX-2SAT,往往是NP难的,我的直觉是这个也是。
但是对于这种直觉的证明或反对,你应该在更合适的论坛上提问。与https://cs.stackexchange.com/一样。