hri2 | R Documentation |
Implements the Roth Peranson matching algorithm for the hospital/residents problem with couples as described in Roth and Peranson (1999). The function is based on an adoption of Bacchus (2018) and the SAT-solver of Sorenssen (2013).
hri2(
nStudents = ncol(s.prefs),
nColleges = ncol(c.prefs),
nSlots = rep(1, nColleges),
nCouples = ncol(co.prefs),
s.prefs = NULL,
c.prefs = NULL,
co.prefs = NULL,
randomization = "multiple",
seed = NULL,
check_consistency = TRUE,
verbose = FALSE,
...
)
nStudents |
integer indicating the number of students (in the college admissions problem)
or men (in the stable marriage problem) in the market. Defaults to |
nColleges |
integer indicating the number of colleges (in the college admissions problem)
or women (in the stable marriage problem) in the market. Defaults to |
nSlots |
vector of length |
nCouples |
integer indicating the number of couples (in the college admissions problem)
or men (in the stable marriage problem) in the market. Defaults to |
s.prefs |
matrix of dimension |
c.prefs |
matrix of dimension |
co.prefs |
matrix of dimension |
randomization |
determines at which level and in which order random lottery numbers for student priorities are drawn. The default is |
seed |
integer setting the state for random number generation. |
check_consistency |
Performs additional consicentcy checks if the preference matrices are given by characters. Defaults to |
verbose |
logical. When set to |
... |
. |
hri2
returns a list of the following elements:
matchings |
List of matched students and colleges. |
summary |
Detailed report of the matching result, including futher information on ranks. |
hri2
requires the following combination of arguments, subject to the matching problem.
nStudents, nColleges
Residence hospital problem without couples and random preferences
nStudents, nColleges, nCouples, nSlots
Residence hospital problem with couples and random preferences.
s.prefs, c.prefs, co.prefs, nSlots
Residence hospital problem with couples and given preferences.
Fahiem Bacchus, Sven Giegerich, Thilo Klein, Niklas Sorensson
Bacchus, F. (2018). Stable matching suite. GitHub repository.
Gale, D. and L.S. Shapley (1962). College admissions and the stability of marriage. The American Mathematical Monthly, 69(1):9–15.
Roth, A. E., & Peranson, E. (1999). The redesign of the matching market for American physicians: Some engineering aspects of economic design. American economic review, 89(4), 748-780.
Kojima, F., Pathak, P. A., & Roth, A. E. (2013). Matching with couples: Stability and incentives in large markets. The Quarterly Journal of Economics, 128(4), 1585-1632.
Sorenssen, N. (2013). minisat. GitHub repository.
## Example with given preferences
s.prefs <- matrix(c(4,2,3,5, 2,1,3,NA, 1,2,3,4), 4,3)
c.prefs <- matrix(rep(1:5,5), 5,5)
co.prefs <- matrix(c(rep(4,3), rep(5,3), 3,3,NA, 3,NA,3), 3,4)
res <- hri2(s.prefs=s.prefs, c.prefs=c.prefs, co.prefs=co.prefs, nSlots=rep(1,5))
res$matchings
# summary(res)
## Example with random preferences
nStudents <- 50
nColleges <- 30
nCouples <- 4
nSlots <- sample(1:nStudents, nColleges)
res <- hri2(nStudents=nStudents, nColleges=nColleges, nCouples=nCouples, nSlots=nSlots)
res$matchings
# summary(res)
## Example with characters in the preferences matrices
s.prefs <- matrix(c("Micro1", NA, NA,
"Micro2", "Micro1", "Macro",
"Macro",NA ,NA),
ncol = 3)
colnames(s.prefs) <- c('Lea', 'Mia', 'Kai')
c.prefs <- matrix(c("Niklas", "Kai", "Mia", "Anna",
"Lea", "Kai", "Anna",NA,
"Kai", "Mia", "Lea",NA),
ncol = 3)
colnames(c.prefs) <- c('Micro1', 'Micro2', 'Macro')
col1 <- c(rep("Niklas",4),rep("Anna",5))
col2 <- c(rep("Jan",4),rep("Lisa",5))
col3 <- c("Micro1","Macro","Micro1",NA,"Macro",
NA,"Micro2","Micro2","Macro")
col4 <- c("Micro2","Micro1",NA,"Macro","Macro",
"Micro1","Micro2","Macro",NA)
co.prefs <- matrix(c(col1,col2,col3,col4), ncol = 4)
res <- hri2(s.prefs=s.prefs, c.prefs=c.prefs, co.prefs=co.prefs,
nSlots=c(2,1,1))
res$matching
## Example if students are allowed to apply and be accepted by two courses
col12 <- c(rep(c(rep("Niklas",4),rep("Anna",2)),2))
col3 <- c("Micro1","Macro","Micro1","Macro","Macro","Macro")
col4 <- c("Micro2","Micro1",NA,NA,"Micro1","Micro2")
co.prefs <- matrix(c(col12,col3,col4), ncol = 4)
res <- hri2(s.prefs=s.prefs, c.prefs=c.prefs, co.prefs=co.prefs,
nSlots=c(2,1,1))
res$matching
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.