From 63b3f8218e2307175c294233ab12b76245ddeee7 Mon Sep 17 00:00:00 2001 From: leo Date: Thu, 12 May 2022 23:45:10 +0200 Subject: [PATCH] dynamic speed --- Car.py | 19 +- CarController.py | 19 +- Flow.py | 4 +- rdpt_polytech_burst_2_dynSpeed.rou.xml | 61 ++++ rdpt_polytech_fixed.net.xml | 446 +++++++++++++++++++++++++ 5 files changed, 536 insertions(+), 13 deletions(-) create mode 100644 rdpt_polytech_burst_2_dynSpeed.rou.xml create mode 100644 rdpt_polytech_fixed.net.xml 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 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +