Как агрегировать выходные данные моделирования на основе ребер в ячейки сетки?

У меня есть сеть, которую нужно разделить на сетку квадратных ячеек (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, мне нужно объединить в ячейки и вычислить средний объем трафика в каждой ячейке:

    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 / км) = сумма (плотность на каждом краю внутри ячейки) / количество краев внутри ячейки.

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

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

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

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

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


person Rehab11    schedule 01.05.2019    source источник


Ответы (1)


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

person Michael    schedule 04.05.2019
comment
Я хочу измерить количество автомобилей в секунду внутри каждой ячейки сетки. согласно вашему ответу, это должно быть рассчитано как sampledSeconds / Period, умноженное на длину края, а затем суммируемое для каждого края внутри ячейки? - person Rehab11; 10.06.2019
comment
Я попытался прояснить, что количество автомобилей в секунду является значимым значением только при рассмотрении какого-либо поперечного сечения. Что должно означать это значение в области? - person Michael; 10.06.2019
comment
Что вы имеете в виду под поперечным сечением? Я работаю над симуляцией сети, в которой автомобили считаются узлами и отправляют данные в RSU. Каждый rsu имеет ограниченную емкость - количество сообщений, которые он может обрабатывать в секунду. Вот почему я хочу получить количество автомобилей в секунду в зоне покрытия РСУ. - person Rehab11; 13.06.2019
comment
Хорошо, тогда вам, вероятно, просто нужно общее количество транспортных средств в определенное время в ячейке, а не что-то вроде скорости въезда или выезда транспортных средств, поэтому мои первоначальные замечания относительно объема все еще применимы. Так что просто разделите выбранные секунды на длину периода и просуммируйте их для всех соответствующих фронтов. - person Michael; 14.06.2019