Я потратил больше суток, пытаясь выполнить то, что кажется очень простым делом. Мне нужно создать 300 «случайных» последовательностей, в которых числа 1, 2, 3 и 4 появляются ровно 12 раз, но одно и то же число никогда не используется дважды «подряд» / последовательно.
Мои лучшие попытки (наверное) были:
R выборки 48 элементов без замены, проверьте, есть ли последовательные значения с rle, затем используйте только последовательности, которые не содержат последовательных значений. Проблема: почти нет случайных последовательностей, которые соответствуют этому критерию, поэтому это занимает вечность.
пусть R создает последовательности без последовательных значений (см. код).
pop<-rep(1:4,12)
y=c()
while(length(y)!=48)
{
y= c(y,sample(pop,48-length(y),replace=F))
y=y[!c(FALSE, diff(y) == 0)]
}
Проблема: это создает последовательности с различными числами каждого значения. Затем я попытался использовать только те последовательности, каждая из которых содержит ровно 12 значений, но это только вернуло меня к проблеме 1: занимает навсегда.
Должен быть какой-то простой способ сделать это, верно? Любая помощь очень ценится!
Другой вариант - использовать метод Марковской цепочки Монте-Карло, чтобы произвольно поменять 2 числа и перейти к новой выборке, только когда 1) мы не меняем местами одно и 2) нет двух одинаковых чисел рядом. Чтобы обратиться к коррелированным выборкам, мы можем сгенерировать много выборок и затем случайным образом выбрать 300 из них:
источник
Вы можете извлекать последовательные значения и размещать их там, где они не являются последовательными.
источник