if i % total_slices == my_slice: clique = cliques[i] print "starting %d %s"%(i, str(clique)) cycle_mapping = map(lambda c: (c[0], tuple(cycles[c[1]])), clique) decider = InequalityDecider() decider.add_cycle_mapping(problem_def, cycle_mapping) if decider.satisfiable(): print " satisfiable" graphs = build_potential_graphs(cycle_mapping) good_states = list() for state in set(map(lambda s: string.join(s, ""), itertools.permutations(["a","a","b","b","c"]))): try: decider = InequalityDecider() decider.add_cycle_mapping(problem_def, cycle_mapping) for input, graph_plus in graphs.iteritems(): path = nx.shortest_path(graph_plus[0], state, graph_plus[1]) for f, t in zip(path[:-1], path[1:]): decider.add_transition(f, t, input) if decider.satisfiable(): good_states.append(state) except nx.exception.NetworkXNoPath: pass if len(good_states) > 0: print " have one" result.append( (clique, good_states) ) with open("%s/initializable_cliques/%d/%d.pickle"%(basedir, clique_size, my_slice), "w") as f: pickle.dump(result, f)
def build_decider(prefix): basedecider = InequalityDecider() basedecider.add_cycle_mapping(problem_def, cycle_mapping) for transition in prefix: basedecider.add_transition(*transition) return basedecider.freeze()