J'ai passé plus d'une journée à essayer d'accomplir ce qui semble être une chose très simple. Je dois créer 300 séquences «aléatoires» dans lesquelles les nombres 1, 2, 3 et 4 apparaissent tous exactement 12 fois, mais le même nombre n'est jamais utilisé deux fois de suite / consécutivement.
Mes meilleures tentatives (je suppose) ont été:
avoir R échantillon 48 éléments sans remplacement, tester s'il existe des valeurs consécutives avec rle, puis utiliser uniquement les séquences qui ne contiennent pas de valeurs consécutives. Problème: il n'y a presque pas de séquences aléatoires qui répondent à ce critère, donc cela prend une éternité.
avoir R créer des séquences sans valeurs consécutives (voir 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)]
}
Problème: cela crée des séquences avec des nombres variables de chaque valeur. J'ai ensuite essayé d'utiliser uniquement ces séquences avec exactement 12 de chaque valeur, mais cela ne m'a ramené qu'au problème 1: prend une éternité.
Il doit y avoir un moyen facile de le faire, non? Toute aide est grandement appréciée!
Une autre option consiste à utiliser une méthode Markov Chain Monte-Carlo pour échanger 2 nombres au hasard et passer au nouvel échantillon uniquement lorsque 1) nous n'échangeons pas le même nombre et 2) pas 2 nombres identiques sont adjacents. Pour traiter les échantillons corrélés, nous pouvons générer un grand nombre d'échantillons, puis en sélectionner au hasard 300:
la source
Vous pouvez retirer des valeurs consécutives et les placer là où elles ne sont pas consécutives.
la source