我正在为家庭护理公司的PHP应用程序工作.他们每周都有x个护理人员安排参加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
现在的问题是,我需要创建一个控制器,该控制器将采用这些数据,并根据所提供的可用性自动分配给服务用户的照顾者.这需要可编辑,以便在没有人可用于特定护理的情况下,用户可以选择不可用的,并且仍将被添加到数据库.
目前,我有一些循环,功能和回声,以检查照顾者是否可用于特定的服务用户,并使其可编辑.
有没有人以前执行过这样的任务,如果是这样,你是否找到一个简单的方法来完成它.我更喜欢使其面向对象,所以我可以重用同一个泛型类,但是在这一刻,我完全失去了!
提前谢谢了.
编辑:我现在已经为这个问题添加了一个赏金.我目前正在研究遗传算法(我从来没有听说过更不用说使用!)作为解决这个问题的一些答案.我想知道,如果有人使用其他方法来解决这种类型的问题,或者如果您使用了遗传算法,那么可以提供一个不太普遍的解释,说明如何将它们应用于这个特定的问题.
我会假设这个障碍在许多“人员配置”类型的应用程序中是相当普遍的,并且对网络上的任何地方的讨论几乎感到惊讶!
UPDATE
对不起,迟到的回复家伙.感谢您的详细答案,他们肯定让我对GA的使用感兴趣.对于这个特定的项目,我想我可能最终使用Tak所描述的数据库方法,但是当我有更多的开发时间被搁置时,可能会转换为使用GA.现在肯定是我的“学习”列表,你的答案给了我一个伟大的开始!干杯!
对于谁给予赏金,我现在有点失落. duedl0r将很多努力放在他(或她)的答案中,我很感激.它给了我很好的洞察遗传算法的世界 – 一个我从来没有遇到的问题解决方法.但是,提供的答案提供了我将用于此项目的解决方案.所以我已经把赏金给了德.
谢谢大家.
Table schedules_shifts id service_user_schedules_id carer_available_shifts_id
现在,一个功能可以将可用的护理人员与所需的计划插槽相匹配并填充表格…
* Fetch service_user_schedules for the next week * For each service_user_schedules row * Fetch carer_available_shifts that match the schedule slot * For each carer_available_shift row * If results * Fetch schedules_shifts rows where carer_available_shifts_id is already used * If no results * Insert a row in the schedules_shifts table for each carer * Otherwise carer is busy,do nothing and continue * If no results,flag for review or trigger e-mail to manager,or other action * Trigger e-mail or save log of completion for peace of mind
现在,新桌子可以提供护理人员赛程,而不需要重新分配护理人员的时间.然而,它确实符合多个护理人员的班次与时间表.这可能是一个功能!按原样离开他们,并在schedule schedule上添加一个已确认的列,以便经理可以手动分配工作,或照顾者可以自愿,或自动将第一个匹配标记为已确认,并将其他行保留为替代,以防第一个照顾者无法进行它.
这一切都可以由每周一次的cron触发,或者当最后的职业更新他们周的时间表时.可能是第一个因为用户经常是不可预测的.
现在,自动化数据在一个表中,您可以打开它进行编辑.创建一个正常的管理控制台,您可以根据需要更改在schedule_shifts中的行,或者标记不同行“已确认”.
将其翻译成泛型类不应该太困难 – 只是使用通用术语的问题.太晚了,我想不出来了:)
可以在PHP数组中进行所有数据筛选,而不是上面创建的数据库舞蹈,但是我认为sql更适合于通过数据排序和修改.
遗传算法听起来很有趣,如果你有时间调查他们^ _ ^
希望有帮助?