Перейти к основному содержанию

Ограничения

Правила, определяющие размещение занятий — как их добавлять, что на самом деле означает вес и почему важен порядок в списке.

Занятия определяют, что должно быть преподано. Ограничения определяют, где это может быть размещено: этот преподаватель недоступен в пятницу, эта лаборатория может вмещать только один класс одновременно, этот предмет не должен быть последним уроком дня.

Они разделены на две секции, потому что FET рассматривает их как две отдельные проблемы. Ограничения по времени касаются того, когда. Ограничения по аудиторному фонду касаются того, где.

Time constraints as FET models them, in a plain list rather than nested dialogs.
Time constraints as FET models them, in a plain list rather than nested dialogs.

Два правила, которые вы не писали

Каждое расписание содержит два ограничения, которые оно не создавало: базовое обязательное правило по времени и одно по аудиторному фонду. Это основа — ни один преподаватель или группа студентов не могут находиться в двух местах одновременно, ни одна аудитория не может быть забронирована дважды.

FET требует их, поэтому они всегда имеют полный вес и не могут быть отключены. Они отображаются в списке, помеченные как Обязательные, с заблокированным переключателем.

Вес — это вся идея

Каждое другое ограничение имеет вес от 0 до 100. Вы можете выбрать это число для некоторых типов, но не для других — правило описано ниже на этой странице.

100% — это жесткое требование. Оно должно быть соблюдено. Если это невозможно, расписания не существует.

Ниже 100% — это предпочтение, и его вес показывает, насколько сильно вы этого хотите. Правило с весом 95% будет соблюдено, если только его соблюдение не сделает что-то другое невозможным; правило с весом 40% — это легкое пожелание. Именно это позволяет расписанию быть хорошим, а не просто законным — вы можете выразить Я бы предпочел этого не делать, но сделаю, если придется, что соответствует тому, как работают реальные школы.

Список помечает каждую строку как Жесткое или Мягкое именно на этой основе, и вы можете отфильтровать список по диапазону веса, чтобы найти все, что вы сделали жестким, или все, что вы оставили как пожелание.

Большинство типов ограничений вообще не могут быть взвешены. FET ведет список типов, которые вы можете свободно взвешивать, и отклоняет любой тип, которого нет в этом списке.

⛔ Это не формальность. FET отклоняет значение дважды: его собственное диалоговое окно не сохранит его, и его генератор остановится до начала работы. Файл, содержащий один из этих типов с весом ниже 100%, не даст вам худшего расписания. Он не даст вам никакого.

Редактор отключает поле веса для этих типов и объясняет, почему. Таким образом, вы не можете ввести число, которое FET отклонит.

Еще два случая принудительно устанавливают 100%:

  • вышеупомянутые обязательные правила
  • правило предпочтительной аудитории для виртуальной аудитории, которая была привязана к конкретным реальным аудиториям — собственное требование FET. Это зависит от того, что содержит правило, а не от его типа, поэтому оно меняется при редактировании списка аудиторий.

Есть одна честная особенность. Файл, импортированный из FET, никогда не корректируется, даже если он содержит одно из этих правил с весом ниже полного. Безмолвное переписывание чьего-либо файла нарушило бы обещание, что то, что вводится, то и выводится. Поэтому список показывает сохраненный вес с указанием причины в виде всплывающей подсказки, а не число, которого нет в файле.

Добавление

Кнопка Добавить открывает окно выбора всех типов ограничений, поддерживаемых FET, сгруппированных по категориям и доступных для поиска. Их очень много, и строка поиска — это способ найти нужное — введите аудитория, или окно, или последовательно, и посмотрите, что существует.

Выбор типа открывает его редактор, который построен на основе собственного определения этого типа, поэтому поля, которые вы получаете, являются полями, которые фактически имеет этот тип. Рядом находится панель справки, описывающая, что делает ограничение. Стоит прочитать: названия ограничений лаконичны, и несколько типов являются близкими соседями, которые отличаются одним важным аспектом.

Там, где ограничению требуются временные интервалы, вы не заполняете список — вы получаете сетку дней × часов и нажимаете на ячейки. Некоторым типам требуются наборы интервалов, а не один выбор; они предоставляют вам единую сетку, где каждая ячейка окрашена в пронумерованный набор, так что вы можете видеть наборы по отношению друг к другу вместо того, чтобы поддерживать несколько списков рядом.

Каждое занятие или только некоторые?

Это сбивает с толку, и стоит четко заявить: для многих типов ограничений поля, которые называют преподавателя, дисциплину или группу, не определяют, кто затронут — они определяют, какие занятия рассматривает правило.

Они являются фильтром для занятий, а не целью. Интерпретация поля формы как это правило касается господина Смита, когда оно означает рассмотреть занятия с участием господина Смита, приводит к правилам, которые тихо ничего не делают. Панель справки для каждого типа указывает, что это такое.

Порядок

Список имеет порядок, и он не декоративный: это порядок, в котором ограничения записываются в экспортируемый файл.

Перетаскивайте строки за их маркер, чтобы расположить их, или используйте Сортировать А→Я, чтобы отсортировать весь раздел по алфавиту и сохранить это. Перетаскивание доступно только тогда, когда вы просматриваете полный список в его естественном порядке — пока поиск, сортировка или фильтр сужают его, позиция, в которую вы перетаскиваете, была бы бессмысленной. Обязательные правила управляются FET и никогда не перемещаются.

Изменение порядка можно отменить.

Работа с длинным списком

Раздел имеет панель категорий, строку поиска, фильтр активных/неактивных и ползунок диапазона веса. С их помощью вы обычно можете перейти от что-то не так с пятницей к нескольким правилам, которые ее упоминают.

Выбор строк позволяет активировать, деактивировать, установить вес или удалить одним действием. Деактивация — это полезная функция — она сохраняет правило и его настройки, выводя его из действия, что позволяет проверить, является ли правило причиной невозможности составления расписания.

Каждое ограничение в групповом действии авторизуется отдельно. Тот, кто работает по ограниченной ссылке для доступа, изменяет то, что ему разрешено изменять, а остальное остается без изменений, вместо того чтобы все действие завершилось неудачей. Групповое изменение веса также указывает на все, что оно отказалось перемещать.

Над списком редакторы получают однострочное предварительное резюме. Если оно сообщает о блокирующем конфликте, это доказательство, а не предупреждение, и стоит обратить на него внимание, прежде чем двигаться дальше.