У меня есть сеть, которая должна быть разделена на сетку квадратных ячеек (200 х 200 м). каждая ячейка включает подсегменты краев.
Я сгенерировал вывод данных моделирования и использовал sumolib для извлечения вывода на основе ребер. Я должен рассчитать средний объем трафика в каждой ячейке (не по краю), измеренный в (количество транспортных средств в секунду).
это часть сценария, который я написал:
извлечение значений плотности и скорости по краям:
for interval in sumolib.output.parse('cairo.edgeDataOutput.xml','interval'):
for edge in interval.edge:
edgeDataOutput[edge.id]= (edge.density,edge.speed)
после сохранения плотности и скорости в 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.
Я просто хочу убедиться, что я использую формулу записи.