У меня есть набор задач по проблеме удовлетворения ограничений. Для этих задач используется центрифуга. Поэтому, если они перекрываются, то они должны перекрываться полностью (я не могу добавлять задачи, пока центрифуга вращается).
Поэтому я хочу ограничить задачи, чтобы, если они перекрываются, время запуска должно быть равным, иначе они не должны перекрываться.
Если я попытаюсь:
У меня есть набор задач по проблеме удовлетворения ограничений. Для этих задач используется центрифуга. Поэтому, если они перекрываются, то они должны перекрываться полностью (я не могу добавлять задачи, пока центрифуга вращается). Поэтому я хочу ограничить задачи, чтобы, если они перекрываются, время запуска должно быть равным, иначе они не должны перекрываться. Если я попытаюсь: [code]from ortools.sat.python import cp_model import collections model = cp_model.CpModel()
# Named tuple to store information about created variables. task_type = collections.namedtuple("task_type", "start end interval")
# Add overlap constraints for i, cent_a in enumerate(centrifuge_tasks): for j, cent_b in enumerate(centrifuge_tasks): if i < j: b = model.NewBoolVar(f"centrifuge_overlap_{cent_a.interval.name}_{cent_b.interval.name}")
# Solve the model solver = cp_model.CpSolver() status = solver.Solve(model)
if status == cp_model.FEASIBLE or status == cp_model.OPTIMAL: print("Task 1 start:", solver.Value(task1_start)) print("Task 2 start:", solver.Value(task2_start)) else: print("No solution found") [/code] Он возвращает: [code]No solution found [/code] Я нашел способ обойти эту проблему, используя: [code]from ortools.sat.python import cp_model import collections model = cp_model.CpModel()
# Named tuple to store information about created variables. task_type = collections.namedtuple("task_type", "start end interval")
# Add overlap constraints for i, cent_a in enumerate(centrifuge_tasks): for j, cent_b in enumerate(centrifuge_tasks): if i < j: b = model.NewBoolVar(f"centrifuge_overlap_{cent_a.interval.name}_{cent_b.interval.name}") b_order = model.NewBoolVar(f"centrifuge_order_{cent_a.interval.name}_{cent_b.interval.name}")