Min控制集软件

时间:2016-02-21 21:43:28

标签: optimization smt np-complete

交叉发布此from CS Theory,因为它更像是一个软件问题。

我需要一个用于计算精确MIN-DOM-SET的代码。目前,建议的最佳选择是将其作为SMT问题制定并将其投放到SMT求解器。

如果有任何好的MIN-DOM-SET特定代码或良好的SMT-LIB配方,那就很好奇。

1 个答案:

答案 0 :(得分:1)

我使用新的Optimize功能在Z3的Python绑定中coded one up

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.')