def cyberCarArrived(self, vehicleID, edge): step = vehicleControl.getStep() footEdge = edge.replace("cyber", "footmain") wait = 0 load = [] for person, target in self.cyberCarLoad.get(vehicleID, []): if target == footEdge: statistics.personUnloaded(person, step) wait += WAIT_PER_PERSON else: load.append((person, target)) while self.personsWaitingAt.get(footEdge, []) and len(load) < vehicleControl.getCapacity(): person, target = self.personsWaitingAt[footEdge].pop(0) vehicleControl.leaveStop(person) statistics.personLoaded(person, step) load.append((person, target)) wait += WAIT_PER_PERSON vehicleControl.leaveStop(vehicleID, delay=wait) if edge == "cyberout" or edge == "cyberin": row = -1 else: row = int(edge[5]) if row < DOUBLE_ROWS - 1: vehicleControl.stopAt( vehicleID, "cyber%sto%s" % (row + 1, row + 2)) else: vehicleControl.stopAt(vehicleID, "cyberout") self.cyberCarLoad[vehicleID] = load
def _findNextTarget(self, wait): minTarget = "z" minDownstreamTarget = "z" minSource = "z" minDownstreamSource = "z" edge = vehicleControl.getPosition(self.id) if edge == "cyberin": edge = "cyber" for task in self.running: if task.target < minTarget: minTarget = task.target if task.target < minDownstreamTarget and task.target > edge: minDownstreamTarget = task.target for task in self.tasks[:vehicleControl.getCapacity() - self.load]: if task.source < minSource: minSource = task.source if task.source < minDownstreamSource and task.source > edge: minDownstreamSource = task.source if minDownstreamTarget != "z": minTarget = minDownstreamTarget elif minDownstreamSource < minTarget: minTarget = minDownstreamSource elif minTarget < edge and minSource < minTarget: minTarget = minSource if minTarget == "z": minTarget = "cyberin" if minTarget != vehicleControl.getPosition(self.id): vehicleControl.leaveStop(self.id, delay=wait) vehicleControl.stopAt(self.id, minTarget)
def cyberCarArrived(self, vehicleID, edge): step = vehicleControl.getStep() footEdge = edge.replace("cyber", "footmain") wait = 0 load = [] for person, target in self.cyberCarLoad.get(vehicleID, []): if target == footEdge: statistics.personUnloaded(person, step) wait += WAIT_PER_PERSON else: load.append((person, target)) while self.personsWaitingAt.get( footEdge, []) and len(load) < vehicleControl.getCapacity(): person, target = self.personsWaitingAt[footEdge].pop(0) vehicleControl.leaveStop(person) statistics.personLoaded(person, step) load.append((person, target)) wait += WAIT_PER_PERSON vehicleControl.leaveStop(vehicleID, delay=wait) if edge == "cyberout" or edge == "cyberin": row = -1 else: row = int(edge[5]) if row < DOUBLE_ROWS - 1: vehicleControl.stopAt(vehicleID, "cyber%sto%s" % (row + 1, row + 2)) else: vehicleControl.stopAt(vehicleID, "cyberout") self.cyberCarLoad[vehicleID] = load