根据人们的偏好对人进行分组的算法

时间:2017-09-11 06:43:28

标签: algorithm grouping

我需要一种算法,根据他们的偏好对表中的人进行分组。每个人都将表格从最喜欢的表格排序到最差。 例如,如果共有4个表,则一个人投票如下:

Alice{ table1 => 2, table2 => 4, table3=>1, table4=>3}

这意味着她希望被放在table3上并且真的不喜欢table2

条件是:

  • 每个人都必须在一个小组中
  • 所有群组必须拥有相同数量的人(承受1)
  • 最大化全球幸福'

试图解决这个问题我将幸福定义为积分,如果他们将被放在他们喜欢的桌子上,每个人将有幸福10,他们的第二选择有6个,第三个有4个,最后一个有1个。

happiness[10, 6, 4, 1]

全球幸福是每个人幸福的总和。

1 个答案:

答案 0 :(得分:1)

解决此问题的一种方法是使用整数线性编程。 ILP有很多解决方案,例如SCIP(http://scip.zib.de/)。

每个分配都有二进制变量,即 如果将i分配给表j,则xij = 1(并且0未分配)。

您的目标是最大化总幸福感,即权重总和乘以xij

现在你已经写了一些条件来确保:

  • 每个人都被分配到一个表,即每个i的xij总和等于一。
  • 所有表格的人数相似(您可以事先确定可预定的人数范围),即每个j的xij部分在定义的范围内。