Mercurial Hosting > traffic-intelligence
comparison trafficintelligence/traffic_engineering.py @ 1208:a07e455baaa6
merged
author | Nicolas Saunier <nicolas.saunier@polymtl.ca> |
---|---|
date | Wed, 26 Apr 2023 18:33:46 -0400 |
parents | 770306fef827 |
children | 3bfdb2ffd29d |
comparison
equal
deleted
inserted
replaced
1207:36f0d18e1fad | 1208:a07e455baaa6 |
---|---|
1 #! /usr/bin/env python | 1 #! /usr/bin/env python |
2 ''' Traffic Engineering Tools and Examples''' | 2 ''' Traffic Engineering Tools and Examples''' |
3 | 3 |
4 from math import ceil | 4 from math import ceil |
5 from numpy import e, log, arange | 5 from numpy import e, log, arange |
6 from scipy import stats | |
6 | 7 |
7 from matplotlib.pyplot import figure,plot,xlabel,ylabel, xlim, ylim | 8 from matplotlib.pyplot import figure,plot,xlabel,ylabel, xlim, ylim |
8 | 9 |
9 from trafficintelligence import prediction | 10 from trafficintelligence import prediction |
10 | 11 |
215 def v(self, k): | 216 def v(self, k): |
216 if k<self.kc: | 217 if k<self.kc: |
217 return self.vf | 218 return self.vf |
218 else: | 219 else: |
219 return self.vf*self.kc*(self.kj/k-1)/(self.kj-self.kc) | 220 return self.vf*self.kc*(self.kj/k-1)/(self.kj-self.kc) |
220 | 221 |
222 def generateDensities(n, maxDensity): | |
223 return stats.uniform.rvs(size=n)*maxDensity | |
224 | |
225 def generateSpeedVolumes(fd, n, maxDensity, maxHGVProportion = 0, etrucks = 2.5): | |
226 densities = generateDensities(n, maxDensity) | |
227 speeds = [fd.v(k) for k in densities] | |
228 volumes = [fd.q(k) for k in densities] | |
229 if maxHGVProportion > 0: | |
230 hgvProportions = stats.uniform.rvs(size=n)*maxHGVProportion # en pourcent | |
231 volumes = [v/(1+(etrucks-1)*p/100) for v,p in zip(volumes, hgvProportions)] | |
232 else: | |
233 hgvProportions = None | |
234 return speeds, volumes, hgvProportions | |
235 | |
236 def highwayLOS(k): | |
237 'returns the highway level of service for density k in veh/km' | |
238 if k>=28: return 'F' | |
239 elif k>=22: return 'E' | |
240 elif k>=16: return 'D' | |
241 elif k>=11: return 'C' | |
242 elif k>=7: return 'B' | |
243 else: return 'A' | |
244 | |
221 ######################### | 245 ######################### |
222 # intersection | 246 # intersection |
223 ######################### | 247 ######################### |
224 | 248 |
225 class FourWayIntersection(object): | 249 class FourWayIntersection(object): |