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.QtCore import QPointF, Signal, QObject, Qt
|
||||
from itertools import islice
|
||||
import time
|
||||
|
||||
class updateSignals(QObject):
|
||||
updateDisp = Signal(tuple)
|
||||
@ -59,7 +60,7 @@ class Car():
|
||||
self.v=0
|
||||
self.a=10
|
||||
self.b=20
|
||||
self.minSpace=5
|
||||
self.minSpace=10
|
||||
self.interMinSpace=20
|
||||
self.leaderBefore=False
|
||||
self.distToInter=0
|
||||
@ -76,6 +77,7 @@ class Car():
|
||||
self.nu = 0
|
||||
self.gamma = 10
|
||||
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.size = 3
|
||||
|
||||
@ -136,6 +138,8 @@ class Car():
|
||||
carsHere = self.controller.getCarsOnLane(self.route[edgeInd].getID(), laneId)
|
||||
carsHere = list(filter(lambda c: c.id != self.id, carsHere))
|
||||
self.leaderBefore = False
|
||||
self.distToInter = 0
|
||||
closestToReturn = None
|
||||
while(l<maxDist):
|
||||
endPos = laneShape[shapeInd+1]
|
||||
|
||||
@ -154,37 +158,44 @@ class Car():
|
||||
l+=dist(self.pos,endPos)
|
||||
else:
|
||||
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:
|
||||
if l == 0:
|
||||
l+=dist(self.pos, closest.pos)
|
||||
else:
|
||||
l+=dist(laneShape[shapeInd], closest.pos)
|
||||
if l <= maxDist:
|
||||
self.leaderDist = l
|
||||
return closest
|
||||
if closestToReturn is None:
|
||||
self.leaderDist = l
|
||||
closestToReturn = closest
|
||||
if l > self.interMinSpace and closestToReturn is not None:
|
||||
return closestToReturn
|
||||
else:
|
||||
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
|
||||
|
||||
def getCurrentEdge(self):
|
||||
@ -274,7 +285,7 @@ class Car():
|
||||
carsInEdge = zip([self.getCarDist(c, intEdge, intLane.getIndex())+prevLanesLgt for c in carsInEdge], carsInEdge)
|
||||
closest = min(carsInEdge, key=lambda c: c[0])
|
||||
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)
|
||||
|
||||
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)
|
||||
closest = min(carsInEdge, key=lambda c: c[0])
|
||||
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)
|
||||
|
||||
if(len(cars) == 0):
|
||||
@ -469,7 +481,7 @@ class Car():
|
||||
self.v = min(vmax, self.v + self.a*dt)
|
||||
return
|
||||
|
||||
if self.leaderStopped > 1:
|
||||
if False and self.leaderStopped > 1:
|
||||
self.v = min(vmax, self.v + self.a*dt)
|
||||
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)
|
||||
# alors on accelere pour s'inserer
|
||||
#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)
|
||||
#print(self.id, "ca passe")
|
||||
else:# sinon on freine
|
||||
@ -537,7 +549,7 @@ class Car():
|
||||
self.leader.isLeader += 1
|
||||
if self.leader.v == 0:
|
||||
self.leaderStopped += dt
|
||||
print(self.leaderStopped)
|
||||
#print(self.leaderStopped)
|
||||
|
||||
|
||||
|
||||
|
@ -216,6 +216,7 @@ class CarController:
|
||||
#selectedId = self.infoWidget.currentIndex()
|
||||
colorOverride = False
|
||||
if len(selectedCar) == 0:
|
||||
painter.setPen(Qt.white)
|
||||
pass
|
||||
elif car.id == self.selectedId:
|
||||
painter.setPen(Qt.green)
|
||||
|
Loading…
x
Reference in New Issue
Block a user