Source code for discrete_optimization.generic_tasks_tools.solvers.cpsat.multimode_scheduling

#  Copyright (c) 2026 AIRBUS and its affiliates.
#  This source code is licensed under the MIT license found in the
#  LICENSE file in the root directory of this source tree.

from abc import abstractmethod
from typing import Generic

from ortools.sat.python.cp_model import IntervalVar

from discrete_optimization.generic_tasks_tools.base import Task
from discrete_optimization.generic_tasks_tools.multimode_scheduling import (
    MultimodeSchedulingProblem,
    SinglemodeSchedulingProblem,
)
from discrete_optimization.generic_tasks_tools.solvers.cpsat.multimode import (
    MultimodeCpSatSolver,
    SinglemodeCpSatSolver,
)
from discrete_optimization.generic_tasks_tools.solvers.cpsat.scheduling import (
    SchedulingCpSatSolver,
)


[docs] class MultimodeSchedulingCpSatSolver( SchedulingCpSatSolver[Task], MultimodeCpSatSolver[Task], Generic[Task] ): """Base class for cpsat solvers dealing with scheduling problems whose tasks durations depend only on mode.""" problem: MultimodeSchedulingProblem[Task]
[docs] @abstractmethod def get_task_mode_interval(self, task: Task, mode: int) -> IntervalVar: """Get the interval variable corresponding to given task and mode.""" ...
[docs] class SinglemodeSchedulingCpSatSolver( MultimodeSchedulingCpSatSolver[Task], SinglemodeCpSatSolver[Task] ): """Base class for cpsat solvers dealing with single mode scheduling problems with fixed tasks durations.""" problem: SinglemodeSchedulingProblem[Task]
[docs] @abstractmethod def get_task_interval(self, task: Task) -> IntervalVar: """Get the interval variable corresponding to given task.""" ...
[docs] def get_task_mode_interval(self, task: Task, mode: int) -> IntervalVar: return self.get_task_interval(task=task)