将人们分成团队以获得最大的满足感

时间:2010-05-16 20:24:03

标签: algorithm knapsack-problem satisfiability

只是一个好奇的问题。还记得在课堂小组中,教授会将人分成一定数量的小组(n)吗?

我的一些教授会列出一个与n人愿意合作的人和n一个人不想与每个学生一起工作的人,然后神奇地变成一组{ {1}}学生可以与他们喜欢的人匹配,避免与他们不喜欢的人合作。

对我来说,这个算法听起来很像背包问题,但我想我会问你对这类问题的解决方法是什么。

编辑:发现an ACM article描述与我的问题完全相同的内容。为了似曾相识,请阅读第二段。

4 个答案:

答案 0 :(得分:5)

对我而言,这听起来更像某种clique问题。

我看到问题的方式,我设置了以下graph

  • 顶点是学生
  • 如果以下两项内容都符合要求,则两名学生将通过边缘连接:
    1. 两个学生中至少有一个想和另一个学生一起工作。
    2. 这两个学生中没有一个不想和另一个学生一起工作。

然后将图形划分为大小为n的集团。 (假设学生人数可被n整除)

如果这是不可能的,我可能会让边缘上的第一个约束滑动,并且只要两个人都没有明确表示他们不想与另一个人合作,就会在两个人之间产生边缘。 / p>

至于有效解决这个问题的方法,我不知道,但这有望让你更接近对这个问题的一些见解。

答案 1 :(得分:3)

你可以很容易地将其建模为一个聚类问题,你甚至不需要定义一个空间,你实际上可以只定义距离:

如果他们俩想要一起工作,那么让两个人非常接近。 如果其中一个想要与另一个合作,请关闭。 中等距离,如果只是冷漠。 如果任何一方不想与另一方合作,那就远了。

然后你可以找到群集,但是。然后拆分任何过大的集群,确信集群中的人都可以很好地协同工作。

答案 2 :(得分:1)

这个问题可能是暴力强迫的,因此我的方法首先是暴力破解它,然后在我得到更好的想法时修复它。

答案 3 :(得分:0)

您可以使用几种算法。一个很好的例子是所谓的稳定婚姻问题",它有一个完美的解决方案。你可以在这里阅读更多相关信息:

http://en.wikipedia.org/wiki/Stable_marriage_problem

稳定的婚姻问题只适用于两组人(婚姻案件中的男/女)。如果你想形成一对你可以使用一个变化,稳定的室友问题。在这种情况下,您可以创建对,但每个人都来自一个池。

但是你要求一个团队(我将其转化为每队2人)。在这种情况下,你可以让每个人填写他们最好的最差匹配,然后运行