Mercurial Hosting > traffic-intelligence
changeset 559:806df5f61c03
adapted safety-analysis script to use multi-threading
author | Nicolas Saunier <nicolas.saunier@polymtl.ca> |
---|---|
date | Tue, 15 Jul 2014 01:25:33 -0400 |
parents | a80ef6931fd8 |
children | 5b534ad95bfb |
files | python/events.py python/prediction.py scripts/safety-analysis.py |
diffstat | 3 files changed, 17 insertions(+), 12 deletions(-) [+] |
line wrap: on
line diff
diff -r a80ef6931fd8 -r 806df5f61c03 python/events.py --- a/python/events.py Mon Jul 14 17:44:09 2014 -0400 +++ b/python/events.py Tue Jul 15 01:25:33 2014 -0400 @@ -111,7 +111,7 @@ self.addIndicator(indicators.SeverityIndicator(Interaction.indicatorNames[5], speedDifferentials)) # if we have features, compute other indicators - if self.roadUser1.features != None and self.roadUser2.features != None: + if len(self.roadUser1.features) != 0 and len(self.roadUser2.features) != 0: minDistance={} for instant in self.timeInterval: minDistance[instant] = moving.MovingObject.minDistance(self.roadUser1, self.roadUser2, instant) @@ -127,10 +127,7 @@ commonTimeInterval = timeInterval else: commonTimeInterval = self.timeInterval - self.collisionPoints, self.crossingZones = prediction.computeCrossingsCollisions(normalAdaptationPredictionParameters, obj1, obj2, collisionDistanceThreshold, timeHorizon, computeCZ, debug, nProcesses) - # for i in list(commonTimeInterval)[:-1]: # do not look at the 1 last position/velocities, often with errors - # i, self.collisionPoints[i], self.crossingZones[i] = predictionParameters.computeCrossingsCollisionsAtInstant(i, self.roadUser1, self.roadUser2, collisionDistanceThreshold, timeHorizon, computeCZ, debug) - # if len(self.collisionPoints[i]) > 0: + self.collisionPoints, self.crossingZones = prediction.computeCrossingsCollisions(predictionParameters, self.roadUser1, self.roadUser2, collisionDistanceThreshold, timeHorizon, computeCZ, debug, commonTimeInterval, nProcesses) for i, cp in self.collisionPoints.iteritems(): TTCs[i] = prediction.SafetyPoint.computeExpectedIndicator(cp) # add probability of collision, and probability of successful evasive action
diff -r a80ef6931fd8 -r 806df5f61c03 python/prediction.py --- a/python/prediction.py Mon Jul 14 17:44:09 2014 -0400 +++ b/python/prediction.py Tue Jul 15 01:25:33 2014 -0400 @@ -186,7 +186,11 @@ commonTimeInterval = obj1.commonTimeInterval(obj2) if nProcesses == 1: for i in list(commonTimeInterval)[:-1]: # do not look at the 1 last position/velocities, often with errors - i, collisionPoints[i], crossingZones[i] = computeCrossingsCollisionsAtInstant(predictionParams, i, obj1, obj2, collisionDistanceThreshold, timeHorizon, computeCZ, debug) + i, cp, cz = computeCrossingsCollisionsAtInstant(predictionParams, i, obj1, obj2, collisionDistanceThreshold, timeHorizon, computeCZ, debug) + if len(cp) != 0: + collisionPoints[i] = cp + if len(cz) != 0: + crossingZones[i] = cz else: from multiprocessing import Pool pool = Pool(processes = nProcesses) @@ -196,8 +200,10 @@ for j in jobs: i, cp, cz = j.get() #if len(cp) != 0 or len(cz) != 0: - collisionPoints[i] = cp - crossingZones[i] = cz + if len(cp) != 0: + collisionPoints[i] = cp + if len(cz) != 0: + crossingZones[i] = cz pool.close() return collisionPoints, crossingZones
diff -r a80ef6931fd8 -r 806df5f61c03 scripts/safety-analysis.py --- a/scripts/safety-analysis.py Mon Jul 14 17:44:09 2014 -0400 +++ b/scripts/safety-analysis.py Tue Jul 15 01:25:33 2014 -0400 @@ -14,7 +14,7 @@ parser.add_argument('--cfg', dest = 'configFilename', help = 'name of the configuration file', required = True) parser.add_argument('--prediction-method', dest = 'predictionMethod', help = 'prediction method (constant velocity (vector computation), constant velocity, normal adaptation, point set prediction)', choices = ['cvd', 'cv', 'na', 'ps']) parser.add_argument('--display-cp', dest = 'displayCollisionPoints', help = 'display collision points', action = 'store_true') -parser.add_argument('-n', dest = 'nProcesses', help = 'number of processes to run in parallel', type = int) +parser.add_argument('-n', dest = 'nProcesses', help = 'number of processes to run in parallel', type = int, default = 1) args = parser.parse_args() params = storage.ProcessParameters(args.configFilename) @@ -25,8 +25,10 @@ else: predictionMethod = params.predictionMethod -accelerationDistribution = lambda: random.triangular(-params.maxNormalAcceleration, params.maxNormalAcceleration, 0.) -steeringDistribution = lambda: random.triangular(-params.maxNormalSteering, params.maxNormalSteering, 0.) +def accelerationDistribution(): + return random.triangular(-params.maxNormalAcceleration, params.maxNormalAcceleration, 0.) +def steeringDistribution(): + return random.triangular(-params.maxNormalSteering, params.maxNormalSteering, 0.) if predictionMethod == 'cvd': # TODO add cve: constant velocity exact (Sohail's) predictionParameters = prediction.CVDirectPredictionParameters() @@ -58,7 +60,7 @@ interactions = events.createInteractions(objects) for inter in interactions: inter.computeIndicators() - inter.computeCrossingsCollisions(predictionParameters, params.collisionDistance, params.predictionTimeHorizon, params.crossingZones, params.nProcesses) + inter.computeCrossingsCollisions(predictionParameters, params.collisionDistance, params.predictionTimeHorizon, params.crossingZones, nProcesses = args.nProcesses) storage.saveIndicators(params.databaseFilename, interactions)