Java 作业调度:M个作业和N台机器
有5个作业(比如说Java 作业调度:M个作业和N台机器,java,algorithm,job-scheduling,Java,Algorithm,Job Scheduling,有5个作业(比如说J1,J2,J3,J4和J5)和4台机器(比如说M1,M2,M3和M4)。每个作业都需要机器,顺序如下所示: 作业集: J1: M1(8); M2(16); M4(12) J2: M1(20); M3(10); M2(18) J3: M3(12); M4(8); M1(15) J4: M4(14); M2(18) J5: M3(10); M1(15) 例如:J1在M1上需要8个时间单位;M2上有16个时间单位,M4上有12个时间单位 所有作业都可以并行运行,但
J1
,J2
,J3
,J4
和J5
)和4台机器(比如说M1
,M2
,M3
和M4
)。每个作业都需要机器,顺序如下所示:
作业集:
J1: M1(8); M2(16); M4(12)
J2: M1(20); M3(10); M2(18)
J3: M3(12); M4(8); M1(15)
J4: M4(14); M2(18)
J5: M3(10); M1(15)
例如:J1
在M1
上需要8个时间单位;M2上有16个时间单位,M4上有12个时间单位
所有作业都可以并行运行,但必须遵循机器上的执行顺序
例如:J1
只能在完成8个M1
单元后才能在M2
上运行(请参见上述作业集中的J1
),依此类推
目标:减少每台机器的空闲时间(从而减少总空闲时间),即最大限度地提高机器利用率
我们如何着手解决这个问题?我想知道是否有任何算法,我可以遵循开始与这个问题。感谢您为解决此问题提供的任何帮助。如果可能的话,我更喜欢在我的算法中使用java减少空闲时间相当于最小化计划的总长度(通常称为makespan)。您希望最小化完工时间 静态jobshop调度问题已有50多年的历史,因此对这一问题有着广泛的研究。最小化完工时间也是人们在这方面发表论文的最喜欢的目标,所以你有机会找到一些灵感
这个问题有点难处理,所以你要看的是一个算法,它提供了一个近似的结果。好的候选者是元启发式算法,如遗传算法、禁忌搜索(TS)、可变邻域搜索等等。就我所记得的,TS在测试结果上比其他算法表现得更好。你应该看看Nowicki和Smutnicki的工作(一种针对作业车间问题的快速禁忌搜索算法E Nowicki,C Smutnicki-管理科学,1996年,以及后续工作)。他们对TS的实现能够击败当时的基准测试结果。您更喜欢哪种语言?还是只需要逻辑?正在寻找一个想法,我更喜欢Java。请告诉我们一些您在哪里遇到这个问题的背景,您试图做些什么来解决它,以及它是如何失败的。我相信这个问题被称为“Job Shop Scheduling”在文献中:对于M>2,这个问题似乎是NP完全问题,这意味着如果你想确保得到最优解,你必须使用蛮力,即尝试所有可能的置换。谢谢你提供的信息。我会仔细阅读你建议的材料。