changeset 1206:770306fef827

moving functions for exams in traffic engineering
author Nicolas Saunier <nicolas.saunier@polymtl.ca>
date Thu, 20 Apr 2023 11:46:42 -0400
parents 3905b393ade0
children a07e455baaa6
files trafficintelligence/traffic_engineering.py
diffstat 1 files changed, 25 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/trafficintelligence/traffic_engineering.py	Wed Mar 22 23:29:09 2023 -0400
+++ b/trafficintelligence/traffic_engineering.py	Thu Apr 20 11:46:42 2023 -0400
@@ -3,6 +3,7 @@
 
 from math import ceil
 from numpy import e, log, arange
+from scipy import stats
 
 from matplotlib.pyplot import figure,plot,xlabel,ylabel, xlim, ylim
 
@@ -217,7 +218,30 @@
             return self.vf
         else:
             return self.vf*self.kc*(self.kj/k-1)/(self.kj-self.kc)
-        
+
+def generateDensities(n, maxDensity):
+    return stats.uniform.rvs(size=n)*maxDensity
+
+def generateSpeedVolumes(fd, n, maxDensity, maxHGVProportion = 0, etrucks = 2.5):
+    densities = generateDensities(n, maxDensity)
+    speeds = [fd.v(k) for k in densities]
+    volumes = [fd.q(k) for k in densities]
+    if maxHGVProportion > 0:
+        hgvProportions = stats.uniform.rvs(size=n)*maxHGVProportion # en pourcent
+        volumes = [v/(1+(etrucks-1)*p/100) for v,p in zip(volumes, hgvProportions)]
+    else:
+        hgvProportions = None
+    return speeds, volumes, hgvProportions
+
+def highwayLOS(k):
+    'returns the highway level of service for density k in veh/km'
+    if k>=28: return 'F'
+    elif k>=22: return 'E'
+    elif k>=16: return 'D'
+    elif k>=11: return 'C'
+    elif k>=7: return 'B'
+    else: return 'A'
+
 #########################
 # intersection
 #########################