perf
This commit is contained in:
parent
32496cd12c
commit
2b86d269b9
70
Car.py
70
Car.py
@ -4,6 +4,7 @@ from random import randint, uniform
|
|||||||
from PySide6.QtGui import QPainter, QColor
|
from PySide6.QtGui import QPainter, QColor
|
||||||
from PySide6.QtCore import QPointF, Signal, QObject, Qt
|
from PySide6.QtCore import QPointF, Signal, QObject, Qt
|
||||||
from itertools import islice
|
from itertools import islice
|
||||||
|
import time
|
||||||
|
|
||||||
class updateSignals(QObject):
|
class updateSignals(QObject):
|
||||||
updateDisp = Signal(tuple)
|
updateDisp = Signal(tuple)
|
||||||
@ -59,7 +60,7 @@ class Car():
|
|||||||
self.v=0
|
self.v=0
|
||||||
self.a=10
|
self.a=10
|
||||||
self.b=20
|
self.b=20
|
||||||
self.minSpace=5
|
self.minSpace=10
|
||||||
self.interMinSpace=20
|
self.interMinSpace=20
|
||||||
self.leaderBefore=False
|
self.leaderBefore=False
|
||||||
self.distToInter=0
|
self.distToInter=0
|
||||||
@ -76,6 +77,7 @@ class Car():
|
|||||||
self.nu = 0
|
self.nu = 0
|
||||||
self.gamma = 10
|
self.gamma = 10
|
||||||
self.delta = 0
|
self.delta = 0
|
||||||
|
#self.T = uniform(0.9,1.6) if not self.IA else 0.01
|
||||||
self.T = uniform(0.9,1.6) if not self.IA else 0.01
|
self.T = uniform(0.9,1.6) if not self.IA else 0.01
|
||||||
self.size = 3
|
self.size = 3
|
||||||
|
|
||||||
@ -136,6 +138,8 @@ class Car():
|
|||||||
carsHere = self.controller.getCarsOnLane(self.route[edgeInd].getID(), laneId)
|
carsHere = self.controller.getCarsOnLane(self.route[edgeInd].getID(), laneId)
|
||||||
carsHere = list(filter(lambda c: c.id != self.id, carsHere))
|
carsHere = list(filter(lambda c: c.id != self.id, carsHere))
|
||||||
self.leaderBefore = False
|
self.leaderBefore = False
|
||||||
|
self.distToInter = 0
|
||||||
|
closestToReturn = None
|
||||||
while(l<maxDist):
|
while(l<maxDist):
|
||||||
endPos = laneShape[shapeInd+1]
|
endPos = laneShape[shapeInd+1]
|
||||||
|
|
||||||
@ -154,37 +158,44 @@ class Car():
|
|||||||
l+=dist(self.pos,endPos)
|
l+=dist(self.pos,endPos)
|
||||||
else:
|
else:
|
||||||
l+=dist(laneShape[shapeInd],endPos)
|
l+=dist(laneShape[shapeInd],endPos)
|
||||||
shapeInd+=1
|
|
||||||
if(shapeInd>=len(laneShape)-1):
|
|
||||||
shapeInd = 0
|
|
||||||
edgeInd+=1
|
|
||||||
carComing = self.getLeaderAtIntersection(prevInd,edgeInd)
|
|
||||||
if(carComing is not None):
|
|
||||||
self.distToInter = l # y as un bug qqu part dans le calcul de la distance, ça saute quand on change d'edge
|
|
||||||
if self.route[edgeInd].isSpecial():
|
|
||||||
self.distToInter += self.route[edgeInd + 1].getLength()
|
|
||||||
self.leaderDist = carComing[0]
|
|
||||||
self.leaderBefore = True
|
|
||||||
return carComing[1]
|
|
||||||
if(not self.route[edgeInd].isSpecial()):
|
|
||||||
prevInd = edgeInd
|
|
||||||
carsHere = self.controller.getCarsOnLane(self.route[edgeInd].getID(), laneId)
|
|
||||||
carsHere = list(filter(lambda c: c.id != self.id, carsHere)) # me demande pas pourquoi mais si on le convertit pas en liste ici le filter original est modifié
|
|
||||||
if(edgeInd>=len(self.route)-1):
|
|
||||||
return
|
|
||||||
newLane = self.getShape(edgeInd)
|
|
||||||
laneShape = newLane[0]
|
|
||||||
laneId = newLane[2]
|
|
||||||
else:
|
else:
|
||||||
if l == 0:
|
if l == 0:
|
||||||
l+=dist(self.pos, closest.pos)
|
l+=dist(self.pos, closest.pos)
|
||||||
else:
|
else:
|
||||||
l+=dist(laneShape[shapeInd], closest.pos)
|
l+=dist(laneShape[shapeInd], closest.pos)
|
||||||
if l <= maxDist:
|
if l <= maxDist:
|
||||||
self.leaderDist = l
|
if closestToReturn is None:
|
||||||
return closest
|
self.leaderDist = l
|
||||||
|
closestToReturn = closest
|
||||||
|
if l > self.interMinSpace and closestToReturn is not None:
|
||||||
|
return closestToReturn
|
||||||
else:
|
else:
|
||||||
return
|
return
|
||||||
|
|
||||||
|
shapeInd+=1
|
||||||
|
if(shapeInd>=len(laneShape)-1):
|
||||||
|
shapeInd = 0
|
||||||
|
edgeInd+=1
|
||||||
|
if l > self.interMinSpace and closestToReturn is not None:
|
||||||
|
return closestToReturn
|
||||||
|
carComing = self.getLeaderAtIntersection(prevInd,edgeInd)
|
||||||
|
if(carComing is not None):
|
||||||
|
self.distToInter = l # y as un bug qqu part dans le calcul de la distance, ça saute quand on change d'edge
|
||||||
|
if self.route[edgeInd].isSpecial():
|
||||||
|
self.distToInter += self.route[edgeInd + 1].getLength()
|
||||||
|
self.leaderDist = carComing[0]
|
||||||
|
self.leaderBefore = True
|
||||||
|
return carComing[1]
|
||||||
|
if(not self.route[edgeInd].isSpecial()):
|
||||||
|
prevInd = edgeInd
|
||||||
|
carsHere = self.controller.getCarsOnLane(self.route[edgeInd].getID(), laneId)
|
||||||
|
carsHere = list(filter(lambda c: c.id != self.id, carsHere)) # me demande pas pourquoi mais si on le convertit pas en liste ici le filter original est modifié
|
||||||
|
if(edgeInd>=len(self.route)-1):
|
||||||
|
return
|
||||||
|
newLane = self.getShape(edgeInd)
|
||||||
|
laneShape = newLane[0]
|
||||||
|
laneId = newLane[2]
|
||||||
return
|
return
|
||||||
|
|
||||||
def getCurrentEdge(self):
|
def getCurrentEdge(self):
|
||||||
@ -274,7 +285,7 @@ class Car():
|
|||||||
carsInEdge = zip([self.getCarDist(c, intEdge, intLane.getIndex())+prevLanesLgt for c in carsInEdge], carsInEdge)
|
carsInEdge = zip([self.getCarDist(c, intEdge, intLane.getIndex())+prevLanesLgt for c in carsInEdge], carsInEdge)
|
||||||
closest = min(carsInEdge, key=lambda c: c[0])
|
closest = min(carsInEdge, key=lambda c: c[0])
|
||||||
cl = closest[1]
|
cl = closest[1]
|
||||||
if cl.nextNonSpecialEdge() == edge and cl.nextNonSpecialEdge(3) == conn[i].getTo():
|
if cl.nextNonSpecialEdge() == edge and cl.nextNonSpecialEdge(3) == conn[i].getTo() and not (cl.v == 0 and (cl.leader is not None and cl.leaderBefore and cl.leaderDist > 10)): #TODO: le 10 je l'ai sorti de mon
|
||||||
cars.append(closest)
|
cars.append(closest)
|
||||||
|
|
||||||
for incEdge in prevNode.getIncoming():
|
for incEdge in prevNode.getIncoming():
|
||||||
@ -291,7 +302,8 @@ class Car():
|
|||||||
carsInEdge = zip([self.getCarDist(c, incEdge, incLane.getIndex())+prevLanesLgt+intLaneLgt for c in carsInEdge], carsInEdge)
|
carsInEdge = zip([self.getCarDist(c, incEdge, incLane.getIndex())+prevLanesLgt+intLaneLgt for c in carsInEdge], carsInEdge)
|
||||||
closest = min(carsInEdge, key=lambda c: c[0])
|
closest = min(carsInEdge, key=lambda c: c[0])
|
||||||
cl = closest[1]
|
cl = closest[1]
|
||||||
if cl.nextNonSpecialEdge() == edge and cl.nextNonSpecialEdge(3) == conn[i].getTo():
|
if cl.nextNonSpecialEdge() == edge and cl.nextNonSpecialEdge(3) == conn[i].getTo() and not (cl.v == 0 and (cl.leader is not None and cl.leaderBefore and cl.leaderDist > 10)): #TODO: comme avant (d'ailleurs faudrait les rassembler)
|
||||||
|
|
||||||
cars.append(closest)
|
cars.append(closest)
|
||||||
|
|
||||||
if(len(cars) == 0):
|
if(len(cars) == 0):
|
||||||
@ -469,7 +481,7 @@ class Car():
|
|||||||
self.v = min(vmax, self.v + self.a*dt)
|
self.v = min(vmax, self.v + self.a*dt)
|
||||||
return
|
return
|
||||||
|
|
||||||
if self.leaderStopped > 1:
|
if False and self.leaderStopped > 1:
|
||||||
self.v = min(vmax, self.v + self.a*dt)
|
self.v = min(vmax, self.v + self.a*dt)
|
||||||
return
|
return
|
||||||
|
|
||||||
@ -478,7 +490,7 @@ class Car():
|
|||||||
# ou si on as le temps d'arriver à l'intersection avant le leader (plus un marge pour garder un distance de sécu)
|
# ou si on as le temps d'arriver à l'intersection avant le leader (plus un marge pour garder un distance de sécu)
|
||||||
# alors on accelere pour s'inserer
|
# alors on accelere pour s'inserer
|
||||||
#print(tti, leader.T, marg, ltti)
|
#print(tti, leader.T, marg, ltti)
|
||||||
if self.distToInter > self.interMinSpace + dts or self.distToInter < 3 or (tti + leader.T + marg) < ltti:
|
if self.distToInter > self.interMinSpace + dts or (tti + leader.T + marg) < ltti:
|
||||||
self.v = min(vmax, self.v + self.a*dt)
|
self.v = min(vmax, self.v + self.a*dt)
|
||||||
#print(self.id, "ca passe")
|
#print(self.id, "ca passe")
|
||||||
else:# sinon on freine
|
else:# sinon on freine
|
||||||
@ -537,7 +549,7 @@ class Car():
|
|||||||
self.leader.isLeader += 1
|
self.leader.isLeader += 1
|
||||||
if self.leader.v == 0:
|
if self.leader.v == 0:
|
||||||
self.leaderStopped += dt
|
self.leaderStopped += dt
|
||||||
print(self.leaderStopped)
|
#print(self.leaderStopped)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -216,6 +216,7 @@ class CarController:
|
|||||||
#selectedId = self.infoWidget.currentIndex()
|
#selectedId = self.infoWidget.currentIndex()
|
||||||
colorOverride = False
|
colorOverride = False
|
||||||
if len(selectedCar) == 0:
|
if len(selectedCar) == 0:
|
||||||
|
painter.setPen(Qt.white)
|
||||||
pass
|
pass
|
||||||
elif car.id == self.selectedId:
|
elif car.id == self.selectedId:
|
||||||
painter.setPen(Qt.green)
|
painter.setPen(Qt.green)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user