我正在尝试在 R matchingMarkets::hri()
中使用 Gale-Shapely 算法,根据他们的偏好将 10 名学生 (A-J) 分配到 6 组 (1-6)每个组的容量限制。每个学生对小组的前 3 个选择进行排名,所有其他选择均为空。我的问题是
> hri(nSlots=capacities$capacity, s.prefs = student_prefs_matrix, c.prefs = null_matrix)
返回这个:
x[y] 中的错误:下标类型“list”无效
hri()
确实允许缺失值(这与类似的 matchingR::galeShapely.collegeAdmissions()
不同),所以这不是问题所在。我将我的输入与文档(第 7 页)中的示例以及所有相同类型的结构进行了比较。这是我的输入:
> student_prefs_matrix
a b c d e f g h i j
1 3 1 NA NA NA NA NA NA NA NA
2 NA NA 3 NA NA 3 3 2 2 2
3 NA NA NA NA 1 2 NA NA 1 3
4 1 3 NA 3 NA NA NA NA NA NA
5 NA 2 2 1 3 1 1 1 3 1
6 2 NA 1 2 2 NA 2 3 NA NA
> null_matrix
1 2 3 4 5 6
a NA NA NA NA NA NA
b NA NA NA NA NA NA
c NA NA NA NA NA NA
d NA NA NA NA NA NA
e NA NA NA NA NA NA
f NA NA NA NA NA NA
g NA NA NA NA NA NA
h NA NA NA NA NA NA
i NA NA NA NA NA NA
j NA NA NA NA NA NA
> capacities$capacity
[1] 2 2 2 2 1 1
任何人都可以提示此错误可能意味着什么吗?我给出的唯一列表(向量)是用于 nSlots
的,它应该是一个列表。或者,有没有更好的方法来解决这个匹配问题?我知道 Gale Shapely 适用于 2 边匹配,但我认为如果我总是寻找“学生最佳”匹配,这无论如何都可以工作。谢谢您的帮助!这是我第一次在这里发布问题。
最佳答案
要解决您的问题,请确保以适当的格式提供首选项列表。在 https://matchingmarkets.org/hri.html 查看 matchingMarkets 包的文档有关这方面的几个例子。
让我们看一个例子,有 7 名学生,2 所大学,每所大学有 3 个名额,并给出如下偏好列表:
> s.prefs <- matrix(c(1,2, 1,2, 1,NA, 1,2, 1,2, 1,2, 1,2), 2,7)
> c.prefs <- matrix(c(1,2,3,4,5,6,7, 1,2,3,4,5,NA,NA), 7,2)
> hri(s.prefs=s.prefs, c.prefs=c.prefs, nSlots=c(3,3))
> s.prefs
[,1] [,2] [,3] [,4] [,5] [,6] [,7]
[1,] 1 1 1 1 1 1 1
[2,] 2 2 NA 2 2 NA NA
> c.prefs
[,1] [,2]
[1,] 1 1
[2,] 2 2
[3,] 3 4
[4,] 4 5
[5,] 5 NA
[6,] 6 NA
[7,] 7 NA
对于您指定的首选项列表,存在两个问题。最明显的问题是您的 college_prefs_matrix
目前表明没有一所大学接受任何学生。因此,不存在稳定的匹配。另一个问题在您的 student_prefs_matrix
中。在您的示例中,学生 a
发现大学 4
、6
和 1
可接受(按此顺序)。因此偏好列表应该是:
> student_prefs_matrix
a b c d ...
[1,] 4 1 6 5 ...
[2,] 6 5 5 6 ...
[3,] 1 4 2 4 ...
[4,] NA NA NA NA ...
[5,] NA NA NA NA ...
[6,] NA NA NA NA ...
关于R matchingMarkets::hri() x[y] 错误:无效下标类型 'list',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43700914/