from dataclasses import dataclass from datetime import timedelta from core.domain.map.CrnPoint import CrnPoint from core.domain.optimization.OptimizationPointType import OptimizationPointType @dataclass class OptimizationPoint: crnPoint: CrnPoint serviceTime: timedelta demand: int visitFrequency: float type: OptimizationPointType group = None @staticmethod def fromJson(**kwargs) -> 'OptimizationPoint': kwargs['serviceTime'] = timedelta(seconds=kwargs['serviceTime']) kwargs['crnPoint'] = CrnPoint.fromJson(**kwargs['crnPoint']) kwargs['type'] = OptimizationPointType(kwargs['type']) return OptimizationPoint(**kwargs) @property def isVisited(self): return self.visitFrequency > 0 and self.crnPoint.isVisited