最佳作业间隔算法

时间:2018-09-24 15:05:18

标签: algorithm intervals jobs job-scheduling

假设您有需要定期运行的不同作业(例如,您要对不同的端点进行API调用)。 假设您需要打两个不同的端点,并且您希望通话之间的时间间隔尽可能远。

示例:您有两个作业,一个作业每分钟运行一次,另一个作业每分钟运行两次。

解决方案:以60秒的间隔启动作业A,等待15秒,以30秒的间隔启动作业B。 这样作业将在几秒钟内运行:0(作业A),15(作业B),45(作业B),60(作业A),75(作业B),105(作业B),120(作业A) ,...在保持我们所需的调用频率的同时,使API调用之间的最大间隔为15秒。

您能想到一种针对这些情况的算法,该算法将为每个作业提供最佳的开始时间,以使两次调用之间的最小时间差最大化吗?理想情况下,该算法可以处理两个以上的工作。

假设我们不需要等待作业完成就可以再次运行它。

谢谢

1 个答案:

答案 0 :(得分:1)

如果我们允许间隔稍微不相等,这是我的解决方案。

假设我们的呼叫是C[5] == H[3]A[0],...,A[1],呼叫频率为A[n]f[0],...,{{ 1}},其中所有频率都在同一单位中。例如60 /小时,120 /小时等。

事件发生的总频率为f[1],这意味着每隔f[n]个时间安排某个事件。问题是哪一个会在何时发生。

想象的方式是想象我们有一排水桶装满水。每次我们从面前最饱满的水桶中倒出一单位水。

由于从一开始我们实际上并不关心我们从哪里开始,所以我们通过给它们分配随机数f = f[0] + f[1] + ... + f[n]hour/f,...,{{1 }}。现在我们的算法看起来像这样的伪代码:

full[0]

这导致事件之间的距离尽可能远,但是重复事件的发生节奏略有不均匀。在您的示例中,这将导致每20秒按照模式full[1]进行事件。