【发布时间】:2021-01-12 06:25:14
【问题描述】:
我正在帮助创建一个虚拟黑客马拉松团队,有大约一千名全球参与者。在注册时,参与者将被要求从六个时间段(格林威治标准时间)列表中选择三个首选的黑客时间。我想组成 3 人(或 4 人,还有余数)的团队,但有以下限制:
- 团队必须有 3(或 4)名成员
- 每个团队成员必须分享至少 2 次首选的破解时间
- 理想情况下,每个团队都应该有多个部门和办公室
我的注册调查输入数据如下所示:
| Name | Department | Office | Time Slots |
| -------- | --------------| ------------| ------------|
| A | Engineering | Bangalore | 1, 3, 6 |
| B | Engineering | SF | 2, 4, 5 |
| C | Sales | Amsterdam | 1, 6, 2 |
| D | Engineering | NYC | 1, 6, 3 |
| E | CX | SF | 5, 1, 3 |
| F | Engineering | SF | 2, 5, 4 |
| G | Engineering | SF | 1, 6, 3 |
| H | Product | Bangalore | 2, 4, 5 |
| I | Product | SF | 1, 4, 3 |
我想要的输出是一个 csv 文件,例如:
| Team Name | Team Members | Shared Time Slots |
| --------- | -------------- | ------------------|
| Team A | A, C, G | 1, 6 |
| Team B | B, F, H | 2, 4 |
| Team C | D, E, I | 1, 3 |
由于我愿意用寻找最佳解决方案来换取更易于实施的解决方案,因此我正在考虑根据this 帖子随机重启爬山。我的问题是:
- 这属于什么一般类型的问题,以便我可以进行更明智的研究?
- 有比爬山更好的解决方案吗?
- 如果爬山确实是要走的路,我如何在效用函数中表示共享时隙的硬约束?
【问题讨论】:
-
一个直接的简化:两个时隙有 15 种组合。对于每个参与者,构造长度为 15 的二进制向量(适合 2 字节整数),指示参与者是否与特定的时隙组合兼容。然后检查一组特定的参与者是否有共同的时隙偏好,只需计算他们的向量的二进制 AND 并检查它是否非零。
标签: algorithm grouping mathematical-optimization