Шаг 7 — Автоматическое формирование расписания
Когда занятия созданы, вы размещаете их на сетке. Составление расписания на практике — это цикл, а не однократное действие:
- несколько занятий размещаются вручную — чтобы закрепить неподвижные занятия или заблокировать жёсткие ограничения (занятия с точными датами, экзамены, ручные привязки);
- запускается формирование (всего расписания или его части), чтобы алгоритм разместил остальное с учётом ограничений;
- остаётся подправить детали — исправить частный случай, переместить занятие, передумать;
- и всё это может повторяться: расписание формируется заново по мере работы (добавились занятия или — в режиме календаря — нужно обработать интервал дат, набор классов или подразделений).
Можно также всё сделать полностью вручную, без алгоритма. Ручному размещению (разместить, переместить, заблокировать — по одному или сразу несколько) посвящена отдельная страница: Ручное размещение. Общий порядок работы описан на странице Обзор модуля.
Эта страница посвящена автоматическому формированию.
Формирование размещает занятия, но не создаёт их
Алгоритм работает с уже существующими занятиями. Он подбирает для них временной слот и кабинет. Преподаватели — те, кого вы назначили на курс: алгоритм не заменяет их и не назначает других, он лишь отказывается от слота, в котором они недоступны.
Отсюда порядок действий:
- укажите дисциплину и её объём для каждого класса: это курс, строка с количеством часов;
- создайте занятия на основе этого объёма на шаге Распределить часы и создать занятия — именно их алгоритм и размещает;
- затем запустите формирование.
Если открыть вкладку формирования до создания занятий, кнопка окажется неактивной: размещать нечего, а на экране проверки отображается сообщение Не определено ни одного занятия.
Почему кнопка формирования неактивна
Кнопка отражает диагностику, показанную прямо над ней, на вкладке «Проверка». Возможны три ситуации:
- Нет оповещений или есть только предупреждения — кнопка остаётся активной, но выглядит приглушённо. Предупреждение (жёлтое) сообщает о риске, а не о невозможности; синее оповещение носит информационный характер.
- Блокирующее оповещение (красное) — основная кнопка отключена. Расчёт всё же можно запустить через Дополнительные опции, на ваш страх и риск: алгоритм не увидит проблему, о которой сообщает оповещение, и всё равно построит расписание, а за результат отвечаете вы. Лучше устранить оповещение.
- Критическое оповещение — отключены и кнопка, и меню опций. Не хватает данных, без которых расчёт теряет смысл: нет ни одного занятия, нет ни одного пригодного класса (класс пригоден, когда у него есть площадка и занятия), либо у используемой площадки не задана временная сетка. Так бывает, если в учебном заведении ещё не создано ни одной площадки: без площадки ни один класс не пригоден.
В последнем случае статистика Количество настроенных классов становится красной.
Каждое оповещение сформулировано в списке понятным языком, с указанием соответствующего класса, площадки или преподавателя. О шкале серьёзности и о том, как её читать, см. Конфликты и диагностика; об устранении причин, по которым формирование не завершается, см. Диагностика неудачного формирования расписания.
Доступность
Автоматическое формирование доступно для недельных, циклических и календарных расписаний. В режиме календаря занятия размещаются на реальные даты, а опции позволяют ограничить диапазон дат, для которого выполняется формирование.
Подготовка
Прежде чем нажать Сформировать расписание:
- откройте вкладку «Формирование» (в календарном расписании она называется «Проверка») и проверьте общую статистику,
- устраните блокирующие оповещения (красные) — см. предыдущий раздел о неактивной кнопке,
- просмотрите предупреждения (жёлтые) — они не блокируют формирование, но сообщают о риске (слишком ограниченная доступность, предельная вместимость и т. д.).
На экране также указано:
- количество созданных занятий и количество размещённых,
- введённые объёмы часов и нагрузка преподавателей,
- группы, назначенные хотя бы на один курс (чтобы заметить забытые или неиспользуемые группы).
Запуск
Нажмите Сформировать расписание. Omniscol запускает отдельную параллельную вычислительную среду. Длительность зависит от размера расписания, количества ограничений и выбранных опций. Управлять очередью на стороне учебного заведения не нужно; подготовка часто занимает около десяти секунд, после чего начинается сам расчёт.
Расчёт ограничен двадцатью минутами, но на практике этого с большим запасом хватает: расписание примерно из 200 курсов часто готово примерно за двадцать секунд — сам алгоритм работает почти мгновенно, дольше всего запускается машина, — а около 600 курсов обрабатываются примерно за минуту. Если очень крупное учебное заведение приближается к этому пределу, команда Omniscol по запросу может увеличить мощность вычислительной машины.
Опции формирования
По умолчанию формирование размещает все созданные, но ещё не размещённые занятия. Оно может также перемещать уже размещённые занятия, если это улучшает расписание. Заблокированные занятия сохраняют своё положение.
Меню опций позволяет, в частности:
- управлять кабинетами, выбрав один из трёх вариантов: оптимизированное назначение (по умолчанию), только проверка или полное игнорирование кабинетов;
- выбрать только некоторые классы или некоторые дисциплины;
- ограничить календарное расписание целевым временным окном;
- игнорировать уже назначенные кабинеты или текущее размещение;
- назначить только кабинеты, не пересчитывая всё размещение;
- запустить быстрое формирование без оптимизации;
- разрешить гибкое размещение по частям слотов сетки, если в расписании используются части слотов.
Расширенные параметры оптимизации позволяют также сократить «окна», не допускать двух занятий по одной дисциплине в один день, равномерно распределять занятия, задавать минимальное или максимальное число часов либо выбирать, сколько дней в неделю преподаватели присутствуют в учебном заведении. Практика различается от страны к стране: во Франции некоторые учебные заведения стремятся сократить число дней присутствия преподавателей, а в других условиях, наоборот, могут предпочесть распределить эти дни, например, чтобы выделить время на другие задачи на площадке.
Опции, специфичные для режима календаря
В режиме календаря расширенные опции позволяют ограничить формирование целевым временным окном, более коротким, чем весь диапазон расписания. Это удобно, если нужно сформировать только часть года: пробный расчёт на один месяц, поэтапное построение семестра или продолжение уже подготовленного периода.
Вторая важная опция — уплотнение дней для классов. По умолчанию алгоритм стремится скорее к равномерной нагрузке по доступным дням; если вы формируете лишь часть занятий года, из-за этого занятия могут искусственно растянуться. Уплотнение позволяет запросить группировку:
- в начале окна;
- в конце окна;
- без предпочтения начала или конца, но с максимально плотными днями.
Периодичность в режиме «календарь»: сначала типовая неделя
В расписании в режиме «календарь» каждое занятие датируется по отдельности. Однако некоторые программы устроены иначе: занятие в понедельник в 10:00 по возможности повторяется каждую неделю. Класс объявляет такие занятия пунктом «Повторяющиеся занятия»; курс этого класса исключается из повторения пунктом «Вне периодичности». Ничего не угадывается: без этой настройки формирование размещает каждое занятие на его дату, как бы ни были похожи занятия между собой. Политика распределения необязательна (см. политика распределения): периодичность работает и сама по себе, а явная политика задаёт ритм, который алгоритм должен соблюдать по мере возможности.
Как только в расписании появляется хотя бы один класс с периодичностью, формирование проходит в три этапа.
-
Сначала типовая неделя. Занятия объединяются в серии. Возможны два случая:
- у курса задана «политика распределения часов»: алгоритм собирает занятия так, чтобы соблюсти это распределение внутри серий, которые могут нести точное пожелание о периодичности;
- в остальных случаях серии угадываются по сходству: та же дисциплина, та же группа, тот же характер — сопоставимые продолжительность и преподаватели. Группы в рамках одного элемента «разделение класса» остаются раздельными, поскольку две группы, занимающиеся одновременно, занимают два слота. Единственное занятие в своём роде серии не образует.
Затем каждая серия ищет себе место на условной неделе, как в расписании типа «недельное». Формирование считывает там ритм, заданный политикой: столбец «Периодичность» правила говорит «два раза в неделю» или «раз в три недели»; значение «Автоматический» позволяет вывести ритм из числа занятий, отнесённого к учебным неделям. Курс, который проходит четыре раза в неделю, занимает четыре слота типовой недели. Эта теоретическая неделя уже учитывает календарные ограничения: зафиксированные занятия, недоступность в определённые даты или слоты. Серии могут также занимать один и тот же слот, сменяя друг друга.
-
Развёртывание на календаре. Найденная неделя затем повторяется на интервале дат класса: на его «временно́е окно», если оно задано, иначе на всём периоде расписания. Каждое занятие серии получает там свою неделю, день и слот. Конфликты проверяются по датам; если точное место уже занято, алгоритм выбирает ближайшее решение.
-
Обычное календарное формирование завершает работу — уже без периодичности. То, что типовая неделя не смогла датировать, не навязывается: такие занятия присоединяются к пакету неповторяющихся занятий, который алгоритм размещает следом.
Как работает формирование
Понимание логики алгоритма помогает предвидеть, что он разместит, чем пожертвует и как им управлять. Он преследует две цели в таком порядке:
- Разместить всё — безусловный приоритет: расставить все занятия с соблюдением жёстких ограничений.
- Оптимизировать качество — когда всё размещено, сократить «окна», сгладить дни, учесть пожелания.
Алгоритм начинается с чистого состояния (заблокированные занятия сохраняют место, остальные размещаются заново) и размещает занятия от самого трудного к самому лёгкому. Трудность определяется главным образом узостью ограничений: курс, преподаватель которого свободен лишь один раз в неделю во второй половине дня, или блок из четырёх часов, который нужно уместить целиком, идёт первым. При равной трудности алгоритм чередует дисциплины и обрабатывает более редкие раньше более распространённых, чтобы шансы у каждой были равными.
Если всё не помещается: жертвование занятиями
Если расписание слишком ограничено, чтобы разместить всё, алгоритм не сдаётся: он выбирает наименьший набор занятий, которые нужно оставить без места, чтобы остальное уместилось, и оптимизирует это неполное расписание. Принесённые в жертву занятия остаются на панели стикеров, ожидающих размещения. Поскольку сортировка отдаёт приоритет самому трудному и самому редкому, уступают скорее лёгкие и многочисленные занятия: 5-й час дисциплины с большим объёмом, а не единственный час редкой дисциплины.
Вы сохраняете контроль над этим выбором: блокируйте занятия, которые никогда не должны двигаться, — они размещаются первыми и не приносятся в жертву, — и ослабляйте избыточные ограничения (открытые слоты, доступность) там, где это возможно, чтобы всё поместилось.
Жёсткие и мягкие ограничения
Не все ограничения равнозначны:
- Жёсткие — не нарушаются никогда: занятость (преподаватель, класс, группа, кабинет или ресурс не используются дважды в одно и то же время), периоды, отмеченные как Недоступно (чёрным) у преподавателя, класса, кабинета, курса или группы, отсутствие свободного кабинета или ресурса в слоте, закрытые дни, заблокированные позиции и совмещения.
- Мягкие — всё остальное; алгоритм может нарушить их ценой штрафа, чтобы разместить всё: периоды, отмеченные как Нежелательно (красным — их стоит избегать, но они не запрещены), и пожелания по оптимизации (компактность, равномерность, группировка по дням и т. д.). Ограничение с высоким приоритетом весит больше, чем с низким, но ни одно из них не блокирует формирование. Алгоритм также точечно идёт на послабления (размещение по частям слотов сетки и т. п.), когда это цена за то, чтобы не жертвовать ни одним занятием.
Проверка без оптимизации
Опция быстрого формирования (без оптимизации) запускает облегчённый проход, который отвечает главным образом на один вопрос: всё ли помещается? Это удобно, чтобы проверить осуществимость конфигурации, прежде чем тратить время на полную оптимизацию.
Результат
- Зелёный баннер: формирование прошло успешно. Занятия запрошенного охвата размещены, результат можно просмотреть.
- Красный баннер: полного решения найти не удалось. Лучшее из вычисленных расписаний остаётся доступным для просмотра, а неразмещённые занятия отображаются на панели стикеров для диагностики.
См. Диагностика неудачного формирования расписания.
Консолидировать или создать копию
После успешного формирования Omniscol предлагает два варианта:
- Консолидировать результат в текущее расписание (размещение заменяет существующее).
- Создать копию (текущее расписание остаётся нетронутым, оптимизированный результат становится новым расписанием).
Если вы планируете формировать расписание повторно позже (например, потому что строите его поэтапно), не консолидируйте: иначе уже размещённые занятия станут отправной точкой для нового формирования.
Заблокировать занятие перед повторным формированием
Чтобы заблокировать уже размещённое занятие, воспользуйтесь замком позиции. Следующее формирование не переместит его, а подстроит вокруг него остальные занятия. Это удобно для «неподвижных» занятий (занятия внешних преподавателей с фиксированным временем, экзамены с точными датами, ручные привязки и т. д.). Подробности — на странице Блокировка занятия: массовая блокировка, влияние на диагностику (красный → оранжевый), поведение алгоритма.
Экспорт расписания в JSON
Кнопка экспортирует только текущее расписание в формате JSON. Это не полный экспорт учётной записи, описанный на странице Импорт и экспорт.
Типичные случаи:
- сохранить копию черновика или сценария перед удалением;
- архивировать промежуточное состояние перед серьёзной перестройкой;
- передать именно это расписание команде Omniscol в рамках поддержки.
Как и в случае полного экспорта учётной записи учебного заведения в JSON, повторный импорт не является стандартным сценарием, свободно доступным на стороне учебного заведения.
Что дальше
Завершающий шаг: Публикация расписания.
Инструкция
Запустить автоматическое формирование
-
Автоматическое формирование размещает занятия на сетке с соблюдением десятков ограничений (доступность, вместимость, совмещения, специализации, чередование). Доступно для недельных, циклических и календарных расписаний.
-
Проверьте вкладку «Формирование». На ней отображается общая статистика: созданные и размещённые занятия, введённые объёмы часов и нагрузка преподавателей, блокирующие оповещения (красные) и предупреждения (жёлтые — предупреждают, но не блокируют).
-
Устраните красные оповещения перед запуском. Пока они остаются, формирование запустить нельзя — разве что принудительно через меню «Дополнительные опции», но делать это не рекомендуется. Жёлтые нужно оценить, но они не мешают формированию.
-
При необходимости задайте опции формирования: кабинеты (назначать, только проверить или игнорировать); целевые классы или дисциплины; быстрое формирование без оптимизации; игнорирование уже назначенных кабинетов или текущих позиций. В режиме календаря расширенные опции позволяют также ограничить временное окно формирования и уплотнить занятия в начале периода, в конце периода или без предпочтения.
-
Нажмите Сформировать расписание. Обработка идёт в фоновом режиме; на экране отображается состояние формирования, а когда результат готов, его можно просмотреть.
-
Сохраните, когда оценка вас устраивает. Расписание размещено. Дальше: просмотрите возможные конфликты, вручную подправьте частные случаи (см. Ручное размещение), затем опубликуйте.
-
Что дальше: Публикация расписания.