Как правильно обеспечить соблюдение последовательных ограничений временных интервалов в программном обеспечении расписан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 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Проблема с объединением наборов данных временных рядов для согласованных временных интервалов
    Anonymous » » в форуме Python
    0 Ответы
    32 Просмотры
    Последнее сообщение Anonymous
  • Проблема с объединением наборов данных временных рядов для согласованных временных интервалов
    Anonymous » » в форуме Python
    0 Ответы
    26 Просмотры
    Последнее сообщение Anonymous
  • Как правильно использовать Union C ++ на встроенном программном обеспечении
    Anonymous » » в форуме C++
    0 Ответы
    8 Просмотры
    Последнее сообщение Anonymous
  • Как правильно использовать Union C ++ на встроенном программном обеспечении
    Anonymous » » в форуме C++
    0 Ответы
    4 Просмотры
    Последнее сообщение Anonymous
  • Реализация CRC32C SSE 4.2 в программном обеспечении
    Anonymous » » в форуме C++
    0 Ответы
    40 Просмотры
    Последнее сообщение Anonymous

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