【问题标题】:Job shop scheduling: which solutions should I consider?车间调度:我应该考虑哪些解决方案?
【发布时间】:2012-05-13 14:17:27
【问题描述】:

给定一家软件公司,其中开发人员在多个团队中工作 的不同项目。项目需要分配的一定技能 开发商。出于我的目的,我想保持简单并将其限制为一个 技能,即编程语言。所以有些项目需要 Java,有些项目需要 C etc. 项目有固定的工期,每个项目应该有两个开发者 分配给它。

在任何时间点,一些项目正在进行中,新项目即将到来 并且需要在未来的某个时候进行计划。我想计算一个时间表,哪些开发人员应该在什么时间从事什么项目。

我不是在寻找最佳解决方案(如果可能的话)。我很满足 有一个人类经理可以创建的时间表。

我已阅读有关资源受限调度问题的文章 和作业问题,但我很少接受正式的 CS 培训,而且我 经常会迷失在这些问题的不同变体中的所有细微差别中。

我认为我的问题是作业车间调度的更简单变体 项目,开发人员是机器,所以工作需要多台机器 同时。只有一个先例约束,即运行项目 不能中止,所以必须先完成。

从我读过的所有可能的解决方案中,我倾向于使用 遗传算法,主要是因为我读过人们用 他们,因为我前一阵子用过另一个项目。 我也读过关于线性规划的好结果,但我知道的很少 关于那个。

对于这类问题,遗传算法是否可行?还是有更好的解决方案?

【问题讨论】:

  • 任务是否相互依赖? (即任务 7 需要完成任务 2 才能开始)。任务是提前知道的吗?
  • 您说的任务是指项目本身吗?项目不相互依赖。在创建进度表时,所有项目都是已知的。为清楚起见,项目中的单个任务在此问题中并不重要。与 SCRUM 项目一样,当预定的持续时间过去时,项目被认为已完成。

标签: algorithm job-scheduling resource-scheduling


【解决方案1】:

创建一个二分图,一方面是开发人员,另一方面是需要的项目成员。 “需要的项目成员”是指如果一个项目P 需要3 个开发人员,您将添加3 个节点,可能命名为P0P1P2

如果开发人员具备项目所需的所有技能,请在开发人员和所需项目成员之间划清界限。然后,您的问题减少到在此图中找到matching;您可以使用标准算法来执行此操作。

【讨论】:

  • 我要调查一下。这个解决方案还能处理我的问题的时间/调度部分吗?
  • 它不会精确地处理时间,但如果它在涉及所有项目的图表中找到匹配,那么该匹配将尊重您的调度约束。问题是它太严格了:会有没有匹配的图表,但仍然有可能的调度(其中一个开发人员做了一个项目,然后是另一个。)根据 Doug 的回答,你可以贪婪地创建迭代匹配,一次一个项目。然后你可以通过排除你知道很忙的开发者来控制开发者池。
【解决方案2】:

使用遗传算法是一种可行的方法,但它的野心很大。

greedy algorithm 开头。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-11-12
    • 2015-12-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-01
    • 2016-11-25
    • 1970-01-01
    相关资源
    最近更新 更多