计划 - 均匀分配指定的事件时间

时间:2014-05-19 14:38:27

标签: linear-programming job-scheduling cplex

我试图根据某些限制在一周内安排一定数量的事件,并希望在整个一周内尽可能均匀地分散这些事件。

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

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

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

1 个答案:

答案 0 :(得分:1)

安排统一间隔事件

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

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

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

目标:我们希望所有这些d大致相等,这样可以大致均匀地隔开t

选项

选项1:将成本与理想

相比较

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

我们不希望d比d_ideal(18.6)小得多,或者比d_ideal大得多。

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

选项1a

在上述方法中,所有偏差的定价都相同。因此,如果模型偏离3小时或两个偏差,模型就无需关心 每个1.5小时。处理这种情况的方法是增加逐步成本。小偏差的成本很低,高偏差的成本非常高。 (你使它们逐步线性化,使配方保持LP / IP)

选项2:Max-min

这是你最小化标准。 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格式。

希望这有帮助。