r - 将 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 的人配对,理想情况下,正如另一位用户提到的那样,最大限度地提高配对兼容性。每个人都会得到一对。
任何帮助表示赞赏!
解决方案
这不是一个具体的答案。但是在这个空间里写起来更容易。您有一个经典的分配优化问题。这些问题可以使用 R 中的包来解决。您必须为可行的配对分配偏好权重。因此,例如 14-3 可以分配 8 分,14-9;7分,14-8;6分...14-6;1分。请注意,3-14 不会被分配任何分数,因为虽然 14 喜欢 3,但 3 不喜欢 14。任何 xy、yx 配对的偏好分数可以是 xy 偏好的权重加上 yx 偏好的权重。
优化模型将选择加权对以最大化所有配对之间的总满意度。
如果你有 300 人,我想不出可以简单实现的替代算法。
推荐阅读
- javascript - 如何使主循环中的“i”反映该主循环内的内部循环运行的时间
- python - 使用 setup.py 安装自定义 python 包
- mspec - 对于 Machine.Specifications 套件,有没有办法在全球范围内运行代码?
- python - CPython _io_open_impl 和 _Py_open_impl 之间的区别
- python - 无法理解 tweepy 分页
- linux - 在linux中删除文件名中带有特殊字符的文件
- javascript - 如何从组件中获取变量并将其用于另一个组件或文件 React
- javascript - 输入值更改后,jQuery 序列化不适用于克隆表单
- javascript - 圆形左上角
- python - 在 Python 中调用 Oracle 存储过程时出现错误“不支持 dict 类型的值”