Spędziłem ponad dzień, próbując osiągnąć coś, co wydaje się bardzo proste. Muszę stworzyć 300 „losowych” sekwencji, w których wszystkie liczby 1,2,3 i 4 pojawiają się dokładnie 12 razy, ale ta sama liczba nigdy nie jest używana dwa razy „z rzędu” / kolejno.
Moje najlepsze próby (tak myślę) to:
masz R próbki 48 elementów bez zamiany, sprawdź, czy są kolejne wartości z rle, a następnie użyj tylko sekwencji, które nie zawierają kolejnych wartości. Problem: prawie nie ma losowych sekwencji spełniających to kryterium, więc trwa to wiecznie.
R tworzą sekwencje bez kolejnych wartości (patrz kod).
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: tworzy sekwencje o różnych liczbach dla każdej wartości. Następnie próbowałem użyć tylko tych sekwencji z dokładnie 12 wartościami, ale to tylko sprowadziło mnie z powrotem do problemu 1: trwa na zawsze.
Musi być jakiś prosty sposób, aby to zrobić, prawda? Każda pomoc jest mile widziana!
Inną opcją jest użycie metody Monte-Carlo Łańcucha Markowa do losowego zamiany 2 liczb i przejścia do nowej próbki tylko wtedy, gdy 1) nie zamieniamy tej samej liczby i 2) nie sąsiadują żadne 2 identyczne liczby. Aby rozwiązać skorelowane próbki, możemy wygenerować wiele próbek, a następnie losowo wybrać 300 z nich:
źródło
Możesz wyciągać kolejne wartości i umieszczać je tam, gdzie nie są kolejne.
źródło