【问题标题】:Scheduling - Spread out assigned event times evenly调度 - 平均分配分配的事件时间
【发布时间】:2014-05-19 14:38:27
【问题描述】:

我正在尝试根据某些限制在一周内安排一定数量的活动,并希望在一周内尽可能均匀地分布这些活动。

如果我将事件间隔的标准差添加到目标函数,那么 CPLEX 可以将其最小化。

我正在努力根据 CPLEX 表达式定义间隔的标准偏差,主要是因为事件不必按任何特定顺序排列,而且我不知道哪个事件先于任何其他事件。

我确信这一定是一个已解决的问题,但我无法在 IBM 的 cplex 文档或互联网上找到帮助。

【问题讨论】:

    标签: linear-programming job-scheduling cplex


    【解决方案1】:

    安排均匀间隔的事件

    这里有一些可能的想法供您尝试:

    t0t1t2t3 ... tn 成为事件时间。 (这些是模型选择的变量。)

    d1 = t1-t0d2=t2-t1 等...dn

    目标:我们希望所有这些 d 大致相等,这将产生大致均匀间隔 t 的效果。

    选项

    选项 1:为与理想的偏差付出代价

    让我们举一个例子。假设您想在一周(168 小时)内安排 10 个活动。除此之外没有其他限制 等间距,我们可以让第一个事件在时间=0 开始,最后一个在时间 t=168 结束。其他的将相隔 168/(10-9) =~ 18.6 小时。我们称之为 d_ideal。

    我们不希望 d 远小于 d_ideal (18.6) 或远大于 d_ideal。

    即在目标中添加Cost_dev * (abs(d_ideal - dj)) (您必须为每个 d 创建两个变量(d+d- 以处理目标函数中的绝对值。)

    选项 1a

    在上述方法中,所有偏差的定价相同。所以模型不在乎它是否偏离了 3 小时,或者两个偏差 每个 1.5 小时。处理这个问题的方法是逐步增加成本。小偏差成本小,高偏差成本非常高。 (您使它们逐步线性化,以使公式保持 LP/IP)

    选项 2:最大值-最小值

    这是围绕你最小化标准。 d的想法的偏差。我们希望最大化每个 d(增加事件间分离。) 但是我们也会极大地惩罚(大成本)那个最大的特定 d 值。 (在英语中,我们不想让 任何单个 d 都不会太大)

    这就是 MinMax 的想法。 (最小化最大d值,同时也最大化单个d)

    选项 3:两个 LP:先求解,然后在第二个 LP 中移动事件

    对越来越多的这些侧面约束进行分层的一个缺点是公式变得复杂。 为了解决这个问题,我看到使用了两个(或更多)通行证。您首先解决基本 LP,分配事件,然后在另一个 LP,你解决了统一分配时间的问题。

    第二个 LP 的目标是在不打破任何硬约束的情况下移动事件。

    选项 3a:从多个“副本”中选择一个

    为了实现这一点,我们采用以下思路:

    我们允许一个事件有多个可能的时间段,并让模型选择一个。 事件 e1(当前分配给时间 t1)被复制到(比如说)其他 3 个可能的槽中。

     e11 + e12 + e13 + e14 = 1 
    

    第二个模型可以选择将事件移动到“更好”的时间段,或者保留它。 (旧的解决方案 总是可行的。)

    您在 CPLEX 手册中看不到太多内容的原因是这些都是公式化想法。如果您搜索工作或事件调度 使用 LP,您会遇到一些可能会有所帮助的 pdf。

    【讨论】:

    • 如果t 变量没有及时排序(由于其他限制/成本),我将如何获得正确的ds
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-17
    相关资源
    最近更新 更多