首页 > 解决方案 > 将 R 中的人与 Loop 配对

问题描述

我正在尝试在 R 中创建笔友对。问题是我不知道如何循环它,以便一旦我将一个人配对,那个人和他们的配对就会从池中被淘汰,并且循环继续直到每个人都有一双。

我已经对他们配对的标准进行了评分,并为每个人找到了他们与另一个人配对的程度的分数。我认为将每对得分加在一起,以了解这对整体的好坏(不完美,但足以满足这些目的)。然后我找到了每个人的理想匹配,并将这些匹配按最挑剔的人排序到最不挑剔的人(基本上是最佳配对分数最低的人到最佳配对分数最高的人)。我还发现了他们的第 2-8 位最佳匹配(数据中可能会有大约 300 人)。

最佳匹配测试如下:

   indexed_fake apply.fin_fake..1..max. X1 X2 X3 X4 X5 X6 X7 X8
14           14                     151  3  9  8  4 10 12  2  6
4             4                     177  9  5  8  7 11  3 10 12
9             9                     177  4 11  3  6 10  7 12  5
5             5                     179  7  4 11  3 12 10  8  5
10           10                     179 12 10  2  9  3  5  6  4
13           13                     182  8  1 12 11 10  5  3  2
1             1                     185  7  1  3  8  6 13  2 11
7             7                     185  1 12  5  7  4  6  9 11
3             3                     187 12  3  8  5  9  1  2 10
8             8                     190  8 12 13  3  4 11  1  6
2             2                     191  6 12 11 10  3  4  5  1
6             6                     191  2 11  7  1  6  9 10  8
11           11                     193 12  6  9  5  2  8 11  4
12           12                     193 11  3  8  7 12 10  2  5

X1-X8 列是第一列中所列人员的 8 对最佳配对。在此示例中,理想情况下,每个人都将与排名前 8 的人配对,理想情况下,正如另一位用户提到的那样,最大限度地提高配对兼容性。每个人都会得到一对。

任何帮助表示赞赏!

标签: rloopssorting

解决方案


这不是一个具体的答案。但是在这个空间里写起来更容易。您有一个经典的分配优化问题。这些问题可以使用 R 中的包来解决。您必须为可行的配对分配偏好权重。因此,例如 14-3 可以分配 8 分,14-9;7分,14-8;6分...14-6;1分。请注意,3-14 不会被分配任何分数,因为虽然 14 喜欢 3,但 3 不喜欢 14。任何 xy、yx 配对的偏好分数可以是 xy 偏好的权重加上 yx 偏好的权重。

优化模型将选择加权对以最大化所有配对之间的总满意度。

如果你有 300 人,我想不出可以简单实现的替代算法。


推荐阅读