python - 设置封面: Generating test instances

标签 python set genetic-algorithm set-cover

<分区>

我期待解决 Set Cover Problem使用遗传算法。我一直在到处寻找一些好的测试实例,但没有取得任何大的成功。

我正在寻找的是以下形式的一些实例:集合 U = {1,2,...,n} 及其子集 S={{1,2}, {4} , {3,4,5}},其中S的并集是U。

当然这是一个小例子,因为我想找一些更大的例子。

那么,有没有人知道此类实例的良好来源,或者可能知道生成它们的方法?

后来编辑:所以我看到这个问题被搁置了。那我不好,我会添加更多细节。

首先,我在谷歌上搜索了一些关于布景问题的测试实例。我期望找到的是一些像我上面描述的例子。运气不好,我发现了类似于 this 的东西.我必须说,链接中没有那么多细节可以让我找到这些实例。

所以我开始考虑生成它们的方法。伪代码解决方案:

given set G=[1,2....,n]
no_of_subsets  = random integer
subsets = []
for i in k: 
    subset = random.sample(G, random(0, len(G))
    subsets.add(subset)

虽然我不确定 union(subsets) 是否 = G,所以我的疑虑就在那里,所以这就是为什么我需要一些已经生成的测试实例。

最佳答案

您可以生成一个集合,从可能的数字列表中获取随机样本。他们还通过获取随机大小的随机样本来生成其子集的列表(具有预定大小),对于最后一个子集,您只需完成缺少的内容,因此子集的总和将是整个集合。

例子:

import random

n = 100
m = 10 #size of set
l = 5 #size of list of subsets
possible_numbers = range(n)

U = set(random.sample(possible_numbers, m))

subsets = []
control = set()
for i in range(l - 1):
    sub_size = random.randrange(m)
    sub = set(random.sample(U, sub_size))
    subsets += [sub]
    control |= sub

rest = U - control     
if rest:
    subsets += [rest]

print(U)
--> {97, 99, 69, 9, 15, 52, 53, 55, 28, 30}

print(subsets)
--> [{28, 52, 69, 55}, {69}, {99, 28, 52, 55}, {69, 9, 15, 52, 53, 55}, {97, 30}]

关于python - 设置封面: Generating test instances,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44217935/

相关文章:

python - Pandas 错误 : Index contains duplicate entries, 无法 reshape

python - 按成员在另一个列表中的顺序对列表元素进行分组

C# 'Enumerable.Repeat()'如何重载?

python - 使用特定的 python 导入调用 PyModule_GetDict() 时出现异常

python - "For"循环第一次迭代

c++ - std::set::find 异常保证

python - Python中遗传算法的问题

algorithm - 优化方法(元启发式、基于图形的、MILP)

python - Tkinter、Python 中框架的垂直滚动条

c++ - bst 比较模板上的错误 C2664