def reduceVtype(taxis):
    """Reduces the vtypeDict to the relevant information."""
    taxis.sort() #sort it for binary search    
    newVtypeDict={}
    for timestep in vtypeDict:
        if timestep%period==0: #timesteps which are a multiple of the period            
            newVtypeDict[timestep]=([tup for tup in vtypeDict[timestep] if BinarySearch.isElmInList(taxis,tup[0])])
    return newVtypeDict
예제 #2
0
def reduceVtype(taxis):
    """Reduces the vtypeDict to the relevant information."""
    taxis.sort() #sort it for binary search    
    newVtypeDict={}
    for timestep in vtypeDict:
        if timestep%period==0: #timesteps which are a multiple of the period            
            newVtypeDict[timestep]=([tup for tup in vtypeDict[timestep] if BinarySearch.isElmInList(taxis,tup[0])])
    return newVtypeDict
예제 #3
0
def createOutput():
    """Creates a file with a comparison of speeds for each edge
    between the taxis and the average speed from the current edge."""

    firstPeriod = True
    # get edge No
    edgesNo = 0
    edgesSet = set()
    for timestep, taxiList in vtypeDict.iteritems():
        for tup in taxiList:
            edgesSet.add(tup[1])
    edgesNo = len(edgesSet)

    outputFile = open(path.FQoutput, 'w')
    outputFile.write('<?xml version="1.0"?>\n')
    outputFile.write(
        '<paramEffects aggregationInterval="%d" vehicles="%d" edges="%d">\n' %
        (aggInterval, vehSum, edgesNo))
    for period, quota, vtypeDictR, taxiSum in generatePeriodQuotaSets(True):
        if quota is None:
            if not firstPeriod:
                outputFile.write("\t</periods>\n")
            else:
                firstPeriod = False
            outputFile.write('\t<periods period="%d">\n' % (period))
        else:
            simpleTaxiMeanVList = [0, 1]
            simpleEdgeMeanVList = [0, 1]
            drivenEdgesSet = set()

            if len(vtypeDictR) == 0:  # if the processed FCD returns no Values
                print("noData p", period, " q", quota)
                drivenEdgesSet.add(0)
            else:  # create mean from all taxi speed values
                for timestep, taxiList in vtypeDictR.iteritems():
                    for tup in taxiList:  # all elements in this timestep
                        simpleTaxiMeanVList[0] += tup[2]
                        simpleTaxiMeanVList[1] += 1
                        drivenEdgesSet.add(tup[1])
            # create mean from all edge speed values which are driven by the
            # chosen taxis
            drivenEdgesList = list(drivenEdgesSet)
            drivenEdgesList.sort()
            # print "dataSets ",simpleTaxiMeanVList[1]

            # --edgeDump-- #
            """
            for i in edgeDumpDict.keys(): #all intervals
                for edge,v in edgeDumpDict[i]:
                   if BinarySearch.isElmInList(drivenEdgesList,edge):
                       simpleEdgeMeanVList[0]+=v
                       simpleEdgeMeanVList[1]+=1
            """
            # --vtype-- #

            for timestep, taxiList in vtypeDict.iteritems():
                for tup in taxiList:
                    if BinarySearch.isElmInList(drivenEdgesList, tup[1]):
                        simpleEdgeMeanVList[0] += tup[2]
                        simpleEdgeMeanVList[1] += 1

            # calc values for output
            detectedEdges = len(drivenEdgesSet)
            relDetectedEdges = detectedEdges * 100.0 / edgesNo
            vSim = simpleEdgeMeanVList[0] / simpleEdgeMeanVList[1]
            vSimFCD = simpleTaxiMeanVList[0] / simpleTaxiMeanVList[1]
            vAbsDiff = vSimFCD - vSim
            if vSim != 0:
                vRelDiff = vAbsDiff / vSim * 100
            else:
                vRelDiff = 100
            if vRelDiff < -40:
                vRelDiff = -35

            outputFile.write(
                '\t\t<values taxiQuota="%f" taxis="%d" simMeanSpeed="%f" simFcdMeanSpeed="%f" '
                % (
                    quota,
                    taxiSum,
                    vSim,
                    vSimFCD,
                ))
            outputFile.write('detectedEdges="%d" notDetectedEdges="%d" ' %
                             (detectedEdges, edgesNo - detectedEdges))
            outputFile.write(
                'absSpeedDiff="%f" relSpeedDiff="%f" relDetectedEdges="%f" relNotDetectedEdges="%f"/>\n'
                %
                (vAbsDiff, vRelDiff, relDetectedEdges, 100 - relDetectedEdges))
    outputFile.write("\t</periods>\n</paramEffects>")
    outputFile.close()
