priorités (à peu prés) respectées

This commit is contained in:
leo 2022-03-14 22:53:28 +01:00
parent e1c7816e49
commit c1f77a01e4
Signed by: leo
GPG Key ID: 0DD993BFB2B307DB
4 changed files with 43 additions and 7 deletions

38
Car.py
View File

@ -1,5 +1,5 @@
import sumolib import sumolib
from math import dist, ceil, sqrt from math import dist, ceil, sqrt, log
from random import randint from random import randint
from PySide6.QtGui import QPainter from PySide6.QtGui import QPainter
from PySide6.QtCore import QPointF, Signal, QObject from PySide6.QtCore import QPointF, Signal, QObject
@ -99,6 +99,7 @@ class Car():
def getLeader(self, maxDist): def getLeader(self, maxDist):
shapeInd = self.laneInd shapeInd = self.laneInd
edgeInd = self.index edgeInd = self.index
prevInd = edgeInd
laneShape = self.laneShape laneShape = self.laneShape
laneId = self.laneId laneId = self.laneId
l = 0 l = 0
@ -126,6 +127,12 @@ class Car():
if(shapeInd>=len(laneShape)-1): if(shapeInd>=len(laneShape)-1):
shapeInd = 0 shapeInd = 0
edgeInd+=1 edgeInd+=1
carComing = self.getLeaderAtIntersection(prevInd,edgeInd)
if(carComing is not None):
self.leaderDist = l
return carComing
if(not self.route[edgeInd].isSpecial()):
prevInd = edgeInd
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)) # me demande pas pourquoi mais si on le convertit pas en liste ici le filter original est modifié 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): if(edgeInd>=len(self.route)-1):
@ -145,6 +152,35 @@ class Car():
return return
return return
def getLeaderAtIntersection(self, prevInd, edgeInd):
if(self.route[edgeInd].isSpecial()):
return None
inter = self.route[edgeInd-1].getFromNode()
connection = self.route[prevInd].getConnections(self.route[edgeInd])[0]
linkInd = inter.getLinkIndex(connection)
if(linkInd == -1): # Ca devrait pas arriver, mais de toute évidence ça arrive
return;
resp = inter._prohibits[linkInd] # Si je me souvient bien les variables précédées d'un _ doivent pas être touchées?
connRaw = inter.getConnections()
conn = [0] * len(resp)
for c in connRaw:
ind = inter.getLinkIndex(c)
if(ind == -1):
continue
conn[ind] = c
cars = None
for i,f in enumerate(reversed(resp)):
if(f == '0'):
continue
edge = conn[i].getFrom()
cars = self.controller.getCarsOnLane(edge.getID(), conn[i].getFromLane().getIndex())
if(cars is None):
return
cars = list(cars)
if(len(cars) == 0):
return None
return cars[0] # TODO: récuperer la voiture la plus proche au lieu d'un au hasard
def draw(self,painter): def draw(self,painter):
pt = QPointF(*self.pos) pt = QPointF(*self.pos)
painter.drawEllipse(pt,self.size,self.size) painter.drawEllipse(pt,self.size,self.size)

2
Map.py
View File

@ -50,7 +50,7 @@ class Map:
@safeCall @safeCall
def getLane(self,laneID): def getLane(self,laneID):
return self.net.getLane(laneID) return self.net.getLane(laneID)
@safeCall @safeCall
def getBounds(self): def getBounds(self):
return self.net.getBBoxXY() return self.net.getBBoxXY()

View File

@ -64,7 +64,7 @@ class mainLoop(QObject):
self.controller.update() self.controller.update()
except: except:
(type, value, traceback) = sys.exc_info() (type, value, traceback) = sys.exc_info()
print(type, value, traceback) print(type, value, traceback.print_tb())
@threadSafe @threadSafe
def openNetwork(self, filename): def openNetwork(self, filename):

View File

@ -1,13 +1,13 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<!-- generated on 2022-03-13 21:05:20 by Eclipse SUMO netedit Version 1.12.0 <!-- generated on 2022-03-14 22:49:39 by Eclipse SUMO netedit Version 1.12.0
--> -->
<routes xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://sumo.dlr.de/xsd/routes_file.xsd"> <routes xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://sumo.dlr.de/xsd/routes_file.xsd">
<vehicle id="v_0" depart="0.00">
<route edges="E3 E7 E6 E9 E60"/>
</vehicle>
<vehicle id="v_1" depart="0.00"> <vehicle id="v_1" depart="0.00">
<route edges="-E6 E8 E7 E6 E50"/> <route edges="-E6 E8 E7 E6 E50"/>
</vehicle> </vehicle>
<vehicle id="v_0" depart="1.00">
<route edges="E3 E7 E6 E9 E60"/>
</vehicle>
</routes> </routes>