Source code for jinete.algorithms.heuristics.insertion.strategies.sampling

from __future__ import (
    annotations,
)

import logging
from random import (
    Random,
)
from typing import (
    TYPE_CHECKING,
)

from .....models import (
    Trip,
)
from .....utils import (
    sample_index_pairs,
)
from .abc import (
    InsertionStrategy,
)

if TYPE_CHECKING:
    from typing import (
        Iterable,
        List,
        Union,
    )
    from .....models import Route

logger = logging.getLogger(__name__)


[docs]class SamplingInsertionStrategy(InsertionStrategy):
[docs] def __init__(self, seed: int = 56, *args, **kwargs): super().__init__(*args, **kwargs) self.random = Random(seed)
[docs] def compute( self, route: Route, trips: Union[Trip, Iterable[Trip]], count: int = 128, *args, **kwargs ) -> List[Route]: if not isinstance(trips, Trip): trips = tuple(trips) routes = list() for i, j in sample_index_pairs(len(route.stops), count, self.random): routes += super().compute(route, trips, i, j, *args, **kwargs) return routes