Я работаю над приложением, в котором я должен автоматически планировать рабочие места для членов по скользящему графику. Я не очень хорошо объяснять правила, так вот некоторые данные, чтобы помочь:
Позиций: титульная работы, с правилами , такие как понедельники и среды еженедельно.
Категории: Набор позиций
групп: Другой набор позиций. Позиции в одной и той же группе не могут быть назначены на тот же день
членов: пользователи , назначенные на должности на определенную дату.
Для каждой даты в месяце, члены назначаются на должность (как в порядке возрастания). Если член назначается на должность в одной категории, в следующий раз, положение в той же категории придумывает, следующий член в алфавитном порядке (или в начале списка) получает назначение, например.
Пользователи: М1, М2, М3, М4
Позиции в категории С1: Р1, Р2, Р3
пользователей в положении P1: M1, M2, M3, M4 -
членов в положении Р2: M1, M2, M3
членов в положении Р2: М1, М3, M4
Если M1 предназначен для P1, P2, если будет дальше, M2 будет назначен. Дополнительный слой сложности вводится где, если P3 будет дальше вместо M3 получает назначение. Система должна следить за тем, что М2 «пропускаются» и назначить M2 ряда, если имеется, то назначить М4 рядом, или подождать, пока он не попадет в положение, в котором M2 доступен (это становится дополнительно усложняется, когда есть много «пропущено 'членов).
Член также будет пропущена, если он указал, что он не будет доступен на эту дату. Система должна уделять приоритетное внимание пропуска членов, как-то идентифицировать их, когда они приходят, а затем перейти к следующему логическому лицу в списке. Пропуск также относится к группам из-за даты столкновений.
У меня уже есть временное [и грязное] решение, которое я уже не понимаю, хотя у меня есть много комментариев в нем, объясняющих каждый шаг. Ее недостатки в работе с пропущенными членами.
Если вы собираетесь кодировать это как бы вы об этом? Я реализую это в PHP, но псевдокод будет работать.













