微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

具有调度约束和优化的 Hackathon 团队分配

如何解决具有调度约束和优化的 Hackathon 团队分配

我正在帮助创建一个有大约 1000 名全球参与者的虚拟黑客马拉松团队。在注册时,参与者将被要求从六个时隙列表(格林威治标准时间)中选择三个首选的黑客攻击时间。我想组建 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,3     |
| E        | CX            | SF          | 5,1,3     |
| F        | Engineering   | SF          | 2,5,4     |
| G        | Engineering   | SF          | 1,3     |
| H        | Product       | Bangalore   | 2,5     |
| I        | Product       | SF          | 1,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 帖子随机重启爬山。我的问题是:

  • 这属于哪一类问题,以便我可以进行更明智的研究?
  • 还有比爬山更好的解决方案吗?
  • 如果爬山确实是要走的路,我如何在效用函数中表示共享时隙的硬约束?

解决方法

这是一个相对简单的算法,它应该适用于所有输入,除了最反常的输入。

  1. 两个时隙{1,2,3,4,5,6}有15种组合。对于每个组合,构建一个 bin 参与者(所以 15 个 bin)。遍历所有参与者并将他们添加到他们兼容的每个 bin 中(因此每个参与者可以在多个 bin 中)。

    对于每个 bin 还初始化一个空列表,其中包含从该 bin 构造的组。

  2. 选择组列表最短的 bin,如果是平局,则参与者最少(忽略参与者少于 3 的 bin)。使用任何贪婪的软约束算法从该垃圾箱中选择一个由 3 名参与者组成的“多样化”(就部门/办公室而言)组。

    将此组添加到所选 bin 的组列表中,并从所有 bin 中删除所选参与者。

    重复此步骤,直到所有 bin 的成员都剩下 2 个或更少为止(或者直到构建的组不够多样化,尽管这有更高的失败机会)。

  3. 此时您只剩下几个未分组的参与者。以某种贪婪的方式将它们一个一个地添加到任何兼容的大小为三的组中(例如,只需选择使多样性得分最大化的组)。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。