0
交叉發佈這個from CS Theory因爲它更像是一個軟件問題。最小支配集軟件
我需要一個代碼來計算確切的MIN-DOM-SET。目前建議的最佳選擇是將其制定爲SMT問題並將其投入SMT解決方案。
好奇的是,如果有任何良好的MIN-DOM-SET特定代碼或良好的SMT-LIB制定。
交叉發佈這個from CS Theory因爲它更像是一個軟件問題。最小支配集軟件
我需要一個代碼來計算確切的MIN-DOM-SET。目前建議的最佳選擇是將其制定爲SMT問題並將其投入SMT解決方案。
好奇的是,如果有任何良好的MIN-DOM-SET特定代碼或良好的SMT-LIB制定。
I coded one up Z3的Python綁定使用新的優化功能。
def min_dom_set(graph):
"""Try to dominate the graph with the least number of verticies possible"""
s = Optimize()
nodes_colors = dict((node_name, Int('k%r' % node_name)) for node_name in graph.nodes())
for node in graph.nodes():
s.add(And(nodes_colors[node] >= 0, nodes_colors[node] <= 1)) # dominator or not
dom_neighbor = Sum ([ (nodes_colors[j]) for j in graph.neighbors(node) ])
s.add(Sum(nodes_colors[node], dom_neighbor) >= 1)
s.minimize(Sum([ nodes_colors[y] for y in graph.nodes() ]))
if s.check() == sat:
m = s.model()
return dict((name, m[color].as_long()) for name, color in nodes_colors.iteritems())
raise Exception('Could not find a solution.')
哈坎Kjellerstrand開發了用於控制集問題[MiniZinc算法](https://github.com/hakank/hakank/blob/master/minizinc/dominating_set.mzn)。 –
它也有一個明顯的ILP模型,所以你可以把它扔在Gurobi或類似的 – harold