Ejemplo n.º 1
0
 def __init__(self, name):
     self.name = name
     self.plan = []
     self.operatingState = VehicleState.vsNotStarted
     self.currentStatus = VehicleStatus.PARKED
     currentLink = str(traci.vehicle.getRoadID(self.name))
     self.lastLink = currentLink
     currentPos = float(traci.vehicle.getLanePosition(self.name))
     self.lastPos = currentPos
     self.visited = []
     self.visited.append(Stop(-1, currentLink, currentPos, StopType.DEPOT))
     self.totalPassengers = 0
     self.totalDistance = 0
     self.nextUpdate = None
     self.itineraryPenalty = 0
     self.countPassengers = 0
     self.capacity = 10
     self.currentPassengers = []
     self.end = 3660
     self.parkedLink = currentLink
     self.parkedPos = currentPos
     self.occupancyTime = 0
     depotStop = Stop(-1, "out", 0, StopType.DEPOT, self.end)
     traci.vehicle.setStop(self.name, currentLink, currentPos, 0,
                           self.end*MILLISECONDS)
     self.plan.append(depotStop)
     self.actualEnd = self.end
     self.shared = 0
     self.deadheading = 0
     self.i = Vehicle.num
     Vehicle.num += 1
Ejemplo n.º 2
0
 def test_build_mega_stops(self):
     stops = [Stop(1, 0, 90), Stop(2, 10, 45)]
     groups = {0: [0, 1]}
     _ = MegaStopFac(0)
     mega_stops = _.build_mega_stops(groups, stops)
     self.assertEqual(mega_stops[0].id, "M0")
     self.assertEqual(mega_stops[0].lat, 0)
     self.assertEqual(mega_stops[0].lon, 90)
Ejemplo n.º 3
0
 def __init__(self):
     # dedicate to retired KCM bus No. 2333
     self.number = '2333'
     self.id = '2333'
     self.line_id = '00'
     self.line_name = '0 - Unknown'
     self.position = Position()
     self.adjacent_stops = [Stop(), Stop()]
Ejemplo n.º 4
0
    def addPerson(self, person, puPosition, doPosition, penalty):
        """ add a person to a vehicle's plan, insert stops at specified places
        (Person, int, int, float)"""

        # extract details from person
        personID = person.personID
        link1 = person.getOrigin().link
        pos1 = person.getOrigin().pos
        request = person.getOrigin().serviceTime
        link2 = person.getDestination().link
        pos2 = person.getDestination().pos

        # add stops to plan 
        self.plan.insert(puPosition, Stop(personID, link1, pos1,
                                          StopType.PICKUP, request))
        self.plan.insert(doPosition, Stop(personID, link2, pos2,
                                          StopType.DROPOFF))
        print "Person " + str(personID) + " now waiting at " + link1 + "," + \
              str(pos1) + " going to " + link2 + "," + str(pos2) + \
              " waiting for " + self.name

        print self.name, "plan:"
        for i in range(0, len(self.plan)):
            self.plan[i].printLn()

        # set person to allocated
        person.allocated()

        # reroute vehicle as plan is updated
        self.currentLink = network.getVehicleCurrentEdge(self.name)
        self.currentPos = network.getVehicleCurrentPosition(self.name)
        if self.currentStatus == VehicleStatus.PARKED:
            self.currentStatus = VehicleStatus.BOOKED
            if self.operatingState != VehicleState.vsRunning:
                # raise from parking position at depot
                print self.parkedLink, self.parkedPos
                traci.vehicle.setStop(self.name, self.parkedLink,
                                      self.parkedPos, 0, 0)
            else:
                # raise from parking position
                traci.vehicle.setStop(self.name, self.parkedLink,
                                      self.parkedPos, 0, 0) 
        myNextStop = self.plan[0]
        traci.vehicle.changeTarget(self.name, myNextStop.link)
        traci.vehicle.setStop(self.name, myNextStop.link, myNextStop.pos, 0,
                              DWELLTIME)
        print self.name, " heading for ", myNextStop.personID, " at", \
              myNextStop.link, myNextStop.pos

        self.operatingState = VehicleState.vsRunning
Ejemplo n.º 5
0
    def addBookingToOptimumItinerary(self, person, step):
        """ determine best vehicle for person and add them to it
        (Person, int)"""
        vehicle = None
        penalty = 0.0
        bestVehiclePenalty = 10000000
        bestIncrPenalty = 100000000
        puPosition = None  # link
        duPosition = None  # link
        bestVehicle = None
        bestPUPosition = None  # link
        bestDOPosition = None  # link
        puLink = None
        doLink = None  # link

        # extract values from person
        personID = person.personID
        link1 = person.getOrigin().link
        pos1 = person.getOrigin().pos
        link2 = person.getDestination().link
        pos2 = person.getDestination().pos
        puLink = Stop(personID, link1, pos1, StopType.PICKUP)
        doLink = Stop(personID, link2, pos2, StopType.DROPOFF)

        # iterate over all vehicles
        for veh in self.fleet.values():
            if veh.getState() <= VehicleState.vsRunning:  # only if not stopped
                (puPosition, doPosition, penalty) = \
                    veh.calcTentativeItineraryPenalty(puLink, doLink, step)
                print veh.name, penalty, penalty - \
                      veh.calcCurrentItineraryPenalty(step)
                if penalty < 900000:
                    incrPenalty = penalty - \
                                  veh.calcCurrentItineraryPenalty(step)
                    # update if best incremental penalty
                    if incrPenalty < bestIncrPenalty:
                        bestVehicle = veh
                        bestIncrPenalty = incrPenalty
                        bestVehiclePenalty = penalty
                        bestDropoffPosition = doPosition
                        bestPickupPosition = puPosition

        # add person to best vehicle
        if bestVehicle != None:
            bestVehicle.addPerson(person, bestPickupPosition,
                                  bestDropoffPosition, bestVehiclePenalty)
            return 0
        else:
            return -1
 def next_state(self):
     if self.tag_id == 0 or self.tag_id == 2 or self.tag_id == 9:
         return turn_tag_position.TurnTagPosition(self.next_input())
     elif self.tag_id == 4 or self.tag_id == 7:
         return search.Search(self.next_input())
     else:
         return Stop(self.next_input())
Ejemplo n.º 7
0
 def test_stop_2_tup(self):
     tree = StopBallTree(self.stops)
     s = [Stop('g', 0, 0)]
     self.assertFalse(tree.stop_2_tup(s)[0].shape == (1, 2),
                      msg='Stops returning not correct shape')
     self.assertFalse((tree.stop_2_tup(s)[0] == 0).sum() != 2,
                      msg='Stops returning correct value')
Ejemplo n.º 8
0
 def setUp(self):
     """"""
     self.ids = ['a', 'b', 'c', 'd', 'e']
     self.lat = [10, 20, 30, 40, 50]
     self.lon = [15, 30, 45, 60, 75]
     self.routes = [1, 1, 2, 2, 3]
     self.stops = [Stop(self.ids[i], self.lat[i], self.lon[i]) for i in range(len(self.ids))]
    def __init__(self, sim_config):
        self.delta_t = sim_config.delta_t
        self.sim_config = sim_config
        # init bus generator (for scheduling arrivals)
        self.generator = Generator(
            sim_config.ln_arrival_dict,
            sim_config.ln_service_dict,
            self.sim_config.sim_duration,
        )

        ### init the stop
        self.stop = Stop(sim_config.berth_num, sim_config.is_capacity_case)

        # running properties
        self._curr_time = 0
        self.ln_total_bus_dict = defaultdict(dict)
Ejemplo n.º 10
0
 def initializeStops(self, lines):
     stops = []
     for line in lines:
         if "destination" not in line:
             line["destination"] = ""
         stops.append(
             Stop(line["stop_id"], line["line"], line["destination"] or ""))
     return stops
Ejemplo n.º 11
0
 def __stops(self):
     if self._stops is None:
         data = self.__get_json_attr('stops', agencies=self.id)
         self._stops = {
             obj['id']: Stop.from_json(self, obj)
             for obj in data
         }
     return self._stops
Ejemplo n.º 12
0
    def getStopList(self):

        response = requests.get("http://webservices.nextbus.com/service/publicXMLFeed?command=routeConfig&a={}&r={}".format(self.agency.tag,self.tag))

        body = ElementTree.fromstring(response.content)
        routeTag = body.find('route')

        for stopTag in routeTag.findall('stop'):
            self.stops.append(Stop(stopTag.attrib))
