Я работаю над PHP-приложением для компании по уходу на дому. У них есть x количество опекунов, которые планируются каждую неделю, чтобы посещать дома х количество пользователей (клиентов). Каждый пользователь службы имеет набор "расписание", когда они должны быть посещены, включая периоды плюс продолжительность посещения в минутах.
Так, например, пользователь службы может иметь следующее расписание.
AM Lunch Tea Late Night Respite
Mon 30m - 30m 60m - -
Tue 30m - - 60m - -
Wed 20m 25m 30m 60m 120m -
Thu - - 30m - - -
Fri 30m 25m - - - -
Sat - - - - - -
Sun 20m 25m - - - -
Эти периоды в настоящее время хранятся в базе данных в следующем формате:
Table: Service_user_schedules
id service_user_id day period duration
Каждую неделю ухаживающие заполняют таблицу того, в какие периоды они могут работать. Эти данные затем вводятся в систему и сохраняются в базе данных в следующем формате:
Table: Carer_available_shifts
id carer_id day period
Теперь проблема заключается в том, что мне нужно создать контроллер, который будет принимать эти данные и автоматически назначать опекунов для обслуживания пользователей в зависимости от доступности, которую они поставили. Это должно быть доступно для редактирования, чтобы в случае, когда никто не был доступен для конкретного опекуна, пользователь может выбрать тот, который недоступен, и они все равно будут добавлены в базу данных.
В настоящий момент у меня есть беспорядок петель, функций и эха, чтобы проверить, доступны ли опекуны для определенного пользователя службы и сделать его доступным для редактирования.
Кто-нибудь выполнял такую задачу раньше, и если да, то нашел ли вы простой способ ее завершить. Я бы предпочел сделать его объектно ориентированным, чтобы я мог повторно использовать один и тот же общий класс, но на данный момент у меня полная потеря!
EDIT: теперь я добавил щедрость к этому вопросу. В настоящее время я изучаю генетические алгоритмы (что-то, о чем я даже не слышал, не говоря уже об использовании!) В качестве решения этой проблемы, основанной на некоторых ответах. Я хотел бы знать, использовали ли кто-либо из вас другие методы решения этого типа проблемы или если вы использовали генетические алгоритмы, не могли бы вы дать менее общее объяснение того, как вы применили их к этой конкретной проблеме.
Я бы предположил, что это препятствие будет довольно распространено во многих приложениях типа "укомплектование персоналом", и я удивляюсь, как мало обсуждается это в любом месте в Интернете!
UPDATE
Для этого конкретного проекта, я думаю, что я могу использовать метод базы данных, как описано Tak, но, возможно, в будущем будет преобразован в использование GA, когда у меня будет больше времени разработки.
Сейчас я немного потеряю, кто наградит щедрость. duedl0r приложил много усилий к его (или ее) ответу. Это дало мне отличное представление о мире генетического алгоритма - методе решения проблем, с которым я никогда раньше не сталкивался. Однако ответ, предоставленный Tak, дает решение, которое я буду использовать для этого проекта. Поэтому я наградил щедрость Таку.