在工作中,我们得到一组形式为 (taskname, frequency) 的约束,其中 frequency 是一个整数,表示每次调用任务“taskname”之间的滴答数。两个任务不能同时运行,每个任务调用需要一个 tick 才能完成。我们的目标是根据匹配的约束集找到最佳调度。
例如,如果给定约束条件 {(a, 2), (b,2)},则最佳时间表是“ab ab ab ...” 另一方面,如果给定约束条件 ({a,2}, {b, 5}, {c, 5}),最好的时间表可能是“abaca abaca abaca ...”
目前,我们通过运行遗传算法来找到最佳调度,该算法试图最小化实际频率与给定约束之间的距离。它实际上工作得很好,但我想知道是否有一些算法更适合这类问题。我试着用谷歌搜索,但我似乎缺少合适的词(安排通常是关于完成任务 :()。你能帮忙吗?
最佳答案
首先,考虑一下 jldupont 评论的优点! :)
其次,我认为'period'是对元组第二个元素的准确描述,例如{姓名,时期[icity]}。
也就是说,看看网络算法。 Some variant of weighted queuing大概适用于此。
例如,给定N个任务,创建N个任务对应的队列T0...Tn
,并在每个周期(“tick”)中根据任务的周期,排队一个item到对应的队列。
然后,调度程序算法的目标是最小化(平均)队列中的服务员总数。简单的起点是简单地从具有最多项目数的队列 Qx 中出队。 (排队项目上指示“年龄”的参数将有助于确定优先级。)
关于algorithm - 预先安排重复性任务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1643996/