Ejemplo n.º 13
0
def read_stops(in_file):
	stops = {}
	with open(in_file, 'r') as file:
		reader = csv.reader(file)
		for row in reader:
			try:
				tmp = Stop(int(row[0]), int(row[1]), int(row[2]))
				stops[tmp.id] = tmp
			except:
				pass
	return stops
Ejemplo n.º 14
0
 def test_mega_stop(self):
     stops = [
         Stop(self.ids[i], self.lat[i], self.lon[i])
         for i in range(len(self.ids))
     ]
     m1 = MegaStop(self.ids[0], [stops[0], stops[1]], True)
     self.assertEqual(m1.lat, 15)
     self.assertEqual(m1.lon, 22.5)
     self.assertEqual(m1.to_tuple(), ('a', 15, 22.5))
     m1 = MegaStop(self.ids[0], [stops[0], stops[1]])
     self.assertEqual(m1.lat, 10)
     self.assertEqual(m1.lon, 15)
Ejemplo n.º 15
0
    def getCurrentPos(self):     
        """ return current position """

        if self.currentStatus != VehicleStatus.PARKED:
            currentLink = network.getVehicleCurrentEdge(self.name)
            currentPos = network.getVehicleCurrentPosition(self.name)
        else:
            currentLink = self.lastLink
            currentPos = self.lastPos

        currentStop = Stop(-1, currentLink, currentPos, StopType.CURRENT)
        return currentStop # Stop
class Simulator(object):
    def __init__(self, sim_config):
        self.delta_t = sim_config.delta_t
        self.sim_config = sim_config
        # init bus generator (for scheduling arrivals)
        self.generator = Generator(
            sim_config.ln_arrival_dict,
            sim_config.ln_service_dict,
            self.sim_config.sim_duration,
        )

        ### init the stop
        self.stop = Stop(sim_config.berth_num, sim_config.is_capacity_case)

        # running properties
        self._curr_time = 0
        self.ln_total_bus_dict = defaultdict(dict)

    def reset(self):
        self.generator.reset()
        self.stop.reset()
        self._curr_time = 0
        self.ln_total_bus_dict = defaultdict(dict)

    def move_one_step(self):
        dspt_buses = self.generator.dispatch(self._curr_time)

        for dspt_bus in dspt_buses:
            self.stop.enter_bus(dspt_bus)
            self.ln_total_bus_dict[dspt_bus.ln_id][dspt_bus.bus_id] = dspt_bus

        self.stop.operation(self.delta_t, self._curr_time)
        self._curr_time += self.delta_t
Ejemplo n.º 17
0
 def next_state(self):
     input_state = self.current_input[2] # this is a string
     if input_state == "Drive":
         return Drive(self.next_input())
     elif input_state == "Search":
         return search.Search(self.next_input())
     elif input_state == "PrepareToCatch":
         return PrepareToCatch(self.next_input())
     elif input_state == "DriveUntilTagDistance":
         return drive_tag_distance.DriveUntilTagDistance(self.next_input())
     else:
         print "DriveDistance --> Stop()"
         return Stop(self.next_input())
Ejemplo n.º 18
0
 def _process_route_response(self, result):
     res = {}
     for route_id in result:
         response_data = result[route_id]
         stops = response_data['result']['stops']
         patterns = response_data['result']['lineTraces']['patternTraces']
         res[route_id] = Route(
             route_id,
             [Stop.deserialize_from_json_obj(stop) for stop in stops], [
                 Pattern.deserialize_from_json_obj(pattern)
                 for pattern in patterns
             ])
     return res
Ejemplo n.º 19
0
 def test_query_radius(self):
     """
     @todo make new test data
     :return:
     """
     s = [Stop("g", 0, 0)]
     tree = StopBallTree(s)
     import math
     lat = 10 * math.pi / 180
     lon = 15 * math.pi / 180
     r = math.sqrt(lat **2 + lon ** 2)
     _ = tree.query_radius(s,r + 1)
     self.assertEqual(len(_[s[0]]),1)
     self.assertEqual(_[s[0]][0],s[0])
