def get_best_sched(overpasses, area_of_interest, scores, delay, avoid_list=None): """Get the best schedule based on *area_of_interest*. """ avoid_list = avoid_list or [] print avoid_list raw_input() passes = sorted(overpasses, key=lambda x: x.risetime) grs = conflicting_passes(passes, delay) logger.debug("conflicting %s", str(grs)) ncgrs = [get_non_conflicting_groups(gr, delay) for gr in grs] logger.debug("non conflicting %s", str(ncgrs)) n_vertices = len(passes) graph = Graph(n_vertices=n_vertices + 2) def add_arc(graph, p1, p2, hook=None): logger.debug("Adding arc between " + str(p1) + " and " + str(p2) + "...") if p1 in avoid_list or p2 in avoid_list: w = 0 logger.debug("...0 because in the avoid_list!") else: w = combine(p1, p2, area_of_interest, scores) logger.debug("...with weight " + str(w)) with open("/tmp/schedule.gv", "a") as fp_: fp_.write(' "' + str(p1) + '" -> "' + str(p2) + '" [ label = "' + str(w) + '" ];\n') graph.add_arc(passes.index(p1) + 1, passes.index(p2) + 1, w) if hook is not None: hook() prev = set() for ncgr in ncgrs: for pr in prev: foll = set(gr[0] for gr in ncgr) for f in foll: add_arc(graph, pr, f) prev = set(sorted(gr, key=lambda x: x.falltime)[-1] for gr in ncgr) for gr in ncgr: if len(gr) > 1: for p1, p2 in zip(gr[:-1], gr[1:]): add_arc(graph, p1, p2) for pr in prev: graph.add_arc(passes.index(pr) + 1, n_vertices + 1) for first in ncgrs[0][0]: graph.add_arc(0, passes.index(first) + 1) dist, path = graph.dag_longest_path(0, n_vertices + 1) del dist return [passes[idx - 1] for idx in path[1:-1]], (graph, passes)
def get_best_sched(overpasses, area_of_interest, delay, avoid_list=None): """Get the best schedule based on *area_of_interest*. """ avoid_list = avoid_list or [] passes = sorted(overpasses, key=lambda x: x.risetime) grs = conflicting_passes(passes, delay) logger.debug("conflicting %s", str(grs)) ncgrs = [get_non_conflicting_groups(gr, delay) for gr in grs] logger.debug("non conflicting %s", str(ncgrs)) n_vertices = len(passes) graph = Graph(n_vertices=n_vertices + 2) def add_arc(graph, p1, p2, hook=None): logger.debug("Adding arc between " + str(p1) + " and " + str(p2) + "...") if p1 in avoid_list or p2 in avoid_list: w = 0 logger.debug("...0 because in the avoid_list!") else: w = combine(p1, p2, area_of_interest) logger.debug("...with weight " + str(w)) # with open("/tmp/schedule.gv", "a") as fp_: # fp_.write(' "' + str(p1) + '" -> "' + str(p2) + # '" [ label = "' + str(w) + '" ];\n') graph.add_arc(passes.index(p1) + 1, passes.index(p2) + 1, w) if hook is not None: hook() prev = set() for ncgr in ncgrs: for pr in prev: foll = set(gr[0] for gr in ncgr) for f in foll: add_arc(graph, pr, f) prev = set(sorted(gr, key=lambda x: x.falltime)[-1] for gr in ncgr) for gr in ncgr: if len(gr) > 1: for p1, p2 in zip(gr[:-1], gr[1:]): add_arc(graph, p1, p2) for pr in prev: graph.add_arc(passes.index(pr) + 1, n_vertices + 1) for first in ncgrs[0][0]: graph.add_arc(0, passes.index(first) + 1) dist, path = graph.dag_longest_path(0, n_vertices + 1) del dist return [passes[idx - 1] for idx in path[1:-1]], (graph, passes)