【问题标题】:Job sequencing with job execution time, deadlines and penalties具有作业执行时间、截止日期和处罚的作业排序
【发布时间】:2018-10-23 06:55:32
【问题描述】:

有 N 个作业,其中包含执行时间、截止日期和作业错过截止日期的处罚。每项工作的执行时间、截止日期和罚款可能会有所不同。当时只能完成一项工作。所有的工作都必须完成。任务是对惩罚最小的作业(计划)进行排序。

您对算法有什么想法,甚至可以分享一些代码示例吗?我真的被这个任务困住了。

【问题讨论】:

    标签: scheduling sequencing


    【解决方案1】:

    问题的名称是“作业排序问题”,虽然我没有自己的例子可以分享,但你可以看看这个https://www.geeksforgeeks.org/job-sequencing-problem-set-1-greedy-algorithm/

    【讨论】:

    • 贪心算法所有作业执行时间为1个单位。但是在我的任务中,每个作业的执行时间可能会有所不同。
    【解决方案2】:

    我想当一个工作错过它的最后期限时的惩罚是一个常数 w_j,它取决于工作 j 而不是它的延迟值。 在一般情况下,问题是 NP Hard(在经典的 alpha|beta|gamma 表示法中是 1||sum_j w_j U_j)。在特殊情况下它是多项式的,所有权重 w_j 都相等(最小化延迟作业的数量)。

    您可能会找到许多非常有效的针对特定问题的算法来解决这个特定问题。如果您对解决此问题的通用公式感兴趣,您可以尝试 CP Optimizer [1],在 OPL 中,解决该问题的公式如下所示:

    int n = ...;
    int  dd[j in 1..n] = ...; // Deadline for job j
    int  pt[j in 1..n] = ...; // Processing time for job j
    float w[j in 1..n] = ...; // Penalty for late job j
    
    dvar interval job[j in 1..n] size pt[j]; // Decision variables
    
    minimize sum(j in 1..n) ( w[j]*(endOf(job[j])>=dd[j]) );
    subject to {
      noOverlap(all(j in 1..n) job[j]);
    }
    

    以下是 CP Optimizer 中利用可选间隔变量概念的一个更好的公式:您可以最大化被限制在截止日期之前结束的已执行间隔/活动的等待总和:

    int n = ...;
    int  dd[j in 1..n] = ...; // Deadline for job j
    int  pt[j in 1..n] = ...; // Processing time for job j
    float w[j in 1..n] = ...; // Penalty for late job j
    
    dvar interval job[j in 1..n] optional in 0..dd[j] size pt[j]; // Decision variables
    
    minimize n - sum(j in 1..n) ( w[j]*presenceOf(job[j]) );
    subject to {
     noOverlap(all(j in 1..n) job[j]);
    }
    

    [1] P.Laborie、J.Rogerie、P.Shaw、P.Vilím。用于调度的 IBM ILOG CP 优化器。约束日志。 2018 年 4 月,第 23 卷,第 2 期,第 210-250 页。 http://ibm.biz/Constraints2018.

    【讨论】:

      猜你喜欢
      • 2021-09-21
      • 1970-01-01
      • 2022-11-14
      • 1970-01-01
      • 2016-08-25
      • 1970-01-01
      • 1970-01-01
      • 2016-09-21
      • 1970-01-01
      相关资源
      最近更新 更多