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: