library(dplyr)
library(matchingMarkets)
library(ggplot2)
result_vector <- c(NULL)
for(times in 1:1000){
student_random_n <- matrix(rep(0,400),nrow = 4)
for(i in 1:100){
student_random_n[,i] <- sample(1:10,4)
}
school_random <- matrix(rep(0,1000),nrow = 100)
for(i in 1:10){
school_random[,i] <- sample(1:100,100)
}
#match matrix
match2 <- matrix(rep(0,1000),nrow = 100)
for(i in 1:100){
for(j in 1:4){
k <- student_random_n[j,i]
match2[i,k] <- 1
}
}
for(i in 1:10){
n=0
x=1
rank <- school_random[,i]
for(j in rank){
x=x+1
if(match2[j,i]==1){
n=n+1
}
if(n>=20){
rank2 <- rank[x:100]
for(k in rank2){
match2[k,i] <- 0
}
break
}
}
}
#renew preference
student_random_n2 <- student_random_n
school_random2 <- school_random
for(i in 1:100){
for(j in 1:4){
k <- student_random_n[j,i]
if(match2[i,k]==0){
student_random_n2[j,i] <- 0
}
}
}
for(i in 1:10){
for(j in 1:100){
k <- school_random[j,i]
if(match2[k,i]==0){
school_random2[j,i] <- 0
}
}
}
for(i in 1:100){
for(j in 1:4){
if(student_random_n2[j,i]==0){
student_random_n2[,i] <- c(student_random_n2[,i][-j],0)
}
}
}
for(i in 1:10){
k <- c(NULL)
for(j in 1:100){
if(school_random2[j,i]==0){
k <- c(k,j)
}
}
a <- school_random2[,i][-k]
b <- rep(0,length(k))
school_random2[,i] <- c(a,b)
}
#DA Algorithm
res_r_r <- hri(s.prefs = student_random_n2,c.prefs = school_random2,nSlots = rep(10,10))
res2_r_r <- res_r_r$matchings
res2_r_r <- as.data.frame(filter(res2_r_r,sOptimal==1))
result <- length(res2_r_r$matching)/length(unique(res2_r_r$matching))
result_vector[times] <- result
if(times%%100==0){
print(times)
}
}
[1] 100
[1] 200
[1] 300
[1] 400
[1] 500
[1] 600
[1] 700
[1] 800
[1] 900
[1] 1000
resvdf <- data.frame(result=result_vector)
resvdf$times <- c(1:1000)
ggplot(resvdf,aes(result))+
geom_bar()+
scale_x_continuous(breaks = c(85:100))+
geom_vline(aes(xintercept=mean(result)),color="Black", size=1)+
theme_light()

LS0tCnRpdGxlOiAiUiBOb3RlYm9vayIKb3V0cHV0OiBodG1sX25vdGVib29rCi0tLQoKYGBge3J9CmxpYnJhcnkoZHBseXIpCmxpYnJhcnkobWF0Y2hpbmdNYXJrZXRzKQpsaWJyYXJ5KGdncGxvdDIpCmBgYAoKYGBge3J9CnJlc3VsdF92ZWN0b3IgPC0gYyhOVUxMKQpmb3IodGltZXMgaW4gMToxMDAwKXsKICBzdHVkZW50X3JhbmRvbV9uIDwtIG1hdHJpeChyZXAoMCw0MDApLG5yb3cgPSA0KQogIGZvcihpIGluIDE6MTAwKXsKICAgIHN0dWRlbnRfcmFuZG9tX25bLGldIDwtIHNhbXBsZSgxOjEwLDQpCiAgfQogIAogIHNjaG9vbF9yYW5kb20gPC0gbWF0cml4KHJlcCgwLDEwMDApLG5yb3cgPSAxMDApCiAgZm9yKGkgaW4gMToxMCl7CiAgICBzY2hvb2xfcmFuZG9tWyxpXSA8LSBzYW1wbGUoMToxMDAsMTAwKQogIH0KICAjbWF0Y2ggbWF0cml4CiAgbWF0Y2gyIDwtIG1hdHJpeChyZXAoMCwxMDAwKSxucm93ID0gMTAwKQogIGZvcihpIGluIDE6MTAwKXsKICAgIGZvcihqIGluIDE6NCl7CiAgICAgIGsgPC0gc3R1ZGVudF9yYW5kb21fbltqLGldCiAgICAgIG1hdGNoMltpLGtdIDwtIDEKICAgIH0KICB9CiAgCiAgZm9yKGkgaW4gMToxMCl7CiAgICBuPTAKICAgIHg9MQogICAgcmFuayA8LSBzY2hvb2xfcmFuZG9tWyxpXQogICAgZm9yKGogaW4gcmFuayl7CiAgICAgIHg9eCsxCiAgICAgIGlmKG1hdGNoMltqLGldPT0xKXsKICAgICAgICBuPW4rMQogICAgICB9CiAgICAgIGlmKG4+PTIwKXsKICAgICAgICByYW5rMiA8LSByYW5rW3g6MTAwXQogICAgICAgIGZvcihrIGluIHJhbmsyKXsKICAgICAgICAgIG1hdGNoMltrLGldIDwtIDAKICAgICAgICB9CiAgICAgICAgYnJlYWsKICAgICAgfQogICAgfQogIH0KICAKICAjcmVuZXcgcHJlZmVyZW5jZQogIHN0dWRlbnRfcmFuZG9tX24yIDwtIHN0dWRlbnRfcmFuZG9tX24KICBzY2hvb2xfcmFuZG9tMiA8LSBzY2hvb2xfcmFuZG9tCiAgCiAgZm9yKGkgaW4gMToxMDApewogICAgZm9yKGogaW4gMTo0KXsKICAgICAgayA8LSBzdHVkZW50X3JhbmRvbV9uW2osaV0KICAgICAgaWYobWF0Y2gyW2ksa109PTApewogICAgICAgIHN0dWRlbnRfcmFuZG9tX24yW2osaV0gPC0gMAogICAgICB9CiAgICB9CiAgfQogIGZvcihpIGluIDE6MTApewogICAgZm9yKGogaW4gMToxMDApewogICAgICBrIDwtIHNjaG9vbF9yYW5kb21baixpXQogICAgICBpZihtYXRjaDJbayxpXT09MCl7CiAgICAgICAgc2Nob29sX3JhbmRvbTJbaixpXSA8LSAwCiAgICAgIH0KICAgIH0KICB9CiAgZm9yKGkgaW4gMToxMDApewogICAgZm9yKGogaW4gMTo0KXsKICAgICAgaWYoc3R1ZGVudF9yYW5kb21fbjJbaixpXT09MCl7CiAgICAgICAgc3R1ZGVudF9yYW5kb21fbjJbLGldIDwtIGMoc3R1ZGVudF9yYW5kb21fbjJbLGldWy1qXSwwKQogICAgICB9CiAgICB9CiAgfQogIAogIGZvcihpIGluIDE6MTApewogICAgayA8LSBjKE5VTEwpCiAgICBmb3IoaiBpbiAxOjEwMCl7CiAgICAgIGlmKHNjaG9vbF9yYW5kb20yW2osaV09PTApewogICAgICAgIGsgPC0gYyhrLGopCiAgICAgIH0KICAgIH0KICAgIGEgPC0gc2Nob29sX3JhbmRvbTJbLGldWy1rXQogICAgYiA8LSByZXAoMCxsZW5ndGgoaykpCiAgICBzY2hvb2xfcmFuZG9tMlssaV0gPC0gYyhhLGIpCiAgfQogIAogICNEQSBBbGdvcml0aG0KICByZXNfcl9yIDwtIGhyaShzLnByZWZzID0gc3R1ZGVudF9yYW5kb21fbjIsYy5wcmVmcyA9IHNjaG9vbF9yYW5kb20yLG5TbG90cyA9IHJlcCgxMCwxMCkpCiAgcmVzMl9yX3IgPC0gcmVzX3JfciRtYXRjaGluZ3MKICByZXMyX3JfciA8LSBhcy5kYXRhLmZyYW1lKGZpbHRlcihyZXMyX3JfcixzT3B0aW1hbD09MSkpCiAgcmVzdWx0IDwtIGxlbmd0aChyZXMyX3JfciRtYXRjaGluZykvbGVuZ3RoKHVuaXF1ZShyZXMyX3JfciRtYXRjaGluZykpCiAgcmVzdWx0X3ZlY3Rvclt0aW1lc10gPC0gcmVzdWx0CiAgaWYodGltZXMlJTEwMD09MCl7CiAgICBwcmludCh0aW1lcykKICB9Cn0KCgpgYGAKCmBgYHtyfQpyZXN2ZGYgPC0gZGF0YS5mcmFtZShyZXN1bHQ9cmVzdWx0X3ZlY3RvcikKcmVzdmRmJHRpbWVzIDwtIGMoMToxMDAwKQpnZ3Bsb3QocmVzdmRmLGFlcyhyZXN1bHQpKSsKICBnZW9tX2JhcigpKwogIHNjYWxlX3hfY29udGludW91cyhicmVha3MgPSBjKDg1OjEwMCkpKwogIGdlb21fdmxpbmUoYWVzKHhpbnRlcmNlcHQ9bWVhbihyZXN1bHQpKSxjb2xvcj0iQmxhY2siLCBzaXplPTEpKwogIHRoZW1lX2xpZ2h0KCkKYGBgCgo=