from abc import ABC, abstractmethod from typing import Callable, Optional from core.domain.map.RouteMatrix import RouteMatrix from core.domain.optimization.Optimization import Optimization from core.domain.optimization.OptimizationPoint import OptimizationPoint from core.domain.optimization.OptimizationResultData import OptimizationResultData from core.domain.optimization.OptimizationSolution import OptimizationSolution from core.domain.optimization.OptimizationVehicle import OptimizationVehicle from core.domain.optimization.TransportMode import TransportMode from core.types.Logger import Logger class OptimizationService(ABC): @abstractmethod def vrpOptimization( self, optimization: Optimization, optimizationVehicles: list[OptimizationVehicle], optimizationPoints: list[OptimizationPoint], routeMatrices: dict[TransportMode, RouteMatrix], solutionCallback: Callable[[int, list[OptimizationSolution], bool, list[OptimizationPoint], Optional[dict[int, float]]], None], terminationCallback: Callable[[], bool], log: Logger, initialOptimizationResultData: Optional[OptimizationResultData]): pass