diff --git a/Car.py b/Car.py
index 99fca64..968e29c 100644
--- a/Car.py
+++ b/Car.py
@@ -36,7 +36,7 @@ class Car():
#print(f"{self.id} : {startEdge.getID()} -> {nextEdge.getID()} via {laneId}")
- def __init__(self,carID,route,startTime,parentMap,parentController,infoWidg):
+ def __init__(self,carID,route,startTime,dynSpeed,parentMap,parentController,infoWidg):
self.id=carID
self.map=parentMap
self.controller=parentController
@@ -48,6 +48,7 @@ class Car():
self.laneId=0
self.leader=None
self.startTime=float(startTime)
+ self.dynSpeed=(dynSpeed == '1') if isinstance(dynSpeed, str) else dynSpeed
self.cligno=[]
self.pos=[0,0]
@@ -303,7 +304,7 @@ class Car():
"""
if(leader is None):
- self.v = self.vmax
+ self.v = vmax
self.updateGraph(self.v, vmax, 0)
return
vleader=50#self.v
@@ -315,8 +316,8 @@ class Car():
if(self.leaderBefore):
if(vleader == 0):
return
- if(self.distToInter > (self.T * self.vmax) or ((self.distToInter / self.vmax) < (self.leaderDist / vleader) - 2 * self.T)):
- self.v=self.vmax
+ if(self.distToInter > (self.T * vmax) or ((self.distToInter / vmax) < (self.leaderDist / vleader) - 2 * self.T)):
+ self.v=vmax
else:
self.v = 0
self.updateGraph(self.v, vmax, 0)
@@ -458,8 +459,6 @@ class Car():
self.signals.addGraphPt.emit((0,self.controller.t,vmax))
self.signals.addGraphPt.emit((1,self.controller.t,vsec))
-
-
def update(self,dt):
if self.controller.t < self.startTime:
return
@@ -468,8 +467,12 @@ class Car():
print(f"{self.id} stalled where he souldn't have")
"""
self.leader=self.getLeader(100)
+
+ vmax = self.vmax
+ if self.dynSpeed:
+ vmax = max(min(self.vmax * self.controller.dynSpeedRat, self.vmax), 8)
- self.conduiteKrauss(self.vmax,self.leader,dt)
+ self.conduiteKrauss(vmax,self.leader,dt)
if self.v == 0:
self.timeStopped += dt
@@ -513,7 +516,7 @@ class Car():
self.signals.updateDisp.emit(("Leader", self.leader if self.leader is None else f"{self.leader.id} @ {self.leaderDist:.2f}m (inter : {self.leaderBefore})"))
def __copy__(self):
- copy = Car(self.id, self.rawRoute, self.startTime, self.map, self.controller, self.infoWidg)
+ copy = Car(self.id, self.rawRoute, self.startTime, self.dynSpeed, self.map, self.controller, self.infoWidg)
copy.route = self.route
copy.cligno = self.cligno
copy.pos = self.pos.copy()
diff --git a/CarController.py b/CarController.py
index 83e47bc..d6a4290 100644
--- a/CarController.py
+++ b/CarController.py
@@ -106,6 +106,9 @@ class CarController:
self.carsDestroyed = 0
self.speedPercentageTotal = 0
+ self.maxCars = 100 # TODO: get it from net? demand?
+ self.dynSpeedRat = 1
+
self.infoWidget = None
self.vroomEnable=True
@@ -132,15 +135,22 @@ class CarController:
for vehicle in sumolib.xml.parse(path,["vehicle","flow"]):
route=vehicle.route[0].edges.split()
if vehicle.name == "vehicle":
+ dynSpeed = '0'
+ if(vehicle.hasChild("param")):
+ for param in vehicle.getChild("param"):
+ key = param.getAttributeSecure("key")
+ if key == "dynamicSpeed":
+ dynSpeed = param.getAttributeSecure("value")
if(self.infoWidget is not None) :
wId=self.infoWidget.addItem(carInfo(self.infoWidget), vehicle.id)
- self.cars.append(Car(vehicle.id,route,vehicle.depart,self.map,self,self.infoWidget.widget(wId)))
+ self.cars.append(Car(vehicle.id,route,vehicle.depart,dynSpeed,self.map,self,self.infoWidget.widget(wId)))
else:
- self.cars.append(Car(vehicle.id,route,vehicle.depart,self.map,self,None))
+ self.cars.append(Car(vehicle.id,route,vehicle.depart,dynSpeed,self.map,self,None))
elif vehicle.name == "flow":
randomFlow = 0
burstInterval = 1
burstTime = 1
+ dynSpeed = '0'
if(vehicle.hasChild("param")):
for param in vehicle.getChild("param"):
key = param.getAttributeSecure("key")
@@ -150,7 +160,9 @@ class CarController:
burstInterval = param.getAttributeSecure("value")
elif key == "burstTime":
burstTime = param.getAttributeSecure("value")
- self.flows.append(Flow(vehicle.id, route, vehicle.begin, vehicle.vehsPerHour, randomFlow, burstInterval, burstTime, self.map, self))
+ elif key == "dynamicSpeed":
+ dynSpeed = param.getAttributeSecure("value")
+ self.flows.append(Flow(vehicle.id, route, vehicle.begin, vehicle.vehsPerHour, randomFlow, burstInterval, burstTime, dynSpeed, self.map, self))
def prepareRoute(self):
for car in self.cars:
@@ -174,6 +186,7 @@ class CarController:
if self.map.net is None or self.dt == 0:
return
self.t+=self.dt
+ self.dynSpeedRat = 1 - len(self.cars) / self.maxCars
for car in self.cars:
car.update(self.dt)
diff --git a/Flow.py b/Flow.py
index 944d5ef..9e4e238 100644
--- a/Flow.py
+++ b/Flow.py
@@ -4,14 +4,14 @@ import copy
from random import randint
class Flow:
- def __init__(self,ID,route,start,vph,randomVal, burstInterval, burstTime,parentMap,parentController):
+ def __init__(self,ID,route,start,vph,randomVal, burstInterval, burstTime, dynSpeed,parentMap,parentController):
self.route = route
self.id = ID
self.startTime = start
self.vph = float(vph)
self.randomVal = int(randomVal)
self.adjVPH = self.vph + randint(0,self.randomVal)
- self.carModel = Car("model",self.route,start,parentMap,parentController,None)
+ self.carModel = Car("model",self.route,start,dynSpeed,parentMap,parentController,None)
self.carsSpawned = 0
self.priority = 0
self.burstInterval = float(burstInterval)
diff --git a/rdpt_polytech_burst_2_dynSpeed.rou.xml b/rdpt_polytech_burst_2_dynSpeed.rou.xml
new file mode 100644
index 0000000..2a19846
--- /dev/null
+++ b/rdpt_polytech_burst_2_dynSpeed.rou.xml
@@ -0,0 +1,61 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/rdpt_polytech_fixed.net.xml b/rdpt_polytech_fixed.net.xml
new file mode 100644
index 0000000..577abaa
--- /dev/null
+++ b/rdpt_polytech_fixed.net.xml
@@ -0,0 +1,446 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+