Source code for discrete_optimization.generic_tasks_tools.precedence_scheduling

from __future__ import annotations

import logging

from discrete_optimization.generic_tasks_tools.base import (
    Task,
)
from discrete_optimization.generic_tasks_tools.precedence import (
    PrecedenceProblem,
    PrecedenceSolution,
)
from discrete_optimization.generic_tasks_tools.scheduling import (
    SchedulingProblem,
    SchedulingSolution,
)

logger = logging.Logger(__name__)


[docs] class PrecedenceSchedulingProblem(PrecedenceProblem[Task], SchedulingProblem[Task]): """Scheduling problem with precedence constraints on tasks.""" ...
[docs] class PrecedenceSchedulingSolution(PrecedenceSolution[Task], SchedulingSolution[Task]): """Solution for scheduling problem with precedence constraints. Can implement `check_tasks_order` by using start and end times. """ problem: PrecedenceSchedulingProblem[Task]
[docs] def check_tasks_order(self, task1, task2) -> bool: """Check whether task1 is performed before task2. Args: task1: task2: Returns: True if task1 is finished before task2 starts, False else. """ return self.get_end_time(task1) <= self.get_start_time(task2)