Mercurial Hosting > 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: |