当前位置: 首页 > 知识库问答 >
问题:

工作人数可变的任务优化调度

杜嘉慕
2023-03-14

我有一些任务的持续时间是已知的整数长度。任务之间也有依赖关系。我也有任意数量的员工可以安排这些任务。

我想为他们找到一个最佳的时间表,首先我要最小化所有任务执行的总长度,其次我想在一个之前运行过大多数依赖项的工作人员身上安排任务,第三我想最小化所需的工作人员数量。

因此,如果任务具有依赖项A、B和C,并且worker1运行A和B,worker2运行C,那么我更希望将新任务添加到worker1。

我正在为程序执行流做一个可视化,任务实际上是函数调用(具有已知的操作数量),依赖关系是数据依赖关系。我想并行可视化独立的调用,而不是一个长的线性表示。我认为这个问题类似于我上面描述的任务调度问题。

在我的第一个简单方法中,我设法优化了总体执行的长度,但如果任务没有优先依赖关系,它会将它们添加到自己的工作人员中。即使现有工人身上有未使用的孔洞。所以我不确定如何优化长度优先和工人数量。在我花更多时间讨论这个问题之前,我想知道是否有一些已知的算法可以解决这个问题,即使是一个库,我也可以使用。

这个问题不是这个问题的重复,因为:

  • 任务没有截止日期,但具有相关性
  • 我想在安排之前依赖关系的同一个工作进程上安排任务
  • 可能会有多个额外的工人,而不仅仅是一个

共有1个答案

孔华池
2023-03-14

首先,制作依赖关系图;参见拓扑排序](https://en.wikipedia.org/wiki/Topological_sorting)为可能的细节工作。

应用Dijkstra算法,翻转比较,将找到最长路径。这将为您提供最短的执行时间和关键路径。有了它,就可以将关键路径分配给一个工人。

现在,寻找包含多个依赖项的依赖子路径,它们的时间不超过它们替换的依赖项。例如,如果你有一个时间线来完成任务A、B、C,而这些任务是D和B需要的

crit   AAAAAADDDDD
other  BBBCC

您可以将两个任务弧与任务A交换,从而获得新的优先分配:

worker1 BBBCC-DDDDD
worker2 AAAAAA-----

这让你开始了吗?

 类似资料:
  • 首先,对于我的分数计算,我使用Java EasyScoreCalculator接口,并使用Java API创建我的求解器(因为我在Java OSGI插件中从xml或drl文件加载配置/约束时遇到了问题) 我的问题: 我想解决的,一个多技术工人任务调度问题。 任务的开始日期和结束日期应在给定的日期范围内计划。 解决方案:我要优化所有工人的总体工作量(分钟)。 目前我确实有三个规划变量: null 在

  • 注意:用户界面已经在 Dreamweaver CC 和更高版本中做了简化。因此,您可能在 Dreamweaver CC 和更高版本中找不到本文中描述的一些选项。有关详细信息,请参阅此文章。 显示 Web 应用程序开发面板 从“插入”面板的“类别”弹出菜单中选择“数据”类别可显示一组按钮,使用这些按钮可以向页面中添加动态内容和服务器行为。 显示的按钮的数量和类型取决于在“文档”窗口中打开的文档类型。

  • AUTOMATING TASKS WITH JOB SCHEDULING 像任何使用 Linux 的人一样,黑客经常有他们想要定期运行的任务、脚本或其他任务。例如,你可能希望为你的系统设置一个自动文件备份, 或者你希望像我们在第 11 章做的那样转存日志文件。另一方面,黑客可能希望每天晚上或者在他们工作或上学的时候让他们的系统运行第 8 章里的 MySQLscanner.sh 脚本。这些都是调度自

  • 我需要找到一个合适的方法来开发一个优化算法,它做以下工作: 假设我们有N个任务要做,我们有M个房间,每个房间都包含一些特定数量的基础设施/条件。每项任务都要求使用条件适合任务的房间。 例如,为了完成任务,我们需要使用水龙头和煤气管道,所以我们只能使用包含这些管道的房间。 此外,对于每项任务,我们都有一个预定义的截止日期。 我希望我已经解释得够清楚了。 所以,我需要开发一种算法,可以在适当的时间安排

  • 问题内容: 我正在使用使用Web Workers处理所有AJAX请求的代码(如果有)。这些工作人员几乎只做对象处理(没有额外的计算)。工作者创建的所有请求都是异步的()。 最近,我遇到了与此代码有关的几个问题,我开始怀疑是应该花时间修复此问题还是只是丢弃整个解决方案。 到目前为止,我的研究表明该代码实际上可能会损害性能。但是,我找不到任何可靠的消息来源来支持这一点。我仅有的两个发现是: 2岁的jQ

  • 15.4 可唤醒停机期间的工作任务 想像一个环境,你的 Linux 服务器有一个工作是需要在每周的星期天凌晨 2 点进行,但是很不巧的,星期六停电了~所以你得要星期一才能进公司去启动服务器。 那么请问,这个星期天的工作调度还要不要进行?因为你开机的时候已经是星期一,所以星期天的工作当然不会被进行,对吧! 问题是,若是该工作非常重要 (例如例行备份), 所以其实你还是希望在下个星期天之前的某天还是进