Passei mais de um dia tentando realizar o que parece ser uma coisa muito simples. Eu tenho que criar 300 sequências 'aleatórias' nas quais os números 1,2,3 e 4 aparecem exatamente 12 vezes, mas o mesmo número nunca é usado duas vezes 'seguidas' / consecutivamente.
Minhas melhores tentativas (eu acho) foram:
tenha amostra R de 48 itens sem substituição, teste se há valores consecutivos com rle e use apenas as sequências que não contêm valores consecutivos. Problema: quase não há seqüências aleatórias que atendam a esse critério, por isso leva uma eternidade.
faça R criar sequências sem valores consecutivos (consulte o código).
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)]
}
Problema: isso cria sequências com números variáveis de cada valor. Tentei usar apenas aquelas seqüências com exatamente 12 de cada valor, mas isso só me trouxe de volta ao problema 1: leva uma eternidade.
Deve haver alguma maneira fácil de fazer isso, certo? Qualquer ajuda é muito apreciada!
Outra opção é usar o método Monte-Carlo da Cadeia de Markov para trocar dois números aleatoriamente e passar para a nova amostra somente quando 1) não estivermos trocando o mesmo número e 2) nenhum 2 números idênticos forem adjacentes. Para lidar com amostras correlacionadas, podemos gerar muitas amostras e selecionar aleatoriamente 300 delas:
fonte
Você pode retirar valores consecutivos e colocá-los onde não são consecutivos.
fonte