安排具有重叠周期性任务的工作人员

时间:2008-10-18 19:13:12

标签: algorithm math puzzle

有一名工人,一次只能执行一项任务(但可以立即在任务之间切换)

给出一系列任务,
- 定义为“n秒,每m秒”(例如,每36秒5秒)

我怎样才能找到最佳的起始时间并计算每项任务?

如果每个任务都是“1秒,每60秒”,则每个任务都有一个唯一的起始秒,计数将是无限的(稳定状态)。
如果是“每4秒1秒”和“每3秒1秒”,结果将是:“0,无限和3次,3次”

- 希望最简单的形式

如果我已经有了一个任务列表,详细说明了“开始第二次和多次”,那么返回的函数是什么:{start,count}另外{m seconds每m秒}任务看起来像什么? / p>

- (稍微复杂的形式 -
如果不是“每秒m秒”, 任务被定义为“每秒l..o秒n秒”,
在哪里我可以在l - o范围内选择一个数字m(但是在完成任务之前必须承诺那个m),
这会让更好的工人利用吗?
我如何选择最好的'm'?

4 个答案:

答案 0 :(得分:1)

我认为这取决于你如何定义'最佳'。例如,如果您希望任务平均每隔m秒运行一次,那么可以使用与Bresenham方法相同的算法来绘制线条(一个每秒m秒的任务)比如在画线时在m个水平步骤中散布n个垂直步长。为每个任务分配一个计数器和一个步长值(“每3秒1秒”,步长为1/3)。然后在每个'周期'中将步骤添加到计数器。当计数器超过零时,该任务应该运行(并从计数器中减去1)。如果您有多个计数器高于零,请选择最大的计数器。对于稍微复杂的形式,这可能会给你一个“足够好”的解决方案。

“1/4”和“1/3”示例虽然听起来像是要求“完全”分开运行任务。从列表开始并添加新任务以最大化计数并不是一个困难的搜索问题 - 但我不认为这是您需要的。在添加A然后B之后,A(1/4)B(1/4)C(1/2)示例将给出A B x x A B x x。然后C无法添加,

我认为健身功能有明显的候选者 - 一个n,m,start表可以有一个适应度函数,它是调度不超过一个任务的时间的一部分。如果存在GA /退火,则很有可能找到稳态解。但是在像(1/4),(1/3)这样的情况下似乎没有稳态解,定义'最佳'也应该定义你的适应度函数。

答案 1 :(得分:0)

这类问题难以解决,但相对容易优化。看一下Simulated Annealing,Great Deluge或Genetic Algorithms。

答案 2 :(得分:0)

嗯,这里有一点建议:如果m的最大公约数大于或等于n的总和,则解是稳态。

我会选择具有n的最大总和的任务集,这样m的gcd大于或等于该总和。

答案 3 :(得分:0)

w:Scheduling (computing)。该链接包括一个很好的调度策略列表:

  

[Scheduling]指的是方式   流程在a中分配优先级   优先队列。这个任务是   由称为a的软件进行   调度。调度程序是关注的   主要有:

     
      
  • CPU利用率 - 保持CPU为   尽可能忙。
  •   
  • 吞吐量 -   完成的进程数   他们按时间单位执行。
  •   
  • 周转时间 - 到达的时间   执行一个特定的过程。
  •   
  • 等待时间 - 时间量a   过程一直在等待   准备好队列。
  •   
  • 响应时间 - 金额   从请求开始所需的时间   直到第一次提交   反应就产生了。
  •