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
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()