Ejemplo n.º 20
0
    def readFile(self, fileName):
        """ read people from a file
        format: 
        id, callTime, requestTime, originLink, originPos, destLink, destPos
        (string)"""
        with open(fileName, 'rb') as pFile:
            persons = csv.reader(pFile, delimiter=',')
            for row in persons:
                assert len(row) == 7
                i = row[0]
                entry = int(row[1])
                request = int(row[2])
                originLink = row[3]
                originPos = float(row[4])
                destLink = row[5]
                destPos = float(row[6])

                p = Person(i)
                p.setCallTime(entry)
                p.setRequestTime(request)
                p.setOD(
                    Stop(i, originLink, originPos, StopType.PICKUP, request),
                    Stop(i, destLink, destPos, StopType.DROPOFF))
                self.addPerson(p)
Ejemplo n.º 21
0
    def next_state(self):
        if self.current_input == 0:
            return search.Search(self.next_input())

        elif self.current_input == 5:
            return Release(self.next_input())

        elif self.current_input == 6:
            return PrepareToCatch(self.next_input())

        elif self.current_input == 8:
            return PrepareToCatch(self.next_input())

        elif self.current_input == 9:
            return PrepareToCatch(self.next_input())

        return Stop(self.next_input())
Ejemplo n.º 22
0
 def from_json(cls, data):
     """Load Operator from GeoJSON."""
     agency = cls(**data)
     # Add stops
     stops = {}
     for feature in data['features']:
         if feature['onestopId'].startswith('s'):
             stop = Stop.from_json(feature)
             stops[stop.onestop()] = stop
     # Add routes
     for feature in data['features']:
         if feature['onestopId'].startswith('r'):
             route = Route.from_json(feature)
             # Get stop by id, add as child.
             for stop in feature['serves']:
                 route.pclink(route, stops[stop])
             agency.pclink(agency, route)
     return agency
Ejemplo n.º 23
0
 def test_stop(self):
     stops = [
         Stop(self.ids[i], self.lat[i], self.lon[i])
         for i in range(len(self.ids))
     ]
     self.assertEqual(stops[0].to_tuple(), ('a', 10, 15),
                      msg='Stop 2 Tuple Not working')
     self.assertEqual(stops[0] == stops[1],
                      False,
                      msg='Stops equivalent not working')
     self.assertEqual(hash(stops[0]),
                      hash(self.ids[0]),
                      msg='Stops hash not working')
     self.assertEqual(stops[0] > stops[1],
                      False,
                      msg="Stops greater than not working")
     self.assertEqual(stops[0] < stops[1],
                      True,
                      msg="Stops less than not working")
Ejemplo n.º 24
0
    def __init__(self):
        rospy.on_shutdown(self.shutdown_cb)

        self.robot_name = rospy.get_name()
        self.robot = Robot()

        self.controllers = {
            "rc": RCTeleop(),
            "gtg": GoToGoal(self.robot),
            "stop": Stop()
        }
        self.switch_to_state("gtg")

        self.dd = DifferentialDrive(self.robot.wheelbase,
                                    self.robot.wheel_radius)

        # Initialize TF Broadcaster
        self.br = tf2_ros.TransformBroadcaster()

        # Initialize previous wheel encoder ticks
        self.prev_wheel_ticks = None
Ejemplo n.º 25
0
class TestStop(unittest.TestCase):

    @classmethod
    def setUp(self):
        print("setUp")
        self.stopMountJoy = Stop("MJ", "Mount Joy GO", "https://www.gotransit.com/en/stations-stops-parking/find-a-station-or-stop/results?stationCode=MJ")
        self.stopUnionStation = Stop("UN", "Union Station", "https://www.gotransit.com/en/stations-stops-parking/find-a-station-or-stop/results?stationCode=UN")


    def test_id(self):
        print("test_id")
        self.assertEqual(self.stopMountJoy.get_id(), "MJ")
        self.assertEqual(self.stopUnionStation.get_id(), "UN")

    def test_name(self):
        print("test_name")
        self.assertEqual(self.stopMountJoy.get_name(), "Mount Joy GO")
        self.assertEqual(self.stopUnionStation.get_name(), "Union Station")

    def test_url(self):
        print("test_url")
        self.assertEqual(self.stopMountJoy.get_url(), "https://www.gotransit.com/en/stations-stops-parking/find-a-station-or-stop/results?stationCode=MJ")
        self.assertEqual(self.stopUnionStation.get_url(), "https://www.gotransit.com/en/stations-stops-parking/find-a-station-or-stop/results?stationCode=UN")
