Пример #1
0
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)))
Пример #2
0
 def elements():
     for element in parse_fast(options.datafile, options.element, [options.idAttr, options.attribute]):
         yield getattr(element, options.idAttr), getattr(element, options.attribute)