Как правильно обеспечить соблюдение последовательных ограничений временных интервалов в программном обеспечении расписанPython

Программы на Python
Ответить
Anonymous
 Как правильно обеспечить соблюдение последовательных ограничений временных интервалов в программном обеспечении расписан

Сообщение Anonymous »

Описание проблемы
Я пытаюсь добавить ограничение к моей задаче оптимизации планирования, чтобы гарантировать, что сгенерированные расписания имеют последовательные часы (т. е. отсутствие промежутков между временными интервалами в течение дня). Однако текущая реализация не работает должным образом и возвращает INFEASIBLE, несмотря на наличие достаточных ресурсов (учителей, классов и предметов). Ниже приведен проблемный раздел моего кода:

Код: Выделить всё

# C - Problematic - Timetable needs to be consecutive
for lvl_idx, level in enumerate(self._problem.levels):
for sub_idx, subject in enumerate(self._problem.subjects):
if self._problem.curriculum_contains(level, subject):
required_slots = self._problem.curriculum_time_request(level, subject)

for day, (start, end) in self._problem.slots_per_day().items():
for tch_idx in self._all_teachers:
for loc_idx in self._all_locations:
for slt_start in range(start, end - required_slots + 1):
sequence = [
self._assignment[lvl_idx, sub_idx, tch_idx, slt_start + offset, loc_idx]
for offset in range(required_slots)
]

for i in range(len(sequence) - 1):
self._model.Add(sequence[i] == sequence[i + 1])

Что я пробовал
  • Добавлено больше учителей, удалены некоторые уровни (расписания занятий, а не помещения), с никакого успеха. Переменные, похоже, не являются проблемой.
  • Изменено положение этого ограничения в коде, чтобы увидеть, влияет ли порядок на результаты.
  • Удалены другие ограничения, чтобы изолировать проблему.
Контекст
Я создаю программное обеспечение, используя OR-Tools для генерации расписания средних школ Румынии.
Я работаю с слегка измененная версия примера SAT по школьному расписанию OR-Tools: школьное расписание OR-Tools.
Вот некоторая справочная информация, которая может быть полезна:
  • В Румынии учащиеся распределяются по определенным классам (комнатам), а учителя перемещаются между этими классами. Есть исключения, например, по предметам IT&C (информационные технологии и коммуникации), нам нужно ходить в классы. со специальным оборудованием как компьютерные классы.
  • Перерывы между уроками минимальны, обычно около 10 минут. (никаких перерывов между часами вообще не требуется!)
Здесь вы найдете мой полный код для репликации проблемы вместе со всеми соответствующими переменными.< /p>
Спасибо.

Подробнее здесь: https://stackoverflow.com/questions/792 ... int-progra
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»