У меня есть классическая проблема с расписанием, состоящая из классов переменных (~ 100), комнат (20), терминов (8) и дней недели (5).
Чтобы упростить задачу, ниже приведены сокращенныеограничения.
День составляет 9 часов.
Некоторые уроки являются обязательными для студентов, а уроки обязательными с условиями 1,3,5,7 (и для 2,4,6,8) не должны накладываться друг на друга.
Классы имеют разный вес в часах, некоторые - 2 часа, некоторые - 3.
Некоторые занятия должны проводиться в определенных комнатах.
Не может быть двух лекций в одном классе одновременно.
Я собираюсь использовать модуль ограничений python logilabs.И я знаю, что разумный выбор переменных и доменов приведет к меньшему времени для решения проблемы.Проблема в том, что я никогда раньше не занимался программированием с ограничениями, и мне было трудно создать проблему, чтобы выяснить, с чего и с чего начать.Например:
Я могу установить ограничение, например «нет двух классов с одной комнатой, один и тот же день может перекрывать временной интервал друг друга».Или начните с того, что «ни в одной комнате не может быть зарезервировано более 9 часов в один и тот же день», а затем переходите к сокращенной области решения.Я оцениваю (не пытался), что первое ограничение займет гораздо больше времени, чем другое.Но это также требует (я предполагаю) изменения переменных и областей решения или перестройки меньшей проблемы.Я уже немного потерян в переменных, доменах, интервалах, реализациях и т. Д.
Короче говоря, мне нужны некоторые указатели для построения проблемы, области решения, выбора переменных и т. Д.
Спасибо
ОБНОВЛЕНИЕ
Используя пакет logilab-ограничений, я сделал базовое приложение и загрузил его в github