Ejemplo n.º 1
0
def run_optimality_evaluation(G, model, randomness):
    model.reset_states()

    try:
        start_node_id = np.random.choice(G.nodes)
        goal_node_id = np.random.choice(G.nodes)

        try:
            truth_route = nx.shortest_path(G,
                                           start_node_id,
                                           goal_node_id,
                                           weight='best_travel_time')
        except nx.NetworkXNoPath:
            print("[ERROR] No path found")
            return None, None

        curr_node_id = start_node_id
        ml_route = []
        visited = collections.deque(maxlen=7)

        # Start node
        ml_route.append(curr_node_id)
        use_random_actions = False

        gt_duration = osmnx_utils.get_route_duration(truth_route, G)
        history = collections.deque(maxlen=5)

        while curr_node_id != goal_node_id:
            curr_node_id = algorithm_commons.predict_next_node_id(
                G, curr_node_id, goal_node_id, model, randomness=randomness)

            if curr_node_id:
                ml_route.append(curr_node_id)

            if osmnx_utils.get_route_duration(ml_route, G) > gt_duration * 1.5:
                print("x2 length, try again...")
                return None, None

        ml_duration = osmnx_utils.get_route_duration(ml_route, G)

        # print("------ METRICS ------")
        # print("GT duration: ", gt_duration, ". ML duration: ", ml_duration, ". Abs Diff: ", ml_duration - gt_duration, ". Ratio: ", gt_duration / ml_duration)
        # print("---------------------")

        # ##### PLOT GT AND ML PATHS ######
        # ox.plot_graph_route(G, truth_route)
        # ox.plot_graph_route(G, ml_route)

        if gt_duration == 0 or ml_duration == 0:
            return None, None
        else:
            return ml_duration, gt_duration

    except nx.NetworkXError:
        return None, None
Ejemplo n.º 2
0
def run_optimality_evaluation(G):
    start_node_id = np.random.choice(G.nodes)
    goal_node_id = np.random.choice(G.nodes)

    truth_route = nx.shortest_path(G,
                                   start_node_id,
                                   goal_node_id,
                                   weight='best_travel_time')

    curr_node_id = start_node_id
    ml_route = []
    visited = collections.deque(maxlen=7)

    # Start node
    ml_route.append(curr_node_id)
    use_random_actions = False

    history = collections.deque(maxlen=5)
    while curr_node_id != goal_node_id:
        curr_node_id = predict_next_node_id(G,
                                            curr_node_id,
                                            goal_node_id,
                                            model,
                                            randomness=0.1)
        ml_route.append(curr_node_id)

    gt_duration = get_route_duration(truth_route, G)
    ml_duration = get_route_duration(ml_route, G)

    print("------ METRICS ------")
    print("GT duration: ", gt_duration, ". ML duration: ", ml_duration,
          ". Abs Diff: ", ml_duration - gt_duration, ". Ratio: ",
          gt_duration / ml_duration)
    print("---------------------")

    ###### PLOT GT AND ML PATHS ######
    ox.plot_graph_route(G, truth_route)
    ox.plot_graph_route(G, ml_route)
Ejemplo n.º 3
0
def run_generalization_evaluation(G, model):
    experiment_count = 50

    experiment_node_pairs = [(np.random.choice(G.nodes),
                              np.random.choice(G.nodes))
                             for i in range(1, experiment_count)]

    # Eval optimality and arrival rate to later check how
    # dynamic network changes affect these
    # optimalities = []

    # for start_goal_pair in experiment_node_pairs:
    #     ml_route = []
    #     optimal_route = []
    #     curr_node_id = start_goal_pair[0]
    #     goal_node_id = start_goal_pair[1]
    #     before_modification_node_id = curr_node_id

    #     while curr_node_id != start_goal_pair[1]:
    #         for i in range(0, 5):
    #             curr_node_id = predict_next_node_id(G, curr_node_id, goal_node_id, model)
    #             ml_route.append(curr_node_id)

    #         optimal_route = utils.split_list_at_value(nx.shortest_path(G, before_modification_node_id,
    #                                                     goal_node_id, weight='best_travel_time'), curr_node_id)

    #         optimalities.append(get_route_duration(ml_route, G) / get_route_duration(optimal_route, G))
    #         ml_route = []
    #         optimal_route = []
    #         before_modification_node_id = curr_node_id
    #         # Modify graph

    # print("Optimality rate (dynamic): ", reduce(lambda a,b: a + b, optimalities) / len(optimalities))

    optimalities_static = []

    for start_goal_pair in experiment_node_pairs:
        ml_route = []
        optimal_route = []
        curr_node_id = start_goal_pair[0]
        goal_node_id = start_goal_pair[1]
        before_modification_node_id = curr_node_id

        while curr_node_id != start_goal_pair[1]:
            curr_node_id = predict_next_node_id(G, curr_node_id, goal_node_id,
                                                model)
            ml_route.append(curr_node_id)

        optimal_route = nx.shortest_path(G,
                                         start_goal_pair[0],
                                         goal_node_id,
                                         weight='best_travel_time')
        optimalities_static.append(
            get_route_duration(ml_route, G) /
            get_route_duration(optimal_route, G))

        random_network_modification(G)

    print(
        "Optimality rate (dynamic): ",
        reduce(lambda a, b: a + b, optimalities_static) /
        len(optimalities_static))

    optimalities_static = []

    for start_goal_pair in experiment_node_pairs:
        ml_route = []
        optimal_route = []
        curr_node_id = start_goal_pair[0]
        goal_node_id = start_goal_pair[1]
        before_modification_node_id = curr_node_id

        while curr_node_id != start_goal_pair[1]:
            curr_node_id = predict_next_node_id(G, curr_node_id, goal_node_id,
                                                model)
            ml_route.append(curr_node_id)

        optimal_route = nx.shortest_path(G,
                                         start_goal_pair[0],
                                         goal_node_id,
                                         weight='best_travel_time')
        optimalities_static.append(
            get_route_duration(ml_route, G) /
            get_route_duration(optimal_route, G))

    print(
        "Optimality rate (static): ",
        reduce(lambda a, b: a + b, optimalities_static) /
        len(optimalities_static))
Ejemplo n.º 4
0
def run_generalization_evaluation(G, model):
    experiment_count = 50

    experiment_node_pairs = [(np.random.choice(G.nodes),
                              np.random.choice(G.nodes))
                             for i in range(1, experiment_count)]

    optimalities_static = []

    for start_goal_pair in experiment_node_pairs:
        ml_route = []
        optimal_route = []
        curr_node_id = start_goal_pair[0]
        goal_node_id = start_goal_pair[1]
        before_modification_node_id = curr_node_id

        while curr_node_id != start_goal_pair[1]:
            curr_node_id = predict_next_node_id(G, curr_node_id, goal_node_id,
                                                model)
            ml_route.append(curr_node_id)

        optimal_route = nx.shortest_path(G,
                                         start_goal_pair[0],
                                         goal_node_id,
                                         weight='best_travel_time')
        optimalities_static.append(
            get_route_duration(ml_route, G) /
            get_route_duration(optimal_route, G))

        random_network_modification(G)

    print(
        "Optimality rate (dynamic): ",
        reduce(lambda a, b: a + b, optimalities_static) /
        len(optimalities_static))

    optimalities_static = []

    for start_goal_pair in experiment_node_pairs:
        ml_route = []
        optimal_route = []
        curr_node_id = start_goal_pair[0]
        goal_node_id = start_goal_pair[1]
        before_modification_node_id = curr_node_id

        while curr_node_id != start_goal_pair[1]:
            curr_node_id = predict_next_node_id(G, curr_node_id, goal_node_id,
                                                model)
            ml_route.append(curr_node_id)

        optimal_route = nx.shortest_path(G,
                                         start_goal_pair[0],
                                         goal_node_id,
                                         weight='best_travel_time')
        optimalities_static.append(
            get_route_duration(ml_route, G) /
            get_route_duration(optimal_route, G))

    print(
        "Optimality rate (static): ",
        reduce(lambda a, b: a + b, optimalities_static) /
        len(optimalities_static))