comparison trafficintelligence/traffic_engineering.py @ 1303:d828f3f76273

forgot update to triangular FD equations
author Nicolas Saunier <nicolas.saunier@polymtl.ca>
date Thu, 04 Sep 2025 15:56:37 -0400
parents c15b9fcdbcb1
children
comparison
equal deleted inserted replaced
1302:30711484d2f6 1303:d828f3f76273
259 return self.vc*log(self.kj/k) 259 return self.vc*log(self.kj/k)
260 260
261 class TriangularFD(FundamentalDiagram): 261 class TriangularFD(FundamentalDiagram):
262 def __init__(self, vf = None, kc = None, kj = None, qmax = None, w = None): 262 def __init__(self, vf = None, kc = None, kj = None, qmax = None, w = None):
263 FundamentalDiagram.__init__(self,'Triangular') 263 FundamentalDiagram.__init__(self,'Triangular')
264 if vf is not None and qmax is not None and kj is not None: 264 if vf is not None and kj is not None:
265 self.vf=vf 265 self.vf=vf
266 self.qmax = qmax
267 self.kj = kj 266 self.kj = kj
268 self.kc = qmax/vf 267 if qmax is not None:
269 self.w = qmax/(self.kc-kj) 268 self.qmax = qmax
269 self.kc = qmax/vf
270 self.w = qmax/(self.kc-kj)
271 elif kc is not None:
272 self.kc = kc
273 self.qmax = vf*kc
274 self.w = self.qmax/(self.kc-kj)
270 275
271 def v(self, k): 276 def v(self, k):
272 if k<self.kc: 277 if k<self.kc:
273 return self.vf 278 return self.vf
274 else: 279 else:
275 return self.vf*self.kc*(self.kj/k-1)/(self.kj-self.kc) 280 return self.qmax/(self.kj-self.kc)*(1-self.kj/k)
276 281
277 def generateDensities(n, maxDensity): 282 def generateDensities(n, maxDensity):
278 return stats.uniform.rvs(size=n)*maxDensity 283 return stats.uniform.rvs(size=n)*maxDensity
279 284
280 def generateSpeedVolumes(fd, n, maxDensity, maxHGVProportion = 0, etrucks = 2.5): 285 def generateSpeedVolumes(fd, n, maxDensity, maxHGVProportion = 0, etrucks = 2.5):