Mercurial > hg > nsaunier > traffic-intelligence
comparison python/prediction.py @ 613:306db0f3c7a2
move 4 functions from trajLearning file
| author | MohamedGomaa |
|---|---|
| date | Thu, 04 Dec 2014 19:07:55 -0500 |
| parents | 233867934190 |
| children | dc2d0a0d7fe1 |
comparison
equal
deleted
inserted
replaced
| 612:6ee8765bb8db | 613:306db0f3c7a2 |
|---|---|
| 3 | 3 |
| 4 import moving | 4 import moving |
| 5 import math | 5 import math |
| 6 import random | 6 import random |
| 7 import numpy as np | 7 import numpy as np |
| 8 import trajLearning | 8 from utils import LCSS |
| 9 | 9 |
| 10 class PredictedTrajectory: | 10 class PredictedTrajectory: |
| 11 '''Class for predicted trajectories with lazy evaluation | 11 '''Class for predicted trajectories with lazy evaluation |
| 12 if the predicted position has not been already computed, compute it | 12 if the predicted position has not been already computed, compute it |
| 13 | 13 |
| 165 title('instant {0}'.format(currentInstant)) | 165 title('instant {0}'.format(currentInstant)) |
| 166 axis('equal') | 166 axis('equal') |
| 167 savefig('predicted-trajectories-t-{0}.png'.format(currentInstant)) | 167 savefig('predicted-trajectories-t-{0}.png'.format(currentInstant)) |
| 168 close() | 168 close() |
| 169 | 169 |
| 170 def calculateProbability(nMatching,similarity,objects): | |
| 171 sumFrequencies=sum([nMatching[p] for p in similarity.keys()]) | |
| 172 prototypeProbability={} | |
| 173 for i in similarity.keys(): | |
| 174 prototypeProbability[i]= similarity[i] * float(nMatching[i])/sumFrequencies | |
| 175 sumProbabilities= sum([prototypeProbability[p] for p in prototypeProbability.keys()]) | |
| 176 probabilities={} | |
| 177 for i in prototypeProbability.keys(): | |
| 178 probabilities[objects[i]]= float(prototypeProbability[i])/sumProbabilities | |
| 179 return probabilities | |
| 180 | |
| 181 def findPrototypes(prototypes,nMatching,objects,route,partialObjPositions,noiseEntryNums,noiseExitNums,minSimilarity=0.1,mostMatched=None,spatialThreshold=1.0, delta=180): | |
| 182 ''' behaviour prediction first step''' | |
| 183 if route[0] not in noiseEntryNums: | |
| 184 prototypesRoutes= [ x for x in sorted(prototypes.keys()) if route[0]==x[0]] | |
| 185 elif route[1] not in noiseExitNums: | |
| 186 prototypesRoutes=[ x for x in sorted(prototypes.keys()) if route[1]==x[1]] | |
| 187 else: | |
| 188 prototypesRoutes=[x for x in sorted(prototypes.keys())] | |
| 189 lcss = LCSS(similarityFunc=lambda x,y: (distanceForLCSS(x,y) <= spatialThreshold),delta=delta) | |
| 190 similarity={} | |
| 191 for y in prototypesRoutes: | |
| 192 if y in prototypes.keys(): | |
| 193 prototypesIDs=prototypes[y] | |
| 194 for x in prototypesIDs: | |
| 195 s=lcss.computeNormalized(partialObjPositions, objects[x].positions) | |
| 196 if s >= minSimilarity: | |
| 197 similarity[x]=s | |
| 198 | |
| 199 if mostMatched==None: | |
| 200 probabilities= calculateProbability(nMatching,similarity,objects) | |
| 201 return probabilities | |
| 202 else: | |
| 203 mostMatchedValues=sorted(similarity.values(),reverse=True)[:mostMatched] | |
| 204 keys=[k for k in similarity.keys() if similarity[k] in mostMatchedValues] | |
| 205 newSimilarity={} | |
| 206 for i in keys: | |
| 207 newSimilarity[i]=similarity[i] | |
| 208 probabilities= calculateProbability(nMatching,newSimilarity,objects) | |
| 209 return probabilities | |
| 210 | |
| 211 def findPrototypesSpeed(prototypes,secondStepPrototypes,nMatching,objects,route,partialObjPositions,noiseEntryNums,noiseExitNums,minSimilarity=0.1,mostMatched=None,useDestination=True,spatialThreshold=1.0, delta=180): | |
| 212 if useDestination: | |
| 213 prototypesRoutes=[route] | |
| 214 else: | |
| 215 if route[0] not in noiseEntryNums: | |
| 216 prototypesRoutes= [ x for x in sorted(prototypes.keys()) if route[0]==x[0]] | |
| 217 elif route[1] not in noiseExitNums: | |
| 218 prototypesRoutes=[ x for x in sorted(prototypes.keys()) if route[1]==x[1]] | |
| 219 else: | |
| 220 prototypesRoutes=[x for x in sorted(prototypes.keys())] | |
| 221 lcss = LCSS(similarityFunc=lambda x,y: (distanceForLCSS(x,y) <= spatialThreshold),delta=delta) | |
| 222 similarity={} | |
| 223 for y in prototypesRoutes: | |
| 224 if y in prototypes.keys(): | |
| 225 prototypesIDs=prototypes[y] | |
| 226 for x in prototypesIDs: | |
| 227 s=lcss.computeNormalized(partialObjPositions, objects[x].positions) | |
| 228 if s >= minSimilarity: | |
| 229 similarity[x]=s | |
| 230 | |
| 231 newSimilarity={} | |
| 232 for i in similarity.keys(): | |
| 233 if i in secondStepPrototypes.keys(): | |
| 234 for j in secondStepPrototypes[i]: | |
| 235 newSimilarity[j]=similarity[i] | |
| 236 probabilities= calculateProbability(nMatching,newSimilarity,objects) | |
| 237 return probabilities | |
| 238 | |
| 170 def getPrototypeTrajectory(obj,route,currentInstant,prototypes,secondStepPrototypes,nMatching,objects,noiseEntryNums,noiseExitNums,minSimilarity=0.1,mostMatched=None,useDestination=True,useSpeedPrototype=True): | 239 def getPrototypeTrajectory(obj,route,currentInstant,prototypes,secondStepPrototypes,nMatching,objects,noiseEntryNums,noiseExitNums,minSimilarity=0.1,mostMatched=None,useDestination=True,useSpeedPrototype=True): |
| 171 partialInterval=moving.Interval(obj.getFirstInstant(),currentInstant) | 240 partialInterval=moving.Interval(obj.getFirstInstant(),currentInstant) |
| 172 partialObjPositions= obj.getObjectInTimeInterval(partialInterval).positions | 241 partialObjPositions= obj.getObjectInTimeInterval(partialInterval).positions |
| 173 if useSpeedPrototype: | 242 if useSpeedPrototype: |
| 174 prototypeTrajectories=trajLearning.findPrototypesSpeed(prototypes,secondStepPrototypes,nMatching,objects,route,partialObjPositions,noiseEntryNums,noiseExitNums,minSimilarity,mostMatched,useDestination) | 243 prototypeTrajectories=findPrototypesSpeed(prototypes,secondStepPrototypes,nMatching,objects,route,partialObjPositions,noiseEntryNums,noiseExitNums,minSimilarity,mostMatched,useDestination) |
| 175 else: | 244 else: |
| 176 prototypeTrajectories=trajLearning.findPrototypes(prototypes,nMatching,objects,route,partialObjPositions,noiseEntryNums,noiseExitNums,minSimilarity,mostMatched) | 245 prototypeTrajectories=findPrototypes(prototypes,nMatching,objects,route,partialObjPositions,noiseEntryNums,noiseExitNums,minSimilarity,mostMatched) |
| 177 return prototypeTrajectories | 246 return prototypeTrajectories |
| 178 | 247 |
| 179 def computeCrossingsCollisionsAtInstant(predictionParams,currentInstant, obj1, obj2, collisionDistanceThreshold, timeHorizon, computeCZ = False, debug = False,usePrototypes=True,route1= (-1,-1),route2=(-1,-1),prototypes={},secondStepPrototypes={},nMatching={},objects=[],noiseEntryNums=[],noiseExitNums=[],minSimilarity=0.1,mostMatched=None,useDestination=True,useSpeedPrototype=True): | 248 def computeCrossingsCollisionsAtInstant(predictionParams,currentInstant, obj1, obj2, collisionDistanceThreshold, timeHorizon, computeCZ = False, debug = False,usePrototypes=True,route1= (-1,-1),route2=(-1,-1),prototypes={},secondStepPrototypes={},nMatching={},objects=[],noiseEntryNums=[],noiseExitNums=[],minSimilarity=0.1,mostMatched=None,useDestination=True,useSpeedPrototype=True): |
| 180 '''returns the lists of collision points and crossing zones''' | 249 '''returns the lists of collision points and crossing zones''' |
| 181 if usePrototypes: | 250 if usePrototypes: |
