Ho 400 palline, di cui 100 rosse, 40 gialle, 50 verdi, 60 blu, 70 viola, 80 nere. (le palle dello stesso colore sono identiche)
ho bisogno di un algoritmo di mescolamento efficiente, in modo che dopo il mescolamento, le palle siano in un elenco e
Le 3 palline consecutive non sono dello stesso colore. ad esempio, non posso avere "rosso, rosso, rosso, giallo ...."
E tutte le permutazioni hanno probabilità "ugualmente" di verificarsi. (beh, se il compromesso tra efficienza e imparzialità è abbastanza buono, non mi dispiace più efficienza di imparzialità).
ho provato ad adattare Fisher-Yates-Knuth, ma il risultato non è l'ideale.
Perché Fisher-Yates non è abbastanza bravo? Mentre FY adotta la trasformazione inversa di Monte Carlo. E la distribuzione dell'output tratta le sfere dello stesso colore in modo diverso, ovvero genererebbe un risultato distorto per le mie esigenze.
E il pensiero ingenuo sarebbe quello di filtrare / retrocedere tutte le cattive permutazioni dell'intero spazio. Quando la restrizione è molto forte, diciamo, se abbiamo solo 300 palline e 100 delle quali sono rosse, allora ci saranno troppi inseguimenti / insuccessi prima di ottenere una permutazione appropriata.
Quindi, in definitiva, vorrei poter iterare attraverso tutte le buone permutazioni. Tuttavia, poiché il numero di permutazioni valide è troppo elevato, posso campionarne solo in modo casuale. Voglio che la caratteristica statistica di "alcuni" assomigli il più possibile alla popolazione.