コード例 #1
0
 def setUp(self):
     super(SimulationDataParserTest, self).setUp()
     local_testdir = './teatdata'
     self._testdata_dir = os.path.join(FLAGS.test_srcdir, local_testdir)
     self._output_dir = tempfile.mkdtemp(
         dir=absltest.get_default_test_tmpdir())
     self._data_parser = parser.SimulationDataParser()
コード例 #2
0
    def _extract_detector_data(self):
        """Extracts detector data form xml files."""
        data_parser = simulation_data_parser.SimulationDataParser()
        visualizer = map_visualizer.MapVisualizer()

        detector_folder = os.path.join(self._output_dir, 'detector/')
        detector_trajectory_folder = os.path.join(detector_folder,
                                                  'detector_trajectory/')

        if not file_util.exists(detector_trajectory_folder):
            file_util.mkdir(detector_trajectory_folder)

        detector_files = os.listdir(detector_folder)
        for detector_file in detector_files:
            if not detector_file.endswith('.xml'):
                continue
            # print('Extract file: ', detector_file)
            output_file = os.path.splitext(detector_file)[0] + '.pkl'
            output_file = os.path.join(detector_trajectory_folder, output_file)
            detector_file = os.path.join(detector_folder, detector_file)
            print('Save file: ', output_file)
            data_parser.get_and_save_detector_data(detector_file, output_file)

        # Creates figures for individual detector.
        output_figure_folder = os.path.join(detector_folder, 'detector_fig/')
        if not file_util.f_exists(output_figure_folder):
            file_util.f_mkdir(output_figure_folder)
        visualizer.plot_individual_detector(detector_trajectory_folder,
                                            output_figure_folder)
コード例 #3
0
    def plot_traveling_time(self):
        """Plot tripinfo data."""
        visualizer = map_visualizer.MapVisualizer()
        data_parser = simulation_data_parser.SimulationDataParser()
        tripinfo_file = 'output/tripinfo.xml'
        # output_folder = 'output/'
        # output_file = 'tripinfo.pkl'

        tripinfo = data_parser.get_tripinfo_attribute_to_trips(tripinfo_file)

        bins = np.linspace(0, 12, 49)
        positions_on_edge = (np.array(tripinfo['depart']) -
                             np.array(tripinfo['departDelay'])) / 3600
        values_on_edge = np.array(tripinfo['duration'])
        print(len(values_on_edge), len(values_on_edge))

        # print(positions_on_edge)
        bin_mean, bin_boundary = visualizer._histogram_along_edge(
            values_on_edge, positions_on_edge, bins=bins)

        # print(bin_mean, bin_boundary)
        fig = pylab.figure(figsize=(8, 6))
        fig.add_subplot(111)
        pylab.plt.plot(bin_boundary[:-1], bin_mean)
        pylab.plt.xlabel('Time [h]')
        pylab.plt.xlim(0, 10)
        pylab.plt.ylim(0, 10000)
        pylab.plt.ylabel('Average traveling time.')
        pylab.savefig(os.path.join(self._output_dir,
                                   'traveling_time_hist.pdf'))
コード例 #4
0
    def parse_fcd_results_multiple_files(self):
        """Extract the data then save to file."""
        net = sumolib.net.readNet(self._sumo_net_file)
        data_parser = simulation_data_parser.SimulationDataParser()
        plot_edges = net.getEdges()

        fcd_file_folder = 'output/fcd_segments/'
        # fcd_file_list = os.listdir(fcd_file_folder)
        fcd_file_list = ['traffic.segment_2.fcd.xml']

        output_folder = os.path.join(self._output_dir, 'trajectory/')
        for fcd_file in fcd_file_list:
            print('Analyzing file: ', fcd_file)
            # time_segment_length = 0.5 * 3600
            time_segment_length = None
            # time_range = [0, 3600*12]
            time_range = None

            data_parser.save_batch_edge_id_to_trajectory(
                os.path.join(fcd_file_folder, fcd_file),
                plot_edges,
                time_range=time_range,
                time_segment_length=time_segment_length,
                parse_time_step=10,
                output_folder=output_folder)
コード例 #5
0
 def setUp(self):
   super(MapVisualizerTests, self).setUp()
   self._output_dir = tempfile.mkdtemp(dir=absltest.get_default_test_tmpdir())
   self._fcd_file = _load_file(_TESTDATA_DIR, _FCD_FILE_NAME)
   self._summary_file = _load_file(_TESTDATA_DIR, _SUMMARY_FILE_NAME)
   self._route_file = _load_file(_TESTDATA_DIR, _ROUTE_FILE_NAME)
   mtv_map_file = _load_file(_TESTDATA_DIR, _MTV_MAP_FILE_NAME)
   net = sumolib.net.readNet(mtv_map_file)
   self._map_visualier = map_visualizer.MapVisualizer(net)
   self._data_parser = simulation_data_parser.SimulationDataParser()
コード例 #6
0
def scenarios_detector_comparison(output_dir):
    """Compare different scenarios."""
    data_parser = simulation_data_parser.SimulationDataParser()
    visualizer = map_visualizer.MapVisualizer()

    fig = pylab.figure(figsize=(8, 6))
    ax = fig.add_subplot(111)

    load_input = file_util.load_variable(
        'Paradise_reverse_roads/demands/demands_taz_tuple.pkl')
    load_input = sorted(load_input)
    demand_time_line, _, demand_car_count = list(zip(*load_input))
    cumulative_values = np.cumsum(demand_car_count)
    pylab.plt.plot(np.array(demand_time_line) / 3600, cumulative_values)
    # print(cumulative_values[-1])
    # print(np.sum(demand_car_count))
    # visualizer.add_pertentage_interception_lines(
    #     np.array(demand_time_line) / 3600, demand_car_count, [0.5, .9, .95])

    detector_trajectory_folder = 'Paradise_reverse_roads/output/detector/detector_trajectory/'
    (time_line,
     arrival_car_count) = file_util.load_variable(detector_trajectory_folder +
                                                  'all_arrival_flow.pkl')
    cumulative_values = np.cumsum(arrival_car_count)
    print(cumulative_values[-1])
    pylab.plt.plot(time_line, cumulative_values)
    visualizer.add_pertentage_interception_lines(time_line, arrival_car_count,
                                                 [0.5, .9, .95])

    detector_trajectory_folder = 'Paradise_auto_routing/output/detector/detector_trajectory/'
    (time_line,
     arrival_car_count) = file_util.load_variable(detector_trajectory_folder +
                                                  'all_arrival_flow.pkl')
    cumulative_values = np.cumsum(arrival_car_count)
    print(cumulative_values[-1])
    pylab.plt.plot(time_line / 3600, cumulative_values)
    # visualizer.add_pertentage_interception_lines(
    #     time_line, arrival_car_count, [0.5, .9, .95])

    detector_trajectory_folder = 'Paradise_2s_baseline/output/detector/detector_trajectory/'
    (time_line,
     arrival_car_count) = file_util.load_variable(detector_trajectory_folder +
                                                  'all_arrival_flow.pkl')
    cumulative_values = np.cumsum(arrival_car_count)
    print(cumulative_values[-1])
    pylab.plt.plot(time_line, cumulative_values)

    pylab.plt.xlabel('Time [h]')
    pylab.plt.ylabel('Cummulative vehicles')
    ax.autoscale_view(True, True, True)
    pylab.savefig(os.path.join(output_dir, 'scenarios_arrival_comparison.pdf'))
コード例 #7
0
    def _analyze_summary_demands_vs_evacuation(self,
                                               demand_file,
                                               summary_file,
                                               output_dir=None):
        """Plot summary vs demands."""
        data_parser = simulation_data_parser.SimulationDataParser()
        visualizer = map_visualizer.MapVisualizer()

        demands = file_util.load_variable(demand_file)
        sorted_demands = sorted(demands, key=lambda x: x.time)
        demand_time_line = [x.time for x in sorted_demands]
        demand_time_line = np.array(demand_time_line) / 3600
        demand_car_count = [x.num_cars for x in sorted_demands]
        demand_cumulative_values = (np.cumsum(demand_car_count) /
                                    sum(demand_car_count))

        summary = data_parser.parse_summary_file(summary_file)
        summary_time_line = np.array(summary['time']) / 3600
        summary_cumulative_values = (np.array(summary['ended']) /
                                     sum(demand_car_count))

        # Calculate the gap between them.
        gap_area = visualizer.calculate_gap_area_between_cummulative_curves(
            demand_time_line, demand_cumulative_values, summary_time_line,
            summary_cumulative_values)

        if not output_dir:
            return (demand_time_line, demand_cumulative_values,
                    summary_time_line, summary_cumulative_values, gap_area)

        # Plot demands v.s. evacuation.
        fig = pylab.figure(figsize=(8, 6))
        ax = fig.add_subplot(111)
        pylab.plt.plot(demand_time_line,
                       demand_cumulative_values,
                       label='Demands')
        pylab.plt.plot(summary_time_line,
                       summary_cumulative_values,
                       label='Evacuation')
        visualizer.add_pertentage_interception_lines(
            summary_time_line, summary_cumulative_values, [0.5, .9, .95])
        pylab.plt.xlabel('Time [h]')
        pylab.plt.ylabel('Cummulative percentage of total vehicles')
        pylab.plt.legend()
        ax.autoscale_view(True, True, True)
        output_figure_path = os.path.join(output_dir, 'evacuation_curve.pdf')
        pylab.savefig(output_figure_path)

        return (demand_time_line, demand_cumulative_values, summary_time_line,
                summary_cumulative_values, gap_area)
コード例 #8
0
def scenarios_summary_comparison(output_dir):
    """Compare different scenarios."""
    data_parser = simulation_data_parser.SimulationDataParser()
    visualizer = map_visualizer.MapVisualizer()

    fig = pylab.figure(figsize=(8, 6))
    ax = fig.add_subplot(111)

    demands = file_util.load_variable(
        'MillValley_template/demands/demands_taz_tuple_std_0.5_portion_1.pkl')
    sorted_demands = sorted(demands, key=lambda x: x.time)
    demand_time_line = [x.time for x in sorted_demands]
    demand_car_count = [x.num_cars for x in sorted_demands]

    cumulative_values = np.cumsum(demand_car_count) / sum(demand_car_count)
    pylab.plt.plot(np.array(demand_time_line) / 3600,
                   cumulative_values,
                   label='Demands')

    summary = data_parser.parse_summary_file(
        'MillValley_RevRd_noTFL/output_std_0.5_portion_1/summary.xml')
    time_line = np.array(summary['time']) / 3600
    cumulative_values = np.array(summary['ended']) / sum(demand_car_count)
    pylab.plt.plot(time_line, cumulative_values, label='New scenario')

    summary = data_parser.parse_summary_file(
        'MillValley_auto_routing_baseline/output_std_0.5_portion_1/summary.xml'
    )
    time_line = np.array(summary['time']) / 3600
    cumulative_values = np.array(summary['ended']) / sum(demand_car_count)
    pylab.plt.plot(time_line, cumulative_values, label='Baseline auto-routing')

    summary = data_parser.parse_summary_file(
        'MillValley_shortest_path_baseline/output_std_0.5_portion_1/summary.xml'
    )
    time_line = np.array(summary['time']) / 3600
    cumulative_values = np.array(summary['ended']) / sum(demand_car_count)
    pylab.plt.plot(time_line, cumulative_values, label='Baseline fixed path')
    visualizer.add_pertentage_interception_lines(time_line, cumulative_values,
                                                 [0.5, .9, .95])

    pylab.plt.xlabel('Time [h]')
    pylab.plt.ylabel('Cummulative vehicles')
    ax.autoscale_view(True, True, True)
    # pylab.plt.xlim(0, 8)
    pylab.plt.legend(loc='lower right')
    pylab.savefig(
        os.path.join(output_dir, 'MV_evacuation_curve_std_0.5_comparison.pdf'))
コード例 #9
0
  def parse_fcd_results_single_file(self, hours):
    """Extract the data then save to file."""
    net = sumolib.net.readNet(self._sumo_net_file)
    data_parser = simulation_data_parser.SimulationDataParser()
    plot_edges = net.getEdges()

    fcd_file = os.path.join(self._output_dir, 'traffic.fcd.xml')
    output_folder = os.path.join(self._output_dir, 'trajectory/')
    if not file_util.f_exists(output_folder):
      file_util.f_mkdir(output_folder)

    time_segment_length_seconds = hours * 3600
    time_range_seconds = [0, 3600 * 12]
    data_parser.save_batch_edge_id_to_trajectory(
        fcd_file, plot_edges,
        time_range=time_range_seconds,
        time_segment_length=time_segment_length_seconds,
        parse_time_step=10, output_folder=output_folder)
コード例 #10
0
def scenarios_summary_comparison(output_dir):
    """Compare different scenarios."""
    data_parser = simulation_data_parser.SimulationDataParser()
    visualizer = map_visualizer.MapVisualizer()

    fig = pylab.figure(figsize=(8, 6))
    ax = fig.add_subplot(111)

    demands = file_util.load_variable(
        'Paradise_template/demands/demands_taz_tuple_std_0.7.pkl')
    sorted_demands = sorted(demands, key=lambda x: x.time)
    demand_time_line = [x.time for x in sorted_demands]
    demand_car_count = [x.num_cars for x in sorted_demands]

    cumulative_values = np.cumsum(demand_car_count) / sum(demand_car_count)
    pylab.plt.plot(np.array(demand_time_line) / 3600,
                   cumulative_values,
                   ':',
                   label='Demands',
                   color='black')

    summary = data_parser.parse_summary_file(
        'Paradise_RevRd_noTFL/output_std_0.7/summary.xml')
    time_line = np.array(summary['time']) / 3600
    cumulative_values = np.array(summary['ended']) / sum(demand_car_count)
    pylab.plt.plot(time_line, cumulative_values, '--', label='No block')

    summary = data_parser.parse_summary_file(
        'Paradise_RevRd_noTFL_road_blocker/output_std_0.7_road_block_21600/summary.xml'
    )
    time_line = np.array(summary['time']) / 3600
    cumulative_values = np.array(summary['ended']) / sum(demand_car_count)
    pylab.plt.plot(time_line,
                   cumulative_values,
                   label='t=5 h',
                   color=pylab.plt.cm.jet(1 / 6))

    summary = data_parser.parse_summary_file(
        'Paradise_RevRd_noTFL_road_blocker/output_std_0.7_road_block_18000/summary.xml'
    )
    time_line = np.array(summary['time']) / 3600
    cumulative_values = np.array(summary['ended']) / sum(demand_car_count)
    pylab.plt.plot(time_line,
                   cumulative_values,
                   label='t=4 h',
                   color=pylab.plt.cm.jet(2 / 6))

    summary = data_parser.parse_summary_file(
        'Paradise_RevRd_noTFL_road_blocker/output_std_0.7_road_block_10800/summary.xml'
    )
    time_line = np.array(summary['time']) / 3600
    cumulative_values = np.array(summary['ended']) / sum(demand_car_count)
    pylab.plt.plot(time_line,
                   cumulative_values,
                   label='t=3 h',
                   color=pylab.plt.cm.jet(3 / 6))

    summary = data_parser.parse_summary_file(
        'Paradise_RevRd_noTFL_road_blocker/output_std_0.7_road_block_7200/summary.xml'
    )
    time_line = np.array(summary['time']) / 3600
    cumulative_values = np.array(summary['ended']) / sum(demand_car_count)
    pylab.plt.plot(time_line,
                   cumulative_values,
                   label='t=2 h',
                   color=pylab.plt.cm.jet(4 / 6))

    summary = data_parser.parse_summary_file(
        'Paradise_RevRd_noTFL_road_blocker/output_std_0.7_road_block_3600/summary.xml'
    )
    time_line = np.array(summary['time']) / 3600
    cumulative_values = np.array(summary['ended']) / sum(demand_car_count)
    pylab.plt.plot(time_line,
                   cumulative_values,
                   label='t=1 h',
                   color=pylab.plt.cm.jet(5 / 6))

    summary = data_parser.parse_summary_file(
        'Paradise_RevRd_noTFL_road_blocker/output_std_0.7_road_block_0/summary.xml'
    )
    time_line = np.array(summary['time']) / 3600
    cumulative_values = np.array(summary['ended']) / sum(demand_car_count)
    pylab.plt.plot(time_line,
                   cumulative_values,
                   label='t=0 h',
                   color=pylab.plt.cm.jet(0.95))
    # visualizer.add_pertentage_interception_lines(
    #     time_line, cumulative_values, [0.5, .9, .95])

    pylab.plt.xlabel('Time [h]')
    pylab.plt.ylabel('Cummulative vehicles')
    ax.autoscale_view(True, True, True)
    pylab.plt.xlim(1, 6)
    pylab.plt.legend(loc='lower right')
    pylab.savefig(
        os.path.join(output_dir,
                     'evacuation_curve_std_0.7_road_block_comparison.pdf'))