【问题标题】:Hackathon team assignment with scheduling constraints and optimization具有调度约束和优化的 Hackathon 团队分配
【发布时间】: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


【解决方案1】:

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

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

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

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

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

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

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

【讨论】:

  • 这很完美,而且更容易实现,谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-05-03
  • 1970-01-01
  • 2015-01-23
  • 1970-01-01
  • 2016-02-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多