Ejemplo n.º 26
0
  def bootstrap_gtfs(self, gtfs_feed, feedname='unknown', populate=True):
    # Make sure the GTFS feed is completely loaded.
    gtfs_feed.preload()

    # Set onestopId
    if 'onestopId' not in self.data:
      self.data['onestopId'] = self.make_onestop(
        geohash=geom.geohash_features(gtfs_feed.stops()),
        name=feedname
      )
    feedid = self.onestop()

    # Override operator Onestop IDs
    agency_onestop = {}
    for i in self.operatorsInFeed():
      agency_onestop[i['gtfsAgencyId']] = i['onestopId']

    # Check for agencies.
    gtfs_agencies = []
    for gtfs_agency in gtfs_feed.agencies():
      if populate or gtfs_agency.id() in agency_onestop:
        gtfs_agencies.append(gtfs_agency)
      else:
        # Unknown agency
        pass
    if not gtfs_agencies:
      return

    # Create TL Stops
    stops = {}
    # sort; process all parent stations first.
    order = []
    order += sorted(filter(lambda x:x.location_type()==1, gtfs_feed.stops()), key=lambda x:x.id())
    order += sorted(filter(lambda x:x.location_type()!=1, gtfs_feed.stops()), key=lambda x:x.id())
    for gtfs_stop in order:
      # Create stop from GTFS
      stop = Stop.from_gtfs(gtfs_stop, feedid)
      # Merge into parent station
      parent = gtfs_stop.get('parent_station')
      if parent:
        stop = gtfs_feed.stop(parent)._tl_ref
      # Merge with existing stop
      key = stop.onestop()
      stop = stops.get(key) or stop
      stops[key] = stop
      # Add identifiers and tags
      gtfs_stop._tl_ref = stop
      stop.add_identifier(gtfs_stop.feedid(feedid))

    # Create TL Routes
    for gtfs_route in gtfs_feed.routes():
      if not gtfs_route.stops():
        continue
      # Create route from GTFS
      route = Route.from_gtfs(gtfs_route, feedid)
      # Link to TL Stops
      for gtfs_stop in gtfs_route.stops():
        t = getattr(gtfs_stop, '_tl_ref', None)
        if t:
          route.add_child(t)
      # Maintain reference to GTFS Route
      gtfs_route._tl_ref = route

    # Create TL Agencies
    for gtfs_agency in gtfs_agencies:
      operator = Operator.from_gtfs(
        gtfs_agency,
        feedid,
        onestop_id=agency_onestop.get(gtfs_agency.id())
      )
      for gtfs_route in gtfs_agency.routes():
        t = getattr(gtfs_route, '_tl_ref', None)
        if t:
          operator.add_child(t)
      # Inelegant.
      operator._cache_onestop()
      # Add agency to feed
      self.add_child(operator)
Ejemplo n.º 27
0
def stop_7():
    return Stop.from_json(json.loads(
        STOP_TEMPLATE.replace("STOP_ID", "stop_7").replace("STOP_NAME", "seventh stop")
    ))
Ejemplo n.º 28
0
def stop_5():
    return Stop.from_json(json.loads(
        STOP_TEMPLATE.replace("STOP_ID", "stop_5").replace("STOP_NAME", "fifth stop")
    ))
Ejemplo n.º 29
0
def stop_3():
    return Stop.from_json(json.loads(
        STOP_TEMPLATE.replace("STOP_ID", "stop_3").replace("STOP_NAME", "third stop")
    ))
Ejemplo n.º 30
0
def stop_2():
    return Stop.from_json(json.loads(
        STOP_TEMPLATE.replace("STOP_ID", "stop_2").replace("STOP_NAME", "second stop")
    ))
Ejemplo n.º 31
0
def chunkedStops(acs):
    stops = Stop(stop_filepath="data/stop_data/stops_test_no_officer_id.csv",
                 chunk=True,
                 acs=acs,
                 chunksize=10)
    return stops.create_summary()
Ejemplo n.º 32
0
  def stopentity(self, stopxml):
    stop = Stop(key_name=stopxml.attributes["TSN"].value)

    buses = self.arrivalstolist(stopxml, stopxml.getElementsByTagName('Arrival'))
    stop.buses = json.dumps(buses)
    return stop
Ejemplo n.º 33
0
 def __stops(self):
   if self._stops is None:
     data = self.__get_json_attr('stops', agencies=self.id)
     self._stops = { obj['id']: Stop.from_json(self, obj) for obj in data }
   return self._stops