def test_vehicle_with_final(self): identifier = str(0) origin = jit.Service( position=generate_one_position(), earliest=100, latest=200, duration=2, ) destination = jit.Service( position=generate_one_position(), earliest=1000, latest=2000, duration=20, ) vehicle = jit.Vehicle(identifier, origin, destination) self.assertEqual(identifier, vehicle.identifier) self.assertEqual(1, vehicle.capacity) self.assertEqual(origin, vehicle.origin) self.assertEqual(origin.position, vehicle.origin_position) self.assertEqual(origin.earliest, vehicle.origin_earliest) self.assertEqual(origin.latest, vehicle.origin_latest) self.assertEqual(origin.duration, vehicle.origin_duration) self.assertEqual(destination, vehicle.destination) self.assertEqual(destination.position, vehicle.destination_position) self.assertEqual(destination.earliest, vehicle.destination_earliest) self.assertEqual(destination.latest, vehicle.destination_latest) self.assertEqual(destination.duration, vehicle.destination_duration)
def test_trip_with_capacity(self): identifier = str() capacity = 3 origin = jit.Service( position=generate_one_position(), earliest=0.0, ) destination = jit.Service(position=generate_one_position()) distance = origin.distance_to(destination) duration = origin.time_to(destination) trip = jit.Trip(identifier=identifier, origin=origin, destination=destination, capacity=capacity) self.assertEqual(origin.position, trip.origin_position) self.assertEqual(destination.position, trip.destination_position) self.assertEqual(0, trip.origin_earliest) self.assertEqual(trip.origin_latest, jit.MAX_FLOAT) self.assertEqual(0, trip.origin_duration) self.assertEqual(capacity, trip.capacity) self.assertEqual(distance, trip.distance) self.assertEqual(duration, trip.duration(trip.origin_earliest))
def _build_route_3(cls, vehicle: jit.Vehicle, surface: jit.Surface) -> jit.Route: route = jit.Route(vehicle) trip = jit.Trip( identifier="TEST_3", origin=jit.Service( position=surface.get_or_create_position([0, 0]), earliest=1.0, latest=20.0, ), destination=jit.Service(position=surface.get_or_create_position( [10, 10]), ), timeout=1.0, ) pickup_stop = jit.Stop(vehicle, surface.get_or_create_position([0, 0]), route.current_stop) delivery_stop = jit.Stop(vehicle, surface.get_or_create_position([10, 10]), pickup_stop) planned_trip = jit.PlannedTrip( vehicle=vehicle, trip=trip, pickup=pickup_stop, delivery=delivery_stop, ) route.append_planned_trip(planned_trip) return route
def test_distance_to(self): one_position = generate_one_position() two_position = generate_one_position() one = jit.Service(one_position) two = jit.Service(two_position) self.assertEqual(one_position.distance_to(two_position), one.distance_to(two))
def test_as_tuple(self): identifier = str(0) origin = jit.Service( position=generate_one_position(), earliest=100, latest=200, duration=2, ) destination = jit.Service( position=generate_one_position(), earliest=1000, latest=2000, duration=20, ) capacity = 44 vehicle = jit.Vehicle(identifier, origin, destination, capacity) expected = ( ('identifier', identifier), ('origin', tuple(origin)), ('destination', tuple(destination)), ('capacity', capacity), ('timeout', vehicle.timeout), ) self.assertEqual(expected, tuple(vehicle))
def test_equals(self): position = generate_one_position() earliest = 1800 latest = 3600 duration = 60 one = jit.Service(position, earliest, latest, duration) two = jit.Service(position, earliest, latest, duration) self.assertEqual(one, two)
def setUpClass(cls) -> None: surface = jit.GeometricSurface(jit.DistanceMetric.MANHATTAN) origin = jit.Service(surface.get_or_create_position([0, 0])) vehicle = jit.Vehicle( identifier="TEST", origin=origin, ) fleet = jit.Fleet({vehicle}) trips = [ jit.Trip( identifier="TEST_1", origin=jit.Service( position=surface.get_or_create_position([0, 0]), earliest=0.0, latest=10.0, ), destination=jit.Service( position=surface.get_or_create_position([1, 1]), ), ), jit.Trip( identifier="TEST_2", origin=jit.Service( position=surface.get_or_create_position([1, 1]), earliest=0.0, latest=20.0, ), destination=jit.Service( position=surface.get_or_create_position([10, 10]), ), ), ] job = jit.Job(set(trips), jit.DialARideObjective) route = jit.Route(vehicle) pickup_stop = jit.Stop(vehicle, surface.get_or_create_position([0, 0]), route.current_stop) delivery_stop = jit.Stop(vehicle, surface.get_or_create_position([1, 1]), pickup_stop) cls.planned_trip = jit.PlannedTrip( vehicle=vehicle, trip=trips[0], pickup=pickup_stop, delivery=delivery_stop, ) route.append_planned_trip(cls.planned_trip) cls.stop = route.stops[1] conjecture = jit.TailInsertionStrategy() cls.route = conjecture.compute(route, trips[1])[0] cls.planning = jit.Planning({cls.route}) cls.algorithm = jit.NaiveAlgorithm(fleet, job) cls.result = jit.Result(cls.algorithm, cls.planning, 0.0)
def test_construction_with_capacity(self): capacity = 3 service = jit.Service( position=generate_one_position(), earliest=1800, latest=3600, duration=60, ) identifier = str(0) vehicle = jit.Vehicle(identifier, service, capacity=capacity) self.assertEqual(identifier, vehicle.identifier) self.assertEqual(capacity, vehicle.capacity) self.assertEqual(service, vehicle.origin) self.assertEqual(service.position, vehicle.origin_position) self.assertEqual(service.earliest, vehicle.origin_earliest) self.assertEqual(service.latest, vehicle.origin_latest) self.assertEqual(service.duration, vehicle.origin_duration) self.assertEqual(service, vehicle.destination) self.assertEqual(service.position, vehicle.destination_position) self.assertEqual(service.earliest, vehicle.destination_earliest) self.assertEqual(service.latest, vehicle.destination_latest) self.assertEqual(service.duration, vehicle.destination_duration)
def test_construction(self): position = generate_one_position() service = jit.Service(position) self.assertEqual(position, service.position) self.assertEqual(0, service.earliest) self.assertEqual(jit.MAX_FLOAT, service.latest) self.assertEqual(0, service.duration)
def generate_one_trip( identifier: str = None, origin_position: jit.Position = None, destination_position: jit.Position = None, earliest: float = None, earliest_min: float = 0, earliest_max: float = 86400, timeout: float = None, timeout_min: float = 1800, timeout_max: float = 7200, load_time: float = None, load_time_min: float = 300, load_time_max: float = 900, capacity: float = None, capacity_min: int = 1, capacity_max: int = 3, *args, **kwargs, ) -> jit.Trip: if identifier is None: identifier = f"{randint(1, 999):0d}" if origin_position is None: origin_position = generate_one_position(*args, **kwargs) if destination_position is None: destination_position = generate_one_position(*args, **kwargs) if earliest is None: earliest = uniform(earliest_min, earliest_max) if timeout is None: timeout = uniform(timeout_min, timeout_max) if capacity is None: capacity = randint(capacity_min, capacity_max) if load_time is None: load_time = uniform(load_time_min, load_time_max) return jit.Trip( identifier, origin=jit.Service( position=origin_position, earliest=earliest, latest=earliest + timeout, duration=load_time, ), destination=jit.Service(position=destination_position, ), capacity=capacity, )
def test_construction_with_latest(self): position = generate_one_position() latest = 3600 service = jit.Service(position, latest=latest) self.assertEqual(position, service.position) self.assertEqual(0, service.earliest) self.assertEqual(latest, service.latest) self.assertEqual(0, service.duration)
def setUpClass(cls) -> None: surface = jit.GeometricSurface(jit.DistanceMetric.MANHATTAN) origin = jit.Service(surface.get_or_create_position([0, 0])) vehicle = jit.Vehicle( identifier="TEST", origin=origin, ) cls.routes = [ cls._build_route_1(vehicle, surface), cls._build_route_2(vehicle, surface), cls._build_route_3(vehicle, surface), ]
def test_tuple(self): position = generate_one_position() earliest = 1800 latest = 3600 duration = 60 service = jit.Service(position, earliest, latest, duration) raw = ( ("position", position), ("earliest", earliest), ("latest", latest), ("duration", duration), ) self.assertEqual(raw, tuple(service))
def test_dict(self): position = generate_one_position() earliest = 1800 latest = 3600 duration = 60 service = jit.Service(position, earliest, latest, duration) raw = { 'position': position, 'earliest': earliest, 'latest': latest, 'duration': duration, } self.assertEqual(raw, dict(service))
def test_tuple(self): position = generate_one_position() earliest = 1800 latest = 3600 duration = 60 service = jit.Service(position, earliest, latest, duration) raw = ( ('position', position), ('earliest', earliest), ('latest', latest), ('duration', duration), ) self.assertEqual(raw, tuple(service))
def test_as_tuple(self): identifier = str(0) origin = jit.Service( position=generate_one_position(), earliest=100, latest=200, duration=2, ) destination = jit.Service( position=generate_one_position(), earliest=1000, latest=2000, duration=20, ) capacity = 44 on_time_bonus = 3 timeout = 100 trip = jit.Trip( identifier=identifier, origin=origin, destination=destination, capacity=capacity, on_time_bonus=on_time_bonus, timeout=timeout, ) expected = ( ("identifier", identifier), ("origin", tuple(origin)), ("destination", tuple(destination)), ("on_time_bonus", on_time_bonus), ("capacity", capacity), ("timeout", trip.timeout), ) self.assertEqual(expected, tuple(trip))
def test_dict(self): position = generate_one_position() earliest = 1800 latest = 3600 duration = 60 service = jit.Service(position, earliest, latest, duration) raw = { "position": position, "earliest": earliest, "latest": latest, "duration": duration, } self.assertEqual(raw, dict(service))
def generate_one_vehicle( capacity_min: int = 1, capacity_max: int = 3, earliest_min: float = 0, earliest_max: float = 86400, timeout: float = None, timeout_min: float = 14400, timeout_max: float = 28800, idx: int = 0, *args, **kwargs, ) -> jit.Vehicle: # TODO: Increase parameter options. capacity = randint(capacity_min, capacity_max) position = generate_one_position(*args, **kwargs) earliest = uniform(earliest_min, earliest_max) if timeout is None: timeout = uniform(timeout_min, timeout_max) latest = earliest + timeout origin = jit.Service(position=position, earliest=earliest, latest=latest) return jit.Vehicle(str(idx), origin, capacity=capacity)