Я построил игрушечную модель, которая может вычислять то, что вы хотите. Предполагая, что есть n сторон и k проблем, ниже я предоставляю код для вычисления выбора стороны для одной стороны. Следует обобщить код для всех сторон. Вам просто нужно добавить петлю. Я оставил это как упражнение для вас =):
n = 4 # example with n=4
k = 3 # k = 3 issues
party_position = matrix(runif(k*n),nrow=n, ncol=k) # matrix with party positions on each issue
med = apply(party_position,2 , median) # compute median of each column
gen.pos = function(party_position, median=med, k) {
if ( k ==1 ) { # case base, i.e., when all previous decisions were rbinom == 0, there is only one platafform left. Pick that one.
issue.announcing = which.max(abs(party_position[1,]-med))
return(issue.announcing)
}
else {
dif=abs(party_position[1,]-med) # difference between party position and median
value=min(dif) # value gets minor difference
pos=which.min(dif) # position in party_position matrix of value
decision = rbinom(1, 1, 1- value) # decision with probability 1 - difference of minimum value and median
if (decision < 1) { # if rbinom < 1, i.e, equals zero
k=k-1 # set new k, so recursive function can work
party_position[1,-pos] # it'll drop of matrix minimum value found before, so we can pick new minimum value
return (gen.pos(party.position, median=med, k)) } # call the function with new matrix
else { #i.e. if decision was equal 1, just pick pos as issue plataform
issue.announcing = pos
return (issue.announcing)
}
}
}
Функция "gen.pos" найдет платформу для первой партии (первая строка). Я думаю, вам просто нужно применить "для", чтобы генерировать позиции для всех сторон. Обратите внимание, что функция рекурсивная, и именно поэтому я потратил на это свое время: мне действительно нравится писать рекурсивные функции!
пс .: Проверьте мою функцию. Казалось, что это работает здесь, и я думаю, что это правильно, но, как говорят некоторые люди, «доверяй, но проверяй».
ps.2: функция возвращает позицию (т. Е. Столбец) для первой стороны. Если вам нужен номер, а не позиция, используйте Juts,
position.final = gen.pos(Party_position, med, k)
plataform = party_position[1,position.final]