Mercurial Hosting > traffic-intelligence
changeset 1112:956a66096e91
removed code now available in simulation project, and issue with deprecated find function in matplotlib
author | Nicolas Saunier <nicolas.saunier@polymtl.ca> |
---|---|
date | Wed, 05 Jun 2019 13:12:10 -0400 |
parents | 345cd9cd62d8 |
children | 19581a4caf90 |
files | trafficintelligence/cvutils.py trafficintelligence/indicators.py trafficintelligence/moving.py trafficintelligence/pavement.py |
diffstat | 4 files changed, 4 insertions(+), 73 deletions(-) [+] |
line wrap: on
line diff
--- a/trafficintelligence/cvutils.py Mon May 06 17:13:13 2019 -0400 +++ b/trafficintelligence/cvutils.py Wed Jun 05 13:12:10 2019 -0400 @@ -7,9 +7,8 @@ from math import floor, log10, ceil from time import time -from numpy import dot, array, append, float32, loadtxt, savetxt, append, zeros, ones, identity, abs as npabs, logical_and, unravel_index, sum as npsum, isnan, mgrid, median, floor as npfloor, ceil as npceil +from numpy import dot, array, append, float32, loadtxt, savetxt, append, zeros, ones, identity, abs as npabs, logical_and, unravel_index, sum as npsum, isnan, mgrid, median, floor as npfloor, ceil as npceil, nonzero from numpy.linalg import inv -from matplotlib.mlab import find from matplotlib.pyplot import imread, imsave, imshow, figure, subplot try: @@ -428,7 +427,7 @@ distx = npabs(map1-x) disty = npabs(map2-y) indices = logical_and(distx<maxDistance, disty<maxDistance) - closeCoordinates = unravel_index(find(indices), distx.shape) # returns i,j, ie y,x + closeCoordinates = unravel_index(nonzero(indices), distx.shape) # returns i,j, ie y,x xWeights = 1-distx[indices] yWeights = 1-disty[indices] return dot(xWeights, closeCoordinates[1])/npsum(xWeights), dot(yWeights, closeCoordinates[0])/npsum(yWeights)
--- a/trafficintelligence/indicators.py Mon May 06 17:13:13 2019 -0400 +++ b/trafficintelligence/indicators.py Wed Jun 05 13:12:10 2019 -0400 @@ -2,7 +2,6 @@ '''Class for indicators, temporal indicators, and safety indicators''' from matplotlib.pyplot import plot, ylim -from matplotlib.pylab import find from numpy import array, arange, mean, floor, mean from scipy import percentile
--- a/trafficintelligence/moving.py Mon May 06 17:13:13 2019 -0400 +++ b/trafficintelligence/moving.py Wed Jun 05 13:12:10 2019 -0400 @@ -1293,71 +1293,6 @@ def updatePositions(self): inter, self.positions, self.velocities = MovingObject.aggregateTrajectories(self.features, self.getTimeInterval()) - def addNewellAttributes(self, desiredSpeed, tau, d, initialCumulatedHeadway, initialAlignmentIdx): - '''adds attributes necessary for Newell car following model - using curvilinear trajectories''' - # Newell model parameters - self.desiredSpeed = desiredSpeed - self.tau = tau - self.d = d - self.leader = None - # other attributes necessary for computation - self.initialCumulatedHeadway = initialCumulatedHeadway - self.initialAlignmentIdx = initialAlignmentIdx - self.timeAtS0 = None # time at which the vehicle's position is s=0 on the alignment - - def updateCurvilinearPositions(self, method, instant, timeStep, _nextAlignmentIdx = None, maxSpeed = None, acceleration = None): - '''Update curvilinear position of user at new instant''' - # TODO changer nextAlignmentIdx pour l'alignment en cours, reflechir pour des control devices - - if method == 'newell': - if self.curvilinearPositions is None: # vehicle without positions - if self.timeAtS0 is None: - if self.leader is None: - self.timeAtS0 = self.initialCumulatedHeadway - elif self.leader.curvilinearPositions is not None and self.leader.curvilinearPositions.getSCoordAt(-1) > self.d and len(self.leader.curvilinearPositions) >=2: - firstInstantAfterD = self.leader.getLastInstant() - while self.leader.existsAtInstant(firstInstantAfterD) and self.leader.getCurvilinearPositionAtInstant(firstInstantAfterD-1)[0] > self.d:# find first instant after d - firstInstantAfterD -= 1 # if not recorded position before self.d, we extrapolate linearly from first known position - leaderSpeed = self.leader.getCurvilinearVelocityAtInstant(firstInstantAfterD-1)[0] - self.timeAtS0 = self.tau + firstInstantAfterD*timeStep - (self.leader.getCurvilinearPositionAtInstant(firstInstantAfterD)[0]-self.d)*timeStep/leaderSpeed # second part is the time at which leader is at self.d - if self.timeAtS0 < self.initialCumulatedHeadway: #obj appears at instant initialCumulatedHeadway at x=0 with desiredSpeed - self.timeAtS0 = self.initialCumulatedHeadway - elif instant*timeStep > self.timeAtS0: - #firstInstant = int(ceil(self.timeAtS0/timeStep))# this first instant is instant by definition - leaderInstant = instant-self.tau/timeStep - if self.leader is None: - s = (timeStep*instant-self.timeAtS0)*self.desiredSpeed - self.timeInterval = TimeInterval(instant, instant) - self.curvilinearPositions = CurvilinearTrajectory([s], [0.], [self.initialAlignmentIdx]) - self.curvilinearVelocities = CurvilinearTrajectory() - elif self.leader.existsAtInstant(leaderInstant): - self.timeInterval = TimeInterval(instant, instant) - freeFlowCoord = (instant*timeStep - self.timeAtS0)*self.desiredSpeed - # constrainedCoord at instant = xn-1(t = instant*timeStep-self.tau)-self.d - constrainedCoord = self.leader.interpolateCurvilinearPositions(leaderInstant)[0]-self.d - self.curvilinearPositions = CurvilinearTrajectory([min(freeFlowCoord, constrainedCoord)], [0.], [self.initialAlignmentIdx]) - self.curvilinearVelocities = CurvilinearTrajectory() - else: - if _nextAlignmentIdx is not None: - laneChange = (self.curvilinearPositions.getLaneAt(-1), _nextAlignmentIdx) - nextAlignmentIdx = _nextAlignmentIdx - else: - laneChange = None - nextAlignmentIdx = self.curvilinearPositions.getLaneAt(-1) - s1 = self.curvilinearPositions.getSCoordAt(-1) - freeFlowCoord = s1 + self.desiredSpeed*timeStep - if self.leader is None: - if self.getLastInstant() < instant: - s2 = freeFlowCoord - self.curvilinearPositions.addPositionSYL(freeFlowCoord, 0., nextAlignmentIdx) - else: - constrainedCoord = self.leader.interpolateCurvilinearPositions(instant-self.tau/timeStep)[0]-self.d - s2 = min(freeFlowCoord, constrainedCoord) - self.curvilinearPositions.addPositionSYL(s2, 0., nextAlignmentIdx) - self.setLastInstant(instant) - self.curvilinearVelocities.addPositionSYL(s2-s1, 0., laneChange) - @staticmethod def concatenate(obj1, obj2, num = None, newFeatureNum = None, computePositions = False): '''Concatenates two objects, whether overlapping temporally or not
--- a/trafficintelligence/pavement.py Mon May 06 17:13:13 2019 -0400 +++ b/trafficintelligence/pavement.py Wed Jun 05 13:12:10 2019 -0400 @@ -143,13 +143,12 @@ weatherDataType is to indicate Environnement Canada data ('ec') or else MTQ minProportionMeasures is proportion of measures necessary to consider the indicators''' - from matplotlib.mlab import find nbre_jours_T_negatif,nbre_jours_gel_degel,pluie_tot,neige_tot,ecart_type_T = 0,0,0,0,0 compteur,nbre_jours_gel_consecutifs=0,0 tmoys = [] seuils_T = [20,15,10,5] deltas_T = [0,0,0,0] - startIndex = find(data['date'] == startDate) + startIndex = np.nonzero(data['date'] == startDate) nDays = int((endDate - startDate).days)+1 if len(startIndex) > 0 and startIndex+nDays <= len(data): startIndex = startIndex[0] @@ -202,13 +201,12 @@ def mtqWeatherIndicators(data, startDate, endDate,tmax,tmin,tmoy): print("Deprecated, use weatherIndicators") - from matplotlib.mlab import find nbre_jours_T_negatif,nbre_jours_gel_degel,ecart_type_T = 0,0,0 compteur,nbre_jours_gel_consecutifs=0,0 tmoys = [] seuils_T = [20,15,10,5] deltas_T = [0,0,0,0] - startIndex = find(data['date'] == startDate) + startIndex = np.nonzero(data['date'] == startDate) nDays = (endDate - startDate).days+1 for i in range(startIndex, startIndex+nDays): if tmax[i] < 0: