Algorithm 处理器上的作业调度算法

Algorithm 处理器上的作业调度算法,algorithm,job-scheduling,np-complete,Algorithm,Job Scheduling,Np Complete,根据iehrlich的评论(谢谢,顺便说一句),术语“调度”可能有误导性,这可能是一个更合适的描述:给定一个矩阵N*N,找到一个将产生最大对角线和的行排列。 我有一组N个作业和N个处理器。所有处理器可以彼此不同。对于每个(作业、处理器)对,我都有在该处理器上运行的作业的性能。性能以IPC(每个周期的指令)来衡量 我试图找到一个时间表(1:1分配),最大化IPC的总金额。我可以用O(N!)检查所有可能的时间表,这是不可行的 然后,我尝试使用“稳定匹配”算法O(N^2),使用IPC对工作负载和处理器

根据iehrlich的评论(谢谢,顺便说一句),术语“调度”可能有误导性,这可能是一个更合适的描述:给定一个矩阵N*N,找到一个将产生最大对角线和的行排列。

我有一组N个作业和N个处理器。所有处理器可以彼此不同。对于每个(作业、处理器)对,我都有在该处理器上运行的作业的性能。性能以IPC(每个周期的指令)来衡量

我试图找到一个时间表(1:1分配),最大化IPC的总金额。我可以用O(N!)检查所有可能的时间表,这是不可行的

然后,我尝试使用“稳定匹配”算法O(N^2),使用IPC对工作负载和处理器的首选项进行排序。它运行速度非常快,并且返回一个不错的时间表,但不是最佳时间表

我的问题是:

1) 我真的希望稳定的匹配算法能够返回最佳分配。有人能解释一下它为什么失败吗?到目前为止,我最好的猜测是不同(作业、处理器)对之间是否存在联系。我还尝试了“无差异稳定匹配”算法,但没有成功我应该提到,该算法不会因为我的实现而失败。我正在寻找一个更具理论性的答案,解释为什么算法本身无法解决这个问题。


2) 你知道我可以用什么算法吗?甚至有一个吗?

稳定匹配是错误算法的原因是,您可能会得到一个匹配,即一对处理器各自喜欢对方的作业,但其中一个作业更喜欢它所在的处理器。切换会让人变得更糟,所以这种匹配是稳定的

然而,在你的问题中,我们关心的是全局最优。如果一份工作的改善程度超过了另一份工作的糟糕程度,你就要换工作了。对于全局最优,稳定匹配是必要的,但不是充分的


事实上,匈牙利算法是找到全局最优解的正确算法。

这方面有一个完整的计算机科学分支。实际上,它最初来自于生产管理。考虑阅读SistelsHelp,它看起来很有帮助。但是,在快速浏览之后,看起来所有的算法都是启发式的,不能保证返回最优的调度。我说“首先”是因为:)还有,你如何检查调度是否最优?还有,如果你对算法失败的原因感兴趣,您应该提供输入、实际输出和期望输出失败的代码。如果您只想快速原型化,scipy有匈牙利算法的实现,因此您无需自行实现。感谢您的解释!我刚刚使用scipy实现尝试了匈牙利算法。它返回最佳的时间表(我认为scipy实现可能是O(N^3),但我不确定)。感谢iehrlich和user3080953的宝贵评论。当然也要感谢你!仅供参考,我不得不否定IPC测量值,因为匈牙利算法使成本最小化(而不是最大化)