예제 #1
0
    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
예제 #2
0
    def setUp(self) -> None:
        self.vehicle = generate_one_vehicle()
        self.position = generate_one_position()
        stop0 = jit.Stop(self.vehicle, self.position, None)

        stop1 = jit.Stop(self.vehicle, generate_one_position(), stop0)
        stop0.following = stop1

        stop2 = jit.Stop(self.vehicle, generate_one_position(), stop1)
        stop1.following = stop2

        stop3 = jit.Stop(self.vehicle, generate_one_position(), stop2)
        stop2.following = stop3

        stop4 = jit.Stop(self.vehicle, generate_one_position(), stop3)
        stop3.following = stop4

        stops = [stop0, stop1, stop2, stop3, stop4]
        self.stops = stops

        self.route = jit.Route(self.vehicle, self.stops)
        self.planning = jit.Planning({self.route})

        self.job = jit.Job(generate_trips(10), objective_cls=jit.DialARideObjective)
        self.fleet = jit.Fleet(generate_vehicles(10))
        self.algorithm = jit.NaiveAlgorithm(self.fleet, self.job)
        self.result = jit.Result(self.algorithm, self.planning, computation_time=float(0.0))
예제 #3
0
파일: abc.py 프로젝트: garciparedes/jinete
    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)
예제 #4
0
def generate_one_planned_trip(
    feasible: bool,
    vehicle: jit.Vehicle = None,
    previous_stop: jit.Stop = None,
    pickup_stop: jit.Stop = None,
    delivery_stop: jit.Stop = None,
    origin_position: jit.Position = None,
    destination_position: jit.Position = None,
    *args,
    **kwargs,
) -> jit.PlannedTrip:
    if vehicle is None:
        vehicle = generate_one_vehicle()
    if previous_stop is None:
        previous_stop = jit.Stop(vehicle, vehicle.origin_position,
                                 previous_stop)

    if feasible:
        kwargs["earliest"] = 0.0
        kwargs["timeout"] = float("inf")
        kwargs["capacity"] = vehicle.capacity
    else:
        previous_stop.starting_time = jit.MAX_FLOAT

    if origin_position is None:
        origin_position = generate_one_position()

    if destination_position is None:
        destination_position = generate_one_position()

    if pickup_stop is None:
        pickup_stop = jit.Stop(vehicle, origin_position, previous_stop)
    else:
        origin_position = pickup_stop.position

    if delivery_stop is None:
        delivery_stop = jit.Stop(vehicle, destination_position, pickup_stop)
    else:
        destination_position = delivery_stop.position

    trip = generate_one_trip(
        origin_position=origin_position,
        destination_position=destination_position,
        *args,
        **kwargs,
    )

    return jit.PlannedTrip(
        vehicle=vehicle,
        trip=trip,
        pickup=pickup_stop,
        delivery=delivery_stop,
    )
예제 #5
0
    def test_with_planned_trip(self):
        stop = jit.Stop(self.vehicle, self.position, self.stops[0])

        delivery_planned_trip = generate_one_planned_trip(
            feasible=True,
            vehicle=self.vehicle,
            pickup_stop=self.stops[0],
            delivery_stop=stop,
        )

        pickup_planned_trip = generate_one_planned_trip(
            feasible=True,
            vehicle=self.vehicle,
            pickup_stop=stop,
        )
        self.assertIn(delivery_planned_trip, stop.delivery_planned_trips)
        self.assertNotIn(delivery_planned_trip, stop.pickup_planned_trips)

        self.assertNotIn(pickup_planned_trip, stop.delivery_planned_trips)
        self.assertIn(pickup_planned_trip, stop.pickup_planned_trips)
        self.assertIsInstance(stop.identifier, str)

        iterable = it.chain(
            (f'P{planned_trip.trip_identifier}' for planned_trip in stop.pickup_planned_trips),
            (f'D{planned_trip.trip_identifier}' for planned_trip in stop.delivery_planned_trips),
        )
        identifier = '|'.join(iterable)
        identifier = f'[{identifier}]'
        self.assertEqual(identifier, stop.identifier)
예제 #6
0
    def setUp(self) -> None:
        stop0 = jit.Stop(self.vehicle, self.position, None)

        stop1 = jit.Stop(self.vehicle, generate_one_position(), stop0)
        stop0.following = stop1

        stop2 = jit.Stop(self.vehicle, generate_one_position(), stop1)
        stop1.following = stop2

        stop3 = jit.Stop(self.vehicle, generate_one_position(), stop2)
        stop2.following = stop3

        stop4 = jit.Stop(self.vehicle, generate_one_position(), stop3)
        stop3.following = stop4

        stops = [stop0, stop1, stop2, stop3, stop4]
        self.stops = stops
예제 #7
0
    def test_creation_with_previous(self):
        previous_position = generate_one_position()
        previous_stop = jit.Stop(self.vehicle, previous_position, None)

        stop = jit.Stop(self.vehicle, self.position, previous_stop)
        previous_stop.following = stop

        self.assertEqual(previous_stop.following, stop)
        self.assertEqual(self.vehicle, stop.vehicle)
        self.assertEqual(self.position, stop.position)
        self.assertEqual(previous_stop, stop.previous)
        self.assertEqual(stop.position.distance_to(previous_stop.position), stop.distance)
        self.assertEqual(previous_stop.position, stop.previous_position)
        self.assertEqual(previous_stop.departure_time, stop.previous_departure_time)
        self.assertEqual(
            stop.position.time_to(previous_stop.position, stop.previous_departure_time),
            stop.transit_time,
        )
예제 #8
0
    def test_flush(self):
        stop = jit.Stop(self.vehicle, self.position, None)

        self.assertNotIn('arrival_time', stop.__dict__)
        self.assertNotIn('departure_time', stop.__dict__)

        self.assertIsInstance(stop.departure_time, float)

        self.assertIn('arrival_time', stop.__dict__)
        self.assertIn('departure_time', stop.__dict__)

        stop.flush()

        self.assertNotIn('arrival_time', stop.__dict__)
        self.assertNotIn('departure_time', stop.__dict__)
예제 #9
0
    def test_creation(self):
        stop = jit.Stop(self.vehicle, self.position, None)

        self.assertNotIn('arrival_time', stop.__dict__)
        self.assertNotIn('departure_time', stop.__dict__)

        self.assertEqual(self.vehicle, stop.vehicle)
        self.assertEqual(self.position, stop.position)
        self.assertIsNone(stop.previous)
        self.assertEqual(self.vehicle.origin_position, stop.previous_position)
        self.assertEqual(self.vehicle.origin_earliest, stop.previous_departure_time)
        self.assertEqual(
            stop.position.time_to(self.vehicle.origin_position, stop.previous_departure_time),
            stop.transit_time,
        )
        self.assertEqual(0, stop.waiting_time)
        self.assertEqual(0, stop.load_time)
        self.assertEqual(0, len(tuple(stop.planned_trips)))
        self.assertEqual(0, len(tuple(stop.trips)))