0

我是设置覆盖问题的新手,我已经能够编写一个简单的贪心算法来解决python中的一个简单实例;

Universe = set([1,2,3,4,5,6,7,8])
Subsets = [set([1,2]),
           set([3,4]),
           set([5,6]),
           set([7,8]),
           set([2,4,6,8]),]
weights = [1,1,1,1,1]

C = []
costs = []

def findMin(Subsets, Universe):
    minCost = 99999.0
    minElement = -1
    for i, s in enumerate(Subsets):
        try:
            cost = weights[i]/(len(s.intersection(Universe)))
            if cost < minCost:
                minCost = cost
                minElement = i
        except:
            # Division by zero, ignore
            pass
    return Subsets[minElement], weights[minElement]

while len(Universe) != 0:
    S_i, cost = findMin(Subsets, Universe)
    C.append(S_i)
    Universe = Universe.difference(S_i)
    costs.append(cost)

print("Cover: ", C)
print("Total Cost: ", sum(costs), costs)

这很好用,但现在我想尝试将粒子群优化等优化算法应用于问题,但我无法将问题表述为算法(和其他启发式算法)的目标函数。请帮忙。

4

0 回答 0