def createOutput():
    """Creates a file with a comparison of speeds for each edge 
    between the taxis and the average speed from the current edge."""
    
    firstPeriod=True
    #get edge No
    edgesNo=0
    edgesSet=set()    
    for timestep,taxiList in vtypeDict.iteritems():
                for tup in taxiList:                    
                    edgesSet.add(tup[1]) 
    edgesNo=len(edgesSet)
    
        
    outputFile=open(path.FQoutput,'w')
    outputFile.write('<?xml version="1.0"?>\n')
    outputFile.write('<paramEffects aggregationInterval="%d" vehicles="%d" edges="%d">\n' %(aggInterval, vehSum, edgesNo))
    for period, quota, vtypeDictR, taxiSum in generatePeriodQuotaSets(True):         
        if quota==None:
            if not firstPeriod: outputFile.write("\t</periods>\n")                
            else: firstPeriod=False            
            outputFile.write('\t<periods period="%d">\n' %(period))
        else:
            simpleTaxiMeanVList=[0,1]
            simpleEdgeMeanVList=[0,1]
            drivenEdgesSet=set()    
            
            if len(vtypeDictR)==0: #if the processed FCD returns no Values 
                print "noData p",period," q",quota                
                drivenEdgesSet.add(0)  
            else: #create mean from all taxi speed values
                for timestep,taxiList in vtypeDictR.iteritems():
                    for tup in taxiList: #all elements in this timestep 
                     simpleTaxiMeanVList[0]+=tup[2]
                     simpleTaxiMeanVList[1]+=1                     
                     drivenEdgesSet.add(tup[1])              
            #create mean from all edge speed values which are driven by the chosen taxis
            drivenEdgesList=list(drivenEdgesSet)
            drivenEdgesList.sort()
            #print "dataSets ",simpleTaxiMeanVList[1] 
            
            #--edgeDump--#
            """
            for i in edgeDumpDict.keys(): #all intervals
                for edge,v in edgeDumpDict[i]:                   
                   if BinarySearch.isElmInList(drivenEdgesList,edge):
                       simpleEdgeMeanVList[0]+=v
                       simpleEdgeMeanVList[1]+=1
            """
            #--vtype--#
            
            for timestep,taxiList in vtypeDict.iteritems():
                for tup in taxiList:
                    if BinarySearch.isElmInList(drivenEdgesList,tup[1]):                        
                        simpleEdgeMeanVList[0]+=tup[2]
                        simpleEdgeMeanVList[1]+=1
            
            
            #calc values for output 
            detectedEdges=len(drivenEdgesSet) 
            relDetectedEdges=detectedEdges*100.0/edgesNo            
            vSim=simpleEdgeMeanVList[0]/simpleEdgeMeanVList[1]
            vSimFCD=simpleTaxiMeanVList[0]/simpleTaxiMeanVList[1]
            vAbsDiff=vSimFCD-vSim
            if vSim!=0:
                vRelDiff=vAbsDiff/vSim*100
            else:                
                vRelDiff=100
            if vRelDiff<-40: vRelDiff=-35
                       
            outputFile.write('\t\t<values taxiQuota="%f" taxis="%d" simMeanSpeed="%f" simFcdMeanSpeed="%f" ' %(quota,taxiSum, vSim,vSimFCD,))
            outputFile.write('detectedEdges="%d" notDetectedEdges="%d" ' %(detectedEdges,edgesNo-detectedEdges))
            outputFile.write('absSpeedDiff="%f" relSpeedDiff="%f" relDetectedEdges="%f" relNotDetectedEdges="%f"/>\n' %(vAbsDiff,vRelDiff,relDetectedEdges,100-relDetectedEdges))
    outputFile.write("\t</periods>\n</paramEffects>") 
    outputFile.close()