安排均匀间隔的事件
这里有一些可能的想法供您尝试:
让t0、t1、t2、t3 ... tn 成为事件时间。 (这些是模型选择的变量。)
让d1 = t1-t0、d2=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。