鉴于由于 covid-19 导致的新法律规定,我孩子的日托和所有相关的父母都不堪重负,我们需要制定一个时间表,说明何时可以照顾哪个孩子。
鉴于每个孩子所需的护理时间(如下),我们需要一种算法来优化以下内容:
- 最少的总联系人/固定组。如果孩子们见面,最好留在那个小组,不要看到其他小组的孩子。
- 虽然第 1 点更重要,但第二个优先事项是减少每组的人数,或者应该将其表述为每个孩子遇到的不同孩子的最少数量
- 更不重要的是:减少总接触时间。
(也许还有其他要求,我忽略了?)
需求具有以下性质(时间跨度和类型):
| 案子 | 孩子 | 时间跨度 | 类型 |
|---|---|---|---|
| (1) 固定时间,必填 | 1 | 星期一,8:30 - 13:00 | 必需的 |
| (2) 固定时间,很高兴有 | 1 | 周二,8:30 - 13:00 | 很高兴有 |
| (见(1)) | 1 | 周二,13:00 - 16:00 | 必需的 |
| (见(1)) | 1 | 星期四,8:30 - 13:00 | 必需的 |
| (见(1)) | 2 | 周一 8:30 - 13:00 | 必需的 |
| (3) 灵活日期,必填 | 2 | 其他任意两天 8:30 - 13:00 | 必需的 |
| (4) 灵活的日期,很高兴有 | 2 | 任何一天 13:00 - 16:00 | 很高兴有 |
| (5) Flexibel 日期时间,必填 | 3 | 3小时 | 必需的 |
| (6) Flexibel 日期时间,很高兴拥有 | 3 | 额外 3 小时 | 很高兴有 |
| ... | ... | ... |
- 必需 = 孩子必须有日托
- 很高兴拥有 = 需要日托,但不是必需的。例如,如果孩子 1 在周一和周四遇到孩子 2 和 3,那么在周二早上也可以遇到相同的孩子,但如果这是一组完全不同的孩子,那么这是没有意义的。
- 所有提供的时间跨度必须保持在一个连续的片段中(这意味着 3 小时不能分成多个时段)。
附加信息
只有一个房间可用。
总共有15个孩子。
如果一个解决方案比另一个解决方案好得多,那么在少数情况下违反“必需”要求是可以的。在少数情况下,我们也许可以为父母找到不同的解决方案。因此,该算法应该包含一个参数,例如
maxAllowedViolations- 假设它是3,它应该比较解决方案比没有错误的解决方案好多少。需求是每周提供的,并且可能每周都在变化。我只提前一周知道需求。因此,理想的分组可能每周都会发生变化,但最好将上周的分组作为指导,因为电晕有大约 7 到 10 天的潜伏期。
照顾者每周接受两次 covid-19 检测,而孩子们则没有。
我不在乎算法是用哪种语言或伪代码方式,但我会尝试以基于 Web 的格式实现该算法,以便其他日托中心也可以使用它。