algorithm - 预先安排重复性任务

标签 algorithm scheduling recurring

在工作中,我们得到一组形式为 (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/

相关文章:

algorithm - 具有 3 个节点的有序树总数

c - 不兼容的 AES 实现?

real-time - 当周期等于截止日期时 RMS 和 EDF 之间的差异

database - 循环分配实现(数据库)

express - 通过 paypal 快速结账定期订阅,买家支付两次

laravel - 自定义计费周期的 Paypal 定期付款

python - 这个mergesort实现的时间复杂度是O(nlogn)吗?

arrays - 复杂度为 O(n) 的数组中第二高的数

multithreading - 如何通过实验确定进程/线程的调度量?

paypal - 如何在新的 Paypal 沙盒上测试增强型定期付款标准?