Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 算法:如何在每周工时定额内/从每周工时定额中安排/分配工时?_Algorithm_Date_Math_Time - Fatal编程技术网

Algorithm 算法:如何在每周工时定额内/从每周工时定额中安排/分配工时?

Algorithm 算法:如何在每周工时定额内/从每周工时定额中安排/分配工时?,algorithm,date,math,time,Algorithm,Date,Math,Time,比如说,如果我每周有5天*(8小时工作日-2小时非预期工作)=30小时的时间可供使用,我如何以编程方式安排任务以填满这30小时 例如,我有5项任务,我估计每项任务都需要以下时间: #1: 2h #2: 4h #3: 6h #4: 8h #5: 10h 我将如何将其分类为: M: #1 @ 2h + #2 @ 4h T: #3 @ 6h W: #4 @ 6h H: #4 @ 2h + #5 @ 4h F: #5 @ 6h 换句话说,如何解释“迭代求和容器溢出” 最后,我还需要能够解释一

比如说,如果我每周有5天*(8小时工作日-2小时非预期工作)=30小时的时间可供使用,我如何以编程方式安排任务以填满这30小时

例如,我有5项任务,我估计每项任务都需要以下时间:

#1:  2h
#2:  4h
#3:  6h
#4:  8h
#5: 10h
我将如何将其分类为:

M: #1 @ 2h + #2 @ 4h
T: #3 @ 6h
W: #4 @ 6h
H: #4 @ 2h + #5 @ 4h
F: #5 @ 6h
换句话说,如何解释“迭代求和容器溢出”

最后,我还需要能够解释一周内溢出的任务,例如,如果上一个示例中我有一个任务
#6:40h
(本身比一周多10小时,并且将每周的总数增加到需要溢出到前两周的额外40小时)

编辑: 第二个更复杂的示例,同样有5项任务,这次有(可选)工作日要求:

#1:  2h, W[0][M]
#2:  4h, W[0][T]
#3:  6h, W[0][M]
#4:  8h, W[0][F]
#5: 40h, W[0][F]
我该怎么分类呢,比如说

W[-1][M]: #5 @ 6h
W[-1][T]: #5 @ 6h
W[-1][W]: #5 @ 6h
W[-1][H]: #5 @ 6h
W[-1][F]: #3 @ 2h + #5 @ 4h
W[ 0][M]: #1 @ 2h + #3 @ 4h
W[ 0][T]: #2 @ 4h + #5 @ 2h
W[ 0][W]: #5 @ 6h
W[ 0][H]: #4 @ 2h + #5 @ 4h
W[ 0][F]: #4 @ 6h

最好的情况实际上是,每天3推1,如下所示:

进一步澄清:
  • 对于一周中的每一天(MTWHF),填写最多6小时的时间
  • 如果溢出,则溢出到前一天
  • 理想情况下,这种泄漏会以背包或类似的优化方式发生,因此6个小时将尽可能被完整/不间断的任务填满
  • 同样,对于溢出到的天数,他们应该调整溢出量,使其成为完整的任务

听起来像。wiki为这个问题提供了一些解决方案,但主要是通过动态编程解决的

除非我遗漏了什么,否则这似乎是一个已解决的问题。如果任务是动态分配的(在现实环境中似乎是这样),那么调度可以满足所有的截止日期,前提是UT化仍然是可管理的。由于作业只有在新作业进入时才被抢占,这将导致较低的上下文切换开销和相当好的工作连续性。这是一种简单的启发式方法,在文献中受到了一定的关注,因此从方程中排除了大量的猜测

编辑:示例

#1:  2h, W[0][M]
#2:  4h, W[0][T]
#3:  6h, W[0][M]
#4:  8h, W[0][F]
#5: 40h, W[0][F]

EDF order: #1, #3, #2, #4, #5.

Schedule: 113333332222444444445555555555555555555555555555555555555555

In days: 113333 332222 444444 445555 555555 555555 555555 555555 555555 555555
请注意,通过采用该先验计划并对EDF计划的结果进行后处理,我们可以在连续性方面做得更好。假设我们在开始一天的时候,以及当一个数字发生变化时,会有一些上下文切换开销,那么这个时间表会产生13个上下文切换,其中只有10个是必须的。根据时间表#3、#1、#2、#4、#5,我们得到了12个上下文切换。我知道问题最初是想最小化上下文切换。然而,在这方面,一个优化的调度算法只会比EDF做得更好,它将真正的上下文切换隐藏在强制性的上下文切换中(发生在一天的开始)。EDF的优势在于,如果有可能的话,它可以保证您始终在截止日期之前完成任务。这是一个折衷方案,但我认为EDF会同意


也考虑(以你的最后期限为准),这可能更适合静态确定的计划,特别是如果对分配的任务有任何规律性。

只留下相同的顺序,你想把工作分解成6个小时的块吗?你应该列出所有可能的要求。听起来您可能没有充分探索问题领域。我们需要为您的问题描述一个“可行”的解决方案,以及(如果是优化问题)最小化/优化功能。您的要求仍然太模糊。如果你1)清楚地描述可接受的解决方案,2)描述如何计算解决方案的单个分数,越高=越好,那么我们可以说得更多。如前所述,细节可以使这个问题从简单的线性时间到NP完全。就你目前为止给出的结果而言,没有办法知道它在哪里。虽然我还不确定如何准确地确定哪种解决方案是最好的(更不用说哪种方案是可以接受的),但我还是会给出一个想法——首先将任务>=6h,但我认为这远没有背包那么复杂,因为将任务分成几天显然不是问题。啊,我一定忽略了这一点,在这种情况下,它确实更简单。只需保留一个分类计数器,直到用完为止。这些是有用的链接,但这里的信息对我来说非常密集。介意把它拆开一点和/或链接到上面的例子吗?