comparison python/prediction.py @ 998:933670761a57

updated code to python 3 (tests pass and scripts run, but non-executed parts of code are probably still not correct)
author Nicolas Saunier <nicolas.saunier@polymtl.ca>
date Sun, 27 May 2018 23:22:48 -0400
parents f026ce2af637
children
comparison
equal deleted inserted replaced
997:4f3387a242a1 998:933670761a57
22 self.predictedSpeedOrientations = {} 22 self.predictedSpeedOrientations = {}
23 #self.collisionPoints = {} 23 #self.collisionPoints = {}
24 #self.crossingZones = {} 24 #self.crossingZones = {}
25 25
26 def predictPosition(self, nTimeSteps): 26 def predictPosition(self, nTimeSteps):
27 if nTimeSteps > 0 and not nTimeSteps in self.predictedPositions.keys(): 27 if nTimeSteps > 0 and not nTimeSteps in self.predictedPositions:
28 self.predictPosition(nTimeSteps-1) 28 self.predictPosition(nTimeSteps-1)
29 self.predictedPositions[nTimeSteps], self.predictedSpeedOrientations[nTimeSteps] = moving.predictPosition(self.predictedPositions[nTimeSteps-1], self.predictedSpeedOrientations[nTimeSteps-1], self.getControl(), self.maxSpeed) 29 self.predictedPositions[nTimeSteps], self.predictedSpeedOrientations[nTimeSteps] = moving.predictPosition(self.predictedPositions[nTimeSteps-1], self.predictedSpeedOrientations[nTimeSteps-1], self.getControl(), self.maxSpeed)
30 return self.predictedPositions[nTimeSteps] 30 return self.predictedPositions[nTimeSteps]
31 31
32 def getPredictedTrajectory(self): 32 def getPredictedTrajectory(self):
33 return moving.Trajectory.fromPointList(self.predictedPositions.values()) 33 return moving.Trajectory.fromPointList(list(self.predictedPositions.values()))
34 34
35 def getPredictedSpeeds(self): 35 def getPredictedSpeeds(self):
36 return [so.norm for so in self.predictedSpeedOrientations.values()] 36 return [so.norm for so in self.predictedSpeedOrientations.values()]
37 37
38 def plot(self, options = '', withOrigin = False, timeStep = 1, **kwargs): 38 def plot(self, options = '', withOrigin = False, timeStep = 1, **kwargs):
81 self.initialSpeed = initialVelocity.norm2() 81 self.initialSpeed = initialVelocity.norm2()
82 if not constantSpeed: 82 if not constantSpeed:
83 self.ratio = self.initialSpeed/prototype.getVelocityAt(self.closestPointIdx).norm2() 83 self.ratio = self.initialSpeed/prototype.getVelocityAt(self.closestPointIdx).norm2()
84 84
85 def predictPosition(self, nTimeSteps): 85 def predictPosition(self, nTimeSteps):
86 if nTimeSteps > 0 and not nTimeSteps in self.predictedPositions.keys(): 86 if nTimeSteps > 0 and not nTimeSteps in self.predictedPositions:
87 deltaPosition = copy(self.deltaPosition) 87 deltaPosition = copy(self.deltaPosition)
88 if self.constantSpeed: 88 if self.constantSpeed:
89 traj = self.prototype.getPositions() 89 traj = self.prototype.getPositions()
90 trajLength = traj.length() 90 trajLength = traj.length()
91 traveledDistance = nTimeSteps*self.initialSpeed + traj.getCumulativeDistance(self.closestPointIdx) 91 traveledDistance = nTimeSteps*self.initialSpeed + traj.getCumulativeDistance(self.closestPointIdx)
170 if printFigure: 170 if printFigure:
171 clf() 171 clf()
172 else: 172 else:
173 figure() 173 figure()
174 for et in predictedTrajectories1: 174 for et in predictedTrajectories1:
175 for t in xrange(int(np.round(timeHorizon))): 175 for t in range(int(np.round(timeHorizon))):
176 et.predictPosition(t) 176 et.predictPosition(t)
177 et.plot('rx') 177 et.plot('rx')
178 for et in predictedTrajectories2: 178 for et in predictedTrajectories2:
179 for t in xrange(int(np.round(timeHorizon))): 179 for t in range(int(np.round(timeHorizon))):
180 et.predictPosition(t) 180 et.predictPosition(t)
181 et.plot('bx') 181 et.plot('bx')
182 obj1.plot('r', withOrigin = True) 182 obj1.plot('r', withOrigin = True)
183 obj2.plot('b', withOrigin = True) 183 obj2.plot('b', withOrigin = True)
184 title('instant {0}'.format(currentInstant)) 184 title('instant {0}'.format(currentInstant))
185 axis('equal') 185 axis('equal')
186 if printFigure: 186 if printFigure:
187 savefig('predicted-trajectories-t-{0}.png'.format(currentInstant)) 187 savefig('predicted-trajectories-t-{0}.png'.format(currentInstant))
188 188
189 def calculateProbability(nMatching,similarity,objects): 189 def calculateProbability(nMatching,similarity,objects):
190 sumFrequencies=sum([nMatching[p] for p in similarity.keys()]) 190 sumFrequencies=sum([nMatching[p] for p in similarity])
191 prototypeProbability={} 191 prototypeProbability={}
192 for i in similarity.keys(): 192 for i in similarity:
193 prototypeProbability[i]= similarity[i] * float(nMatching[i])/sumFrequencies 193 prototypeProbability[i]= similarity[i] * float(nMatching[i])/sumFrequencies
194 sumProbabilities= sum([prototypeProbability[p] for p in prototypeProbability.keys()]) 194 sumProbabilities= sum([prototypeProbability[p] for p in prototypeProbability])
195 probabilities={} 195 probabilities={}
196 for i in prototypeProbability.keys(): 196 for i in prototypeProbability:
197 probabilities[objects[i]]= float(prototypeProbability[i])/sumProbabilities 197 probabilities[objects[i]]= float(prototypeProbability[i])/sumProbabilities
198 return probabilities 198 return probabilities
199 199
200 def findPrototypes(prototypes,nMatching,objects,route,partialObjPositions,noiseEntryNums,noiseExitNums,minSimilarity=0.1,mostMatched=None,spatialThreshold=1.0, delta=180): 200 def findPrototypes(prototypes,nMatching,objects,route,partialObjPositions,noiseEntryNums,noiseExitNums,minSimilarity=0.1,mostMatched=None,spatialThreshold=1.0, delta=180):
201 ''' behaviour prediction first step''' 201 ''' behaviour prediction first step'''
206 else: 206 else:
207 prototypesRoutes=[x for x in sorted(prototypes.keys())] 207 prototypesRoutes=[x for x in sorted(prototypes.keys())]
208 lcss = LCSS(similarityFunc=lambda x,y: (distanceForLCSS(x,y) <= spatialThreshold),delta=delta) 208 lcss = LCSS(similarityFunc=lambda x,y: (distanceForLCSS(x,y) <= spatialThreshold),delta=delta)
209 similarity={} 209 similarity={}
210 for y in prototypesRoutes: 210 for y in prototypesRoutes:
211 if y in prototypes.keys(): 211 if y in prototypes:
212 prototypesIDs=prototypes[y] 212 prototypesIDs=prototypes[y]
213 for x in prototypesIDs: 213 for x in prototypesIDs:
214 s=lcss.computeNormalized(partialObjPositions, objects[x].positions) 214 s=lcss.computeNormalized(partialObjPositions, objects[x].positions)
215 if s >= minSimilarity: 215 if s >= minSimilarity:
216 similarity[x]=s 216 similarity[x]=s
218 if mostMatched==None: 218 if mostMatched==None:
219 probabilities= calculateProbability(nMatching,similarity,objects) 219 probabilities= calculateProbability(nMatching,similarity,objects)
220 return probabilities 220 return probabilities
221 else: 221 else:
222 mostMatchedValues=sorted(similarity.values(),reverse=True)[:mostMatched] 222 mostMatchedValues=sorted(similarity.values(),reverse=True)[:mostMatched]
223 keys=[k for k in similarity.keys() if similarity[k] in mostMatchedValues] 223 keys=[k for k in similarity if similarity[k] in mostMatchedValues]
224 newSimilarity={} 224 newSimilarity={}
225 for i in keys: 225 for i in keys:
226 newSimilarity[i]=similarity[i] 226 newSimilarity[i]=similarity[i]
227 probabilities= calculateProbability(nMatching,newSimilarity,objects) 227 probabilities= calculateProbability(nMatching,newSimilarity,objects)
228 return probabilities 228 return probabilities
238 else: 238 else:
239 prototypesRoutes=[x for x in sorted(prototypes.keys())] 239 prototypesRoutes=[x for x in sorted(prototypes.keys())]
240 lcss = LCSS(similarityFunc=lambda x,y: (distanceForLCSS(x,y) <= spatialThreshold),delta=delta) 240 lcss = LCSS(similarityFunc=lambda x,y: (distanceForLCSS(x,y) <= spatialThreshold),delta=delta)
241 similarity={} 241 similarity={}
242 for y in prototypesRoutes: 242 for y in prototypesRoutes:
243 if y in prototypes.keys(): 243 if y in prototypes:
244 prototypesIDs=prototypes[y] 244 prototypesIDs=prototypes[y]
245 for x in prototypesIDs: 245 for x in prototypesIDs:
246 s=lcss.computeNormalized(partialObjPositions, objects[x].positions) 246 s=lcss.computeNormalized(partialObjPositions, objects[x].positions)
247 if s >= minSimilarity: 247 if s >= minSimilarity:
248 similarity[x]=s 248 similarity[x]=s
249 249
250 newSimilarity={} 250 newSimilarity={}
251 for i in similarity.keys(): 251 for i in similarity:
252 if i in secondStepPrototypes.keys(): 252 if i in secondStepPrototypes:
253 for j in secondStepPrototypes[i]: 253 for j in secondStepPrototypes[i]:
254 newSimilarity[j]=similarity[i] 254 newSimilarity[j]=similarity[i]
255 probabilities= calculateProbability(nMatching,newSimilarity,objects) 255 probabilities= calculateProbability(nMatching,newSimilarity,objects)
256 return probabilities 256 return probabilities
257 257
315 collisionPoints = {} 315 collisionPoints = {}
316 if computeCZ: 316 if computeCZ:
317 crossingZones = {} 317 crossingZones = {}
318 else: 318 else:
319 crossingZones = None 319 crossingZones = None
320 if timeInterval: 320 if timeInterval is not None:
321 commonTimeInterval = timeInterval 321 commonTimeInterval = timeInterval
322 else: 322 else:
323 commonTimeInterval = obj1.commonTimeInterval(obj2) 323 commonTimeInterval = obj1.commonTimeInterval(obj2)
324 #if nProcesses == 1: 324 #if nProcesses == 1:
325 for i in list(commonTimeInterval)[:-1]: # do not look at the 1 last position/velocities, often with errors 325 for i in list(commonTimeInterval)[:-1]: # do not look at the 1 last position/velocities, often with errors
332 332
333 def computeCollisionProbability(self, obj1, obj2, collisionDistanceThreshold, timeHorizon, debug = False, timeInterval = None): 333 def computeCollisionProbability(self, obj1, obj2, collisionDistanceThreshold, timeHorizon, debug = False, timeInterval = None):
334 '''Computes only collision probabilities 334 '''Computes only collision probabilities
335 Returns for each instant the collision probability and number of samples drawn''' 335 Returns for each instant the collision probability and number of samples drawn'''
336 collisionProbabilities = {} 336 collisionProbabilities = {}
337 if timeInterval: 337 if timeInterval is not None:
338 commonTimeInterval = timeInterval 338 commonTimeInterval = timeInterval
339 else: 339 else:
340 commonTimeInterval = obj1.commonTimeInterval(obj2) 340 commonTimeInterval = obj1.commonTimeInterval(obj2)
341 for i in list(commonTimeInterval)[:-1]: 341 for i in list(commonTimeInterval)[:-1]:
342 nCollisions = 0 342 nCollisions = 0
391 velocities = [f.getVelocityAtInstant(instant) for f in features] 391 velocities = [f.getVelocityAtInstant(instant) for f in features]
392 else: 392 else:
393 positions = [obj.getPositionAtInstant(instant)] 393 positions = [obj.getPositionAtInstant(instant)]
394 velocities = [obj.getVelocityAtInstant(instant)] 394 velocities = [obj.getVelocityAtInstant(instant)]
395 probability = 1./float(len(positions)*self.nPredictedTrajectories) 395 probability = 1./float(len(positions)*self.nPredictedTrajectories)
396 for i in xrange(self.nPredictedTrajectories): 396 for i in range(self.nPredictedTrajectories):
397 for initialPosition,initialVelocity in zip(positions, velocities): 397 for initialPosition,initialVelocity in zip(positions, velocities):
398 predictedTrajectories.append(PredictedTrajectoryRandomControl(initialPosition, 398 predictedTrajectories.append(PredictedTrajectoryRandomControl(initialPosition,
399 initialVelocity, 399 initialVelocity,
400 self.accelerationDistribution, 400 self.accelerationDistribution,
401 self.steeringDistribution, 401 self.steeringDistribution,
448 velocities = [f.getVelocityAtInstant(instant) for f in features] 448 velocities = [f.getVelocityAtInstant(instant) for f in features]
449 else: 449 else:
450 positions = [obj.getPositionAtInstant(instant)] 450 positions = [obj.getPositionAtInstant(instant)]
451 velocities = [obj.getVelocityAtInstant(instant)] 451 velocities = [obj.getVelocityAtInstant(instant)]
452 probability = 1./float(self.nPredictedTrajectories) 452 probability = 1./float(self.nPredictedTrajectories)
453 for i in xrange(self.nPredictedTrajectories): 453 for i in range(self.nPredictedTrajectories):
454 for initialPosition,initialVelocity in zip(positions, velocities): 454 for initialPosition,initialVelocity in zip(positions, velocities):
455 predictedTrajectories.append(PredictedTrajectoryConstant(initialPosition, 455 predictedTrajectories.append(PredictedTrajectoryConstant(initialPosition,
456 initialVelocity, 456 initialVelocity,
457 moving.NormAngle(self.accelerationDistribution(), 457 moving.NormAngle(self.accelerationDistribution(),
458 self.steeringDistribution()), 458 self.steeringDistribution()),