Как агрегировать результаты моделирования на основе ребер в ячейки сетки? - PullRequest
0 голосов
/ 01 мая 2019

У меня есть сеть, которая должна быть разделена на сетку квадратных ячеек (200 х 200 м). каждая ячейка включает подсегменты краев.

Я сгенерировал вывод данных моделирования и использовал sumolib для извлечения вывода на основе ребер. Я должен рассчитать средний объем трафика в каждой ячейке (не по краю), измеренный в (количество транспортных средств в секунду).

это часть сценария, который я написал:

  1. извлечение значений плотности и скорости по краям:

     for interval in sumolib.output.parse('cairo.edgeDataOutput.xml','interval'):
         for edge in interval.edge:
             edgeDataOutput[edge.id]= (edge.density,edge.speed)
    
  2. после сохранения плотности и скорости в edgeDataOutput я должен объединиться в ячейки и рассчитать объем avg.traffic в каждой ячейке:

    for cellID in ids:
        density=0 
        speed=0
        n=0   #avg.traffic vol
        for edgeID in cell_edgeMap[cellID].keys():
            if edgeID in edgeDataOutput.keys():
                density+= float(edgeDataOutput[edgeID][1])
                speed+= float(edgeDataOutput[edgeID][2])
                n += (float(edgeDataOutput[edgeID][1])/1000) * float(edgeDataOutput[edgeID][2])  #traffic vol = (density/1000)*speed 
    
        densities.append(int((density / len(cell_edgeMap[cellID].keys()))+0.5))
        speeds.append(int((speed / len(cell_edgeMap[cellID].keys()))+0.5))
        numOfVehicles.append(int(n/len(cell_edgeMap[cellID].keys())))
    

Как видно из кода, я суммирую значения плотности, скорости каждого ребра в ячейке, а затем делю на число ребер внутри ячейки, чтобы получить среднее значение.

плотность в ячейке (veh / Km) = сумма (плотность на каждом ребре внутри ячейки) / количество ребер внутри ячейки.

скорость в ячейке (м / с) = сумма (скорость на каждом ребре внутри ячейки) / количество ребер в ячейке.

и я использую следующую формулу для расчета объема трафика в каждой ячейке:

средний объем трафика в ячейке (veh / s) = сумма (средний объем трафика на каждом ребре внутри ячейки) / количество ребер внутри ячейки.

средний объем трафика на краю (veh / s) = плотность на краю (veh / Km) * скорость на краю (м / с) / 1000.

Я просто хочу убедиться, что я использую формулу записи.

1 Ответ

0 голосов
/ 04 мая 2019

Нелегко ответить, правильно ли вы поступили, потому что усреднение по времени и пространству всегда сложно.Кроме того, не ясно, что вы пытаетесь измерить.Объем движения обычно обозначает общее (или среднее) количество транспортных средств и измеряется без единицы (то есть только количество транспортных средств).Транспортный поток измеряется в транспортных средствах за единицу времени, но обычно применяется только к поперечному сечению, а не к области.Если вы хотите получить среднее количество автомобилей в ячейке, достаточно поделить сумму числа sampleSeconds на длину интервала.Второе значение требует более глубокого обсуждения, но я бы, по крайней мере, умножил бы его на длину края при суммировании.

...