我遇到了一个我不知道从哪里开始的问题。我真的很感激一些帮助。
问题:
我有几个T任务,必须在D天内只由1名员工完成(让我们忘记现在使用几个资源)。每个任务都可以在某些时间完成(并非所有任务都可以一直完成)。例如:如果我的员工在8点开始工作,一个任务是“打电话给客户”。也许客户办公室在9点开门。
此外,每项任务都有一个持续时间(真的估计)。假设D天足以完成所有任务。
我要将任务分类给员工。例如:在星期一8:00执行任务7,然后在9:30开始执行任务2.在示例任务7中,持续时间将是1个半小时。
感谢您的帮助!
迭
PD:如果某人有办法做到这一点,并且这不是一个算法没关系,请回答,我将设法思考算法。我只是不知道如何面对这个问题。修改 项目是否有用?
编辑2 不需要任务/作业依赖
答案 0 :(得分:2)
如果这是一个“应用程序的小部分”,你可能要与客户重新协商:Job shop scheduling是NP-complete(vulgo:日益增长的复杂性迅速得到真正困难的现实)。
有些要点思考:
当你谷歌进行“工作车间安排”时,你会遇到比你想要阅读的“应用程序的一小部分”更多的科学论文......
答案 1 :(得分:0)
您的问题是operations research问题的一部分。这个主题已经过大量研究,没有简单的算法。那些调度问题通常是非多项式的,所以基本上你必须尝试每种组合,但是当约束被破坏时你可以切断。即如果您知道在9:00之前无法执行此操作,则无需尝试所有组合,首先致电客户端8:00。
谷歌关于运营研究和约束编程算法以及combinatorial optimization的内容。
答案 2 :(得分:0)
您需要找出算法的输入内容。输入的一部分是具有每个任务的持续时间的任务列表。每项任务也都有要求:
可能会有更多要求。要发现你需要什么,你应该尝试手工解决一些具体问题。虽然你尝试了一些更多的要求可能会被发现。无论要求是什么,您的算法应该尝试以类似的方式满足它们,就像您手工完成的那样:当时有一个要求,如果有些碰撞然后追溯并尝试不同的路线。算法应首先从最严格的要求开始。
答案 3 :(得分:0)
如果元素的数量不是太大,你可以使用约束编程来解决这些问题。
看看ECLiPSe(见http://eclipseclp.org/)。
答案 4 :(得分:0)
这是针对这类问题的另一个库:Drools Planner(开源,java)。
请注意,它一起解决了所有要求(=约束),因为特别是如果你有硬约束和软约束,你会发现它通常可以解决所有硬约束,但不可能解决所有软约束(你还是希望尽可能减少它们。)