Ich habe über einen Tag lang versucht, etwas zu erreichen, das sehr einfach zu sein scheint. Ich muss 300 'zufällige' Sequenzen erstellen, in denen die Zahlen 1,2,3 und 4 alle genau 12 Mal vorkommen, aber die gleiche Zahl wird nie zweimal 'hintereinander' / nacheinander verwendet.
Meine besten Versuche (ich denke) waren:
Lassen Sie R 48 Elemente ersatzlos testen, testen Sie, ob es mit rle aufeinanderfolgende Werte gibt, und verwenden Sie dann nur die Sequenzen, die keine aufeinanderfolgenden Werte enthalten. Problem: Es gibt fast keine zufälligen Sequenzen, die dieses Kriterium erfüllen, daher dauert es ewig.
Lassen Sie R Sequenzen ohne aufeinanderfolgende Werte erstellen (siehe Code).
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)]
}
Problem: Dadurch werden Sequenzen mit unterschiedlichen Nummern für jeden Wert erstellt. Ich habe dann versucht, nur diese Sequenzen mit genau 12 von jedem Wert zu verwenden, aber das brachte mich nur zu Problem 1 zurück: dauert ewig.
Es muss einen einfachen Weg geben, das zu tun, oder? Jede Hilfe wird sehr geschätzt!
Eine andere Möglichkeit besteht darin, eine Markov-Ketten-Monte-Carlo-Methode zu verwenden, um 2 Zahlen zufällig auszutauschen und nur dann zur neuen Stichprobe zu wechseln, wenn 1) nicht dieselbe Zahl ausgetauscht wird und 2) keine 2 identischen Zahlen benachbart sind. Um korrelierte Stichproben zu adressieren, können wir viele Stichproben generieren und dann 300 davon zufällig auswählen:
quelle
Sie können aufeinanderfolgende Werte herausnehmen und dort platzieren, wo sie nicht aufeinander folgen.
quelle