Algorithm 对要分配的任务进行排序

Algorithm 对要分配的任务进行排序,algorithm,scheduled-tasks,variable-assignment,task,Algorithm,Scheduled Tasks,Variable Assignment,Task,我有一个问题,我不知道从哪里开始。我真的很感谢你的帮助 问题是: 我有几个T任务必须在D天内由一名员工完成(现在我们忘了使用几个资源)。每个任务都可以在某些时间内完成(并非所有任务都可以在所有时间内完成)。e、 g:如果我的员工8点开始工作,其中一项任务是“给客户打电话”。也许客户办公室9点开门 此外,每个任务都有一个持续时间(实际估计)。人们认为D天足以完成所有任务 我必须把任务分类给员工。e、 g:周一8:00做任务7,然后9:30开始做任务2。在示例任务7中,持续时间为1个半小时 谢谢你的

我有一个问题,我不知道从哪里开始。我真的很感谢你的帮助

问题是:

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

此外,每个任务都有一个持续时间(实际估计)。人们认为D天足以完成所有任务

我必须把任务分类给员工。e、 g:周一8:00做任务7,然后9:30开始做任务2。在示例任务7中,持续时间为1个半小时

谢谢你的帮助

迭戈

PD:如果有人有办法做到这一点,而这不是一个算法,请回答,我会设法思考算法。我只是不知道如何面对这个问题

编辑 这个项目有用吗

编辑2 任务/作业相关性不是必需的

您的问题是问题的一部分。这个主题已经被大量研究过,没有简单的算法。这类调度问题通常是非多项式的,所以基本上你必须尝试每种组合,但当约束被打破时你可以中断。也就是说,如果你知道你不能在9:00之前打电话给客户,那么不需要尝试所有的组合


因此,谷歌提供有关运筹学和约束编程算法的信息。

你需要找出算法的输入。输入的一部分是任务列表,每个任务都有持续时间。每项任务都有以下要求:

  • 参与者人数(目前始终为1人,但如果可能发生变化,您需要尽早考虑)
  • 可以执行任务的时间段(当前为一天中的某个时间段,但也可以是一周中的某一天,甚至是一个月中的某一天)
  • 参与者可以有自己的要求(比如工作时间,但也可以更多)
  • 任务可以依赖于要首先完成的其他任务

可能会有更多的要求。为了发现你还需要什么,你应该试着用手解决一些具体的问题。当您尝试时,可能会发现更多的需求。无论需求是什么,您的算法都应该尝试以类似的方式满足它们,就像您手工完成的那样:一次满足一个需求,如果一些需求发生冲突,则回溯并尝试不同的路径。算法应该首先从最严格的要求开始。

如果元素数量不太多,可以使用约束编程来解决此类问题

看看ECLiPSe(请参阅)。

如果这是“应用程序的一小部分”,您可能需要与客户机重新协商:is(vulgo:随着复杂性的增加变得非常困难)。
需要思考的几点:

  • 您需要为天数分配某种“容量”,在可能执行某种任务时标记时间间隔(员工的工作开始和工作结束、其他办公室的开放时间等)
  • 你需要告诉不同的任务(或工作,顾名思义)它们需要什么样的能力,需要多长时间:需要工具,需要联系的人,等等
  • 比如说,你可能需要在第17项工作(“打电话给XYZ办公室,询问成本估算”)和第18项工作(“向老板提出成本估算”)之间建立某种定向关系:第17项工作必须在第18项工作开始之前完成
当你在谷歌上搜索“作业车间调度”时,你会看到比你想在“应用程序的一小部分”上阅读的更多的科学论文


(披露:我在一家提供这类服务的公司工作。)

这是另一个解决这类问题的库:(开源,java)


请注意,它同时解决了所有需求(=约束),因为特别是当您有硬约束和软约束时,您会发现通常可以解决所有硬约束,但不可能解决所有软约束(您仍然希望尽可能减少它们)。

这是家庭作业吗?闻起来像是作业。不,是我工作公司客户应用程序的一小部分。谢谢你的回答。现在,应用程序要求正是我上面描述的。参与者的数量将始终为1,因为任务是手动分配给员工的。时间段:一天中的当前时间就是一个例子,它也可以是您所说的周中的某一天或月中的某一天。现在的员工只有两个要求:工作时间和不能同时做两项任务。Taks的依赖性不是一个要求。那么,归根结底就是“一次满足一个要求”。也许这篇文章可以帮助你:非常有用。现在,正如我在其他评论中所说(我将在问题中添加它),不需要依赖于作业。谈判不是问题,他是一个很好的客户,会按工作时间付费。