Mercurial > hg > nsaunier > traffic-intelligence
diff python/prediction.py @ 708:a37c565f4b68
merged dev
| author | Nicolas Saunier <nicolas.saunier@polymtl.ca> |
|---|---|
| date | Wed, 22 Jul 2015 14:17:44 -0400 |
| parents | 4cc56ff82c3c |
| children | 8b74a5176549 |
line wrap: on
line diff
--- a/python/prediction.py Wed Jul 22 14:17:19 2015 -0400 +++ b/python/prediction.py Wed Jul 22 14:17:44 2015 -0400 @@ -6,6 +6,7 @@ import math, random import numpy as np +from multiprocessing import Pool class PredictedTrajectory(object): @@ -137,8 +138,7 @@ @staticmethod def computeExpectedIndicator(points): - from numpy import sum - return sum([p.indicator*p.probability for p in points])/sum([p.probability for p in points]) + return np.sum([p.indicator*p.probability for p in points])/sum([p.probability for p in points]) def computeCollisionTime(predictedTrajectory1, predictedTrajectory2, collisionDistanceThreshold, timeHorizon): '''Computes the first instant @@ -161,11 +161,11 @@ from matplotlib.pyplot import figure, axis, title, close, savefig figure() for et in predictedTrajectories1: - et.predictPosition(timeHorizon) + et.predictPosition(int(np.round(timeHorizon))) et.plot('rx') for et in predictedTrajectories2: - et.predictPosition(timeHorizon) + et.predictPosition(int(np.round(timeHorizon))) et.plot('bx') obj1.plot('r') obj2.plot('b') @@ -321,8 +321,8 @@ if nProcesses == 1: if usePrototypes: firstInstant= next( (x for x in xrange(commonTimeInterval.first,commonTimeInterval.last) if x-obj1.getFirstInstant() >= acceptPartialLength and x-obj2.getFirstInstant() >= acceptPartialLength), commonTimeInterval.last) - commonTimeIntervalList1= list(xrange(firstInstant,commonTimeInterval.last-1)) # do not look at the 1 last position/velocities, often with errors - commonTimeIntervalList2= list(xrange(firstInstant,commonTimeInterval.last-1,step)) # do not look at the 1 last position/velocities, often with errors + commonTimeIntervalList1= range(firstInstant,commonTimeInterval.last-1) # do not look at the 1 last position/velocities, often with errors + commonTimeIntervalList2= range(firstInstant,commonTimeInterval.last-1,step) # do not look at the 1 last position/velocities, often with errors for i in commonTimeIntervalList2: i, cp, cz = self.computeCrossingsCollisionsAtInstant(i, obj1, obj2, collisionDistanceThreshold, timeHorizon, computeCZ, debug,usePrototypes,route1,route2,prototypes,secondStepPrototypes,nMatching,objects,noiseEntryNums,noiseExitNums,minSimilarity,mostMatched,useDestination,useSpeedPrototype) if len(cp) != 0: @@ -345,7 +345,6 @@ if len(cz) != 0: crossingZones[i] = cz else: - from multiprocessing import Pool pool = Pool(processes = nProcesses) jobs = [pool.apply_async(computeCrossingsCollisionsAtInstant, args = (self, i, obj1, obj2, collisionDistanceThreshold, timeHorizon, computeCZ, debug,usePrototypes,route1,route2,prototypes,secondStepPrototypes,nMatching,objects,noiseEntryNums,noiseExitNums,minSimilarity,mostMatched,useDestination,useSpeedPrototype)) for i in list(commonTimeInterval)[:-1]] #results = [j.get() for j in jobs] @@ -493,7 +492,8 @@ class CVDirectPredictionParameters(PredictionParameters): '''Prediction parameters of prediction at constant velocity - using direct computation of the intersecting point''' + using direct computation of the intersecting point + Warning: the computed time to collision may be higher than timeHorizon (not used)''' def __init__(self): PredictionParameters.__init__(self, 'constant velocity (direct computation)', None) @@ -533,19 +533,6 @@ crossingZones = [SafetyPoint(intersection, 1., timeInterval1.distance(timeInterval2))] else: collisionPoints = [SafetyPoint(intersection, 1., collisionTimeInterval.center())] - # elif computeCZ and (dot1 > 0 or dot2 > 0): - # if dot1 > 0: - # firstUser = obj2 # first through crossingzone - # secondUser = obj1 # second through crossingzone - # elif dot2 > 0: - # firstUser = obj1 - # secondUser = obj2 - # p2 = secondUser.getPositionAtInstant(currentInstant) - # v2 = secondUser.getVelocityAtInstant(currentInstant) - # indices, intersections = firstUser.getPositions().getLineIntersections(p2, p2+v2) - # if indices is not None: - # pass - # else: # one has to predict !!! if debug and intersection is not None: from matplotlib.pyplot import plot, figure, axis, title @@ -562,12 +549,13 @@ class CVExactPredictionParameters(PredictionParameters): '''Prediction parameters of prediction at constant velocity - using direct computation of the intersecting point (solving for the equation''' + using direct computation of the intersecting point (solving the equation) + Warning: the computed time to collision may be higher than timeHorizon (not used)''' def __init__(self): PredictionParameters.__init__(self, 'constant velocity (direct exact computation)', None) - def computeCrossingsCollisionsAtInstant(self, currentInstant, obj1, obj2, collisionDistanceThreshold, timeHorizon, computeCZ = False, debug = False): + def computeCrossingsCollisionsAtInstant(self, currentInstant, obj1, obj2, collisionDistanceThreshold, timeHorizon, computeCZ = False, debug = False, *kwargs): 'TODO add collision point coordinates, compute pPET' #collisionPoints = [] #crossingZones = [] @@ -581,9 +569,9 @@ if intersection is not None: ttc = moving.Point.timeToCollision(p1, p2, v1, v2, collisionDistanceThreshold) if ttc: - return [SafetyPoint(intersection, 1., ttc)], [] # (p1+v1.multiply(ttc)+p2+v2.multiply(ttc)).multiply(0.5) + return currentInstant, [SafetyPoint(intersection, 1., ttc)], [] # (p1+v1.multiply(ttc)+p2+v2.multiply(ttc)).multiply(0.5) else: - return [],[] + return currentInstant, [],[] #### # Other Methods
