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