def main(options): routes = defaultdict(list) # vehID -> recorded edges minSpeed = defaultdict(lambda: 1000) active = set() # vehicles that have passed the first filterRoute edge for vehicle in parse_fast(options.fcdfile, 'vehicle', ['id', 'speed', 'lane']): vehID = vehicle.id edge = vehicle.lane[0:vehicle.lane.rfind('_')] if len(routes[vehID]) == 0 or routes[vehID][-1] != edge: routes[vehID].append(edge) if options.filterRoute and vehID not in active: if edge in options.filterRoute: active.add(vehID) else: continue minSpeed[vehID] = min(minSpeed[vehID], float(vehicle.speed)) n = 0 delayed = 0 for vehID, route in routes.items(): skip = False for required in options.filterRoute: if required not in route: skip = True break if not skip: n += 1 if minSpeed[vehID] < options.minspeed: delayed += 1 print("n=%s d=%s coordinationFactor=%s" % (n, delayed, (n - delayed) / float(n)))
def elements(): for element in parse_fast(options.datafile, options.element, [options.idAttr, options.attribute]): yield getattr(element, options.idAttr), getattr(element, options.attribute)