From 9041ae3255b0dd2198b4689736f7734673557ce6 Mon Sep 17 00:00:00 2001 From: Yangge Li <li213@illinois.edu> Date: Mon, 20 Jun 2022 10:56:14 -0500 Subject: [PATCH] handle cases when the returned transition is empty --- demo/demo2.py | 29 ++++++++----------- demo/demo3.py | 26 ++++++++--------- demo/demo4.py | 22 +++++++------- demo/demo7.py | 20 +++++++------ .../scene_verifier/analysis/simulator.py | 6 +++- .../scene_verifier/analysis/verifier.py | 3 +- .../scene_verifier/scenario/scenario.py | 5 +++- 7 files changed, 57 insertions(+), 54 deletions(-) diff --git a/demo/demo2.py b/demo/demo2.py index 8a102311..7c8d006f 100644 --- a/demo/demo2.py +++ b/demo/demo2.py @@ -54,22 +54,17 @@ if __name__ == "__main__": (VehicleMode.Normal, LaneMode.Lane1), ] ) - # # res_list = scenario.simulate_multi(40,1) - # traces = scenario.verify(40) + # res_list = scenario.simulate(40) + traces = scenario.verify(40) - # fig = plt.figure(2) - # fig = plot_map(tmp_map, 'g', fig) - # fig = plot_reachtube_tree(traces, 'car1', 1, [2], 'b', fig) - # fig = plot_reachtube_tree(traces, 'car2', 1, [2], 'r', fig) - # # for traces in res_list: - # # generate_simulation_anime(traces, tmp_map, fig) - # # # fig,x_lim,y_lim = plot_simulation_tree(traces, 'car1', 1, [2], 'b', fig,x_lim,y_lim) - # # # fig,x_lim,y_lim = plot_simulation_tree(traces, 'car2', 1, [2], 'r', fig,x_lim,y_lim) + fig = plt.figure(2) + fig = plot_map(tmp_map, 'g', fig) + fig = plot_reachtube_tree(traces, 'car1', 1, [2], 'b', fig) + fig = plot_reachtube_tree(traces, 'car2', 1, [2], 'r', fig) + plt.show() - # plt.show() - -# this is for plot-based visualization - traces = scenario.simulate(40) - fig = go.Figure() - fig = plotly_simulation_anime(traces, tmp_map, fig) - fig.show() + # # this is for plot-based visualization + # traces = scenario.simulate(40) + # fig = go.Figure() + # fig = plotly_simulation_anime(traces, tmp_map, fig) + # fig.show() diff --git a/demo/demo3.py b/demo/demo3.py index 54121e8f..1ba4fc08 100644 --- a/demo/demo3.py +++ b/demo/demo3.py @@ -42,7 +42,7 @@ class State: if __name__ == "__main__": - input_code_name = './example_controller4.py' + input_code_name = './demo/example_controller4.py' scenario = Scenario() car = CarAgent('car1', file_name=input_code_name) @@ -70,18 +70,18 @@ if __name__ == "__main__": (VehicleMode.Normal, LaneMode.Lane1), ] ) - # traces = scenario.simulate(70) - traces = scenario.verify(70) + traces = scenario.simulate(70) + # traces = scenario.verify(70) - fig = plt.figure(2) - fig = plot_map(tmp_map, 'g', fig) - fig = plot_reachtube_tree(traces, 'car1', 1, [2], 'b', fig) - fig = plot_reachtube_tree(traces, 'car2', 1, [2], 'r', fig) - fig = plot_reachtube_tree(traces, 'car3', 1, [2], 'r', fig) - fig = plot_reachtube_tree(traces, 'car4', 1, [2], 'r', fig) - plt.show() + # fig = plt.figure(2) + # fig = plot_map(tmp_map, 'g', fig) + # fig = plot_reachtube_tree(traces, 'car1', 1, [2], 'b', fig) + # fig = plot_reachtube_tree(traces, 'car2', 1, [2], 'r', fig) + # fig = plot_reachtube_tree(traces, 'car3', 1, [2], 'r', fig) + # fig = plot_reachtube_tree(traces, 'car4', 1, [2], 'r', fig) + # plt.show() - # fig = go.Figure() - # fig = plotly_simulation_anime(traces, tmp_map, fig) - # fig.show() + fig = go.Figure() + fig = plotly_simulation_anime(traces, tmp_map, fig) + fig.show() diff --git a/demo/demo4.py b/demo/demo4.py index a7b1bb85..86d69d5e 100644 --- a/demo/demo4.py +++ b/demo/demo4.py @@ -79,18 +79,18 @@ if __name__ == "__main__": (VehicleMode.Normal, LaneMode.Lane3), ] ) - # traces = scenario.simulate(80) - traces = scenario.verify(80) + traces = scenario.simulate(80) + # traces = scenario.verify(80) - fig = plt.figure(2) - fig = plot_map(tmp_map, 'g', fig) - fig = plot_reachtube_tree(traces, 'car1', 1, [2], 'b', fig) - fig = plot_reachtube_tree(traces, 'car2', 1, [2], 'r', fig) - fig = plot_reachtube_tree(traces, 'car3', 1, [2], 'r', fig) - fig = plot_reachtube_tree(traces, 'car4', 1, [2], 'r', fig) - fig = plot_reachtube_tree(traces, 'car5', 1, [2], 'r', fig) - fig = plot_reachtube_tree(traces, 'car6', 1, [2], 'r', fig) - plt.show() + # fig = plt.figure(2) + # fig = plot_map(tmp_map, 'g', fig) + # fig = plot_reachtube_tree(traces, 'car1', 1, [2], 'b', fig) + # fig = plot_reachtube_tree(traces, 'car2', 1, [2], 'r', fig) + # fig = plot_reachtube_tree(traces, 'car3', 1, [2], 'r', fig) + # fig = plot_reachtube_tree(traces, 'car4', 1, [2], 'r', fig) + # fig = plot_reachtube_tree(traces, 'car5', 1, [2], 'r', fig) + # fig = plot_reachtube_tree(traces, 'car6', 1, [2], 'r', fig) + # plt.show() # fig = go.Figure() # fig = plotly_simulation_anime(traces, tmp_map, fig) diff --git a/demo/demo7.py b/demo/demo7.py index 0b93f3f6..fd2b0b39 100644 --- a/demo/demo7.py +++ b/demo/demo7.py @@ -45,7 +45,7 @@ class State: if __name__ == "__main__": - input_code_name = './example_controller8.py' + input_code_name = './demo/example_controller8.py' scenario = Scenario() car = CarAgent('car1', file_name=input_code_name) @@ -89,17 +89,19 @@ if __name__ == "__main__": (VehicleMode.Normal, LaneMode.Lane3), ] ) - traces = scenario.simulate(80) - # traces = scenario.verify(80) + traces = scenario.simulate(20) + # traces = scenario.verify(15) # fig = plt.figure(2) # fig = plot_map(tmp_map, 'g', fig) - # fig = plot_reachtube_tree(traces, 'car1', 1, [2], 'b', fig) - # fig = plot_reachtube_tree(traces, 'car2', 1, [2], 'r', fig) - # fig = plot_reachtube_tree(traces, 'car3', 1, [2], 'r', fig) - # fig = plot_reachtube_tree(traces, 'car4', 1, [2], 'r', fig) - # fig = plot_reachtube_tree(traces, 'car5', 1, [2], 'r', fig) - # fig = plot_reachtube_tree(traces, 'car6', 1, [2], 'r', fig) + # fig = plot_reachtube_tree(traces, 'car1', 1, [2], 'r', fig) + # fig = plot_reachtube_tree(traces, 'car2', 1, [2], 'g', fig) + # fig = plot_reachtube_tree(traces, 'car3', 1, [2], 'g', fig) + # fig = plot_reachtube_tree(traces, 'car4', 1, [2], 'g', fig) + # fig = plot_reachtube_tree(traces, 'car5', 1, [2], 'g', fig) + # fig = plot_reachtube_tree(traces, 'car6', 1, [2], 'g', fig) + # fig = plot_reachtube_tree(traces, 'car7', 1, [2], 'g', fig) + # fig = plot_reachtube_tree(traces, 'car8', 1, [2], 'g', fig) # plt.show() fig = go.Figure() diff --git a/dryvr_plus_plus/scene_verifier/analysis/simulator.py b/dryvr_plus_plus/scene_verifier/analysis/simulator.py index fab7aa29..c1099ecb 100644 --- a/dryvr_plus_plus/scene_verifier/analysis/simulator.py +++ b/dryvr_plus_plus/scene_verifier/analysis/simulator.py @@ -34,7 +34,7 @@ class Simulator: while simulation_queue != []: node:AnalysisTreeNode = simulation_queue.pop(0) print(node.start_time, node.mode) - remain_time = time_horizon - node.start_time + remain_time = round(time_horizon - node.start_time,10) if remain_time <= 0: continue # For trace not already simulated @@ -49,6 +49,10 @@ class Simulator: transitions, transition_idx = transition_graph.get_transition_simulate_new(node) + # If there's no transitions (returned transitions is empty), continue + if not transitions: + continue + # truncate the computed trajectories from idx and store the content after truncate truncated_trace = {} for agent_idx in node.agent: diff --git a/dryvr_plus_plus/scene_verifier/analysis/verifier.py b/dryvr_plus_plus/scene_verifier/analysis/verifier.py index 01fcdca1..123729a6 100644 --- a/dryvr_plus_plus/scene_verifier/analysis/verifier.py +++ b/dryvr_plus_plus/scene_verifier/analysis/verifier.py @@ -65,8 +65,7 @@ class Verifier: # print("here") # TODO: Check safety conditions here - if node.trace['car1'][-1][0] > 50.01: - print("stop here") + # Get all possible transitions to next mode all_possible_transitions = transition_graph.get_transition_verify_new(node) max_end_idx = 0 diff --git a/dryvr_plus_plus/scene_verifier/scenario/scenario.py b/dryvr_plus_plus/scene_verifier/scenario/scenario.py index 142b5172..8a064619 100644 --- a/dryvr_plus_plus/scene_verifier/scenario/scenario.py +++ b/dryvr_plus_plus/scene_verifier/scenario/scenario.py @@ -253,7 +253,10 @@ class Scenario: tmp = tmp[1] for var in discrete_variable_dict: tmp = tmp.replace(var, f"'{discrete_variable_dict[var]}'") - possible_dest[i] = eval(tmp) + res = eval(tmp) + if not isinstance(res, list): + res = [res] + possible_dest[i] = res else: tmp = tmp[1].split('.') if tmp[0].strip(' ') in agent.controller.modes: -- GitLab