最大覆盖变体的启发式

Posted

技术标签:

【中文标题】最大覆盖变体的启发式【英文标题】:Heuristic for Maximum Coverage variant 【发布时间】:2015-07-25 01:22:53 【问题描述】:

我有以下问题: 有N组。每个组都是集合的集合。 目标是从 N 个组中的每个组中准确选择一个集合,以使作为所有选择的并集的集合的大小最大化。 每组中的集合数不一定相同,但有界是由某个数 M 限制的。

例如,

1. 6, 7, 8, 10 
2. 6,7, 8,9 
3. 10, 1,2, 99

实际答案为6,因为您可以从1 中选择6,7,8,从2 中选择8,9,从3 中选择1,2,从而使联合1,2,6,7,8,9 的大小为6

在我的特定领域中,问题结构始终遵循以下规则: N 从 1 到 2000 不等。集合中的数字从 1 到 50。单个集合的最大大小为 5,并且给定集合中任何两个数字之间的绝对差不能超过 2(集合可以包含jj+1j-1j+2j-2)。

我认为我不能足够快地完美解决这些问题。所以我想出了以下启发式方法:

    大小的上限是每个组中每个集合的并集大小(上例中为 8) 大小的上限是每个组中最大集合的大小之和。 (上面的例子会给出 7) 大小上限为 min(heuristic1, heuristic2)

我认为没有一种有效的算法可以准确计算尺寸(尽管我很想被证明是错误的)。但是,如果有人能看到一个可以给出更严格界限(并且计算效率高)的启发式算法,那就太棒了。

编辑:对于我的特定用例,我只对上限感兴趣。我需要能够肯定地说大小不超过一个特定的数字,否则启发式对我来说毫无用处。

【问题讨论】:

【参考方案1】:

可以利用的组和集合之间是否存在任何关系?

如果不是,那么使用一个简单的贪心算法怎么样,从空集开始,然后为每个组添加当前解决方案中没有的元素最多的集合:

    T = ∅, N = 1 选择集Sk ∈ S1, ..., SM 在组 N 这样Sk = ma​​xi(|Si sub> \ T|)T = TSk 如果最后一个组退出,否则 N = N + 1 并转到步骤 2。

答案显然取决于几个问题:

初始组 处理组的顺序 当 ma​​x 不唯一时选择 Sk

要缓解这些问题,您可以跟踪多个解决方案T。例如,在每一步都保留前 2 或 3 个解决方案。然后在退出时保持最大的解决方案。

【讨论】:

谢谢。是的,这是个好主意。但是(我很抱歉,但我完全忘记在最初的问题发布中提到这一点)我实际上只是在寻找上限,这似乎是一个下限。

以上是关于最大覆盖变体的启发式的主要内容,如果未能解决你的问题,请参考以下文章

论文阅读|《一种求解准时车间调度问题的元启发式算法》

启发式选择使点积最大化的五列数组

优化覆盖基于matlab蚁群算法求解无线传感器覆盖优化问题含Matlab源码 1835期

启发式合并

启发式搜索学习~~

树上启发式合并入门