对要分配的任务进行排序

时间:2010-11-12 11:41:18

标签: algorithm scheduled-tasks variable-assignment task

我遇到了一个我不知道从哪里开始的问题。我真的很感激一些帮助。

问题:

我有几个T任务,必须在D天内只由1名员工完成(让我们忘记现在使用几个资源)。每个任务都可以在某些时间完成(并非所有任务都可以一直完成)。例如:如果我的员工在8点开始工作,一个任务是“打电话给客户”。也许客户办公室在9点开门。

此外,每项任务都有一个持续时间(真的估计)。假设D天足以完成所有任务。

我要将任务分类给员工。例如:在星期一8:00执行任务7,然后在9:30开始执行任务2.在示例任务7中,持续时间将是1个半小时。

感谢您的帮助!

PD:如果某人有办法做到这一点,并且这不是一个算法没关系,请回答,我将设法思考算法。我只是不知道如何面对这个问题。

修改 项目是否有用?

编辑2 不需要任务/作业依赖

5 个答案:

答案 0 :(得分:2)

如果这是一个“应用程序的小部分”,你可能要与客户重新协商:Job shop schedulingNP-complete(vulgo:日益增长的复杂性迅速得到真正困难的现实)。
有些要点思考:

  • 您需要指定某种“能力”的日子,标志着时间间隔,当某种任务是可能的(工作开始和你的员工的工作结束,打开其他办公室的时间等。)
  • 您需要告诉不同的任务(或工作,因为他们是所谓)什么样的,他们需要,多长时间能力:需要的工具,人们要达到,等等
  • 您可能需要某种形式的之间,也就是说,工作17方向关系(“呼叫办公室XYZ,并要求成本估算”)和作业18(“前进费用估计老板”):工作17必须工作18日前完成可以开始。

当你谷歌进行“工作车间安排”时,你会遇到比你想要阅读的“应用程序的一小部分”更多的科学论文......

(披露:我为一家提供different tools公司的公司工作。

答案 1 :(得分:0)

您的问题是operations research问题的一部分。这个主题已经过大量研究,没有简单的算法。那些调度问题通常是非多项式的,所以基本上你必须尝试每种组合,但是当约束被破坏时你可以切断。即如果您知道在9:00之前无法执行此操作,则无需尝试所有组合,首先致电客户端8:00。

谷歌关于运营研究和约束编程算法以及combinatorial optimization的内容。

答案 2 :(得分:0)

您需要找出算法的输入内容。输入的一部分是具有每个任务的持续时间的任务列表。每项任务也都有要求:

  • 参与者人数(目前总是1人,但如果可以改变,你需要尽早考虑)
  • 可以执行任务的时间段(当前时间,但也可以是星期几,甚至是月中的某天)
  • 参与者可以有自己的要求(比如工作时间,但可能更多)
  • 任务可以依赖于首先完成的其他任务或任务

可能会有更多要求。要发现你需要什么,你应该尝试手工解决一些具体问题。虽然你尝试了一些更多的要求可能会被发现。无论要求是什么,您的算法应该尝试以类似的方式满足它们,就像您手工完成的那样:当时有一个要求,如果有些碰撞然后追溯并尝试不同的路线。算法应首先从最严格的要求开始。

答案 3 :(得分:0)

如果元素的数量不是太大,你可以使用约束编程来解决这些问题。

看看ECLiPSe(见http://eclipseclp.org/)。

答案 4 :(得分:0)

这是针对这类问题的另一个库:Drools Planner(开源,java)。

请注意,它一起解决了所有要求(=约束),因为特别是如果你有硬约束和软约束,你会发现它通常可以解决所有硬约束,但不可能解决所有软约束(你还是希望尽可能减少它们。)