我是设置覆盖问题的新手,我已经能够编写一个简单的贪心算法来解决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)
这很好用,但现在我想尝试将粒子群优化等优化算法应用于问题,但我无法将问题表述为算法(和其他启发式算法)的目标函数。请帮忙。