Correlazione tra due mazzi di carte?


11

Ho scritto un programma per simulare una overhand carta shuffle.

Ogni carta è numerata, con seme che va CLUBS, DIAMONDS, HEARTS, SPADESe il valore da Due a dieci, quindi Jack, Regina, Re e Asso. Quindi il Two of Clubs ha un numero di 1, il Three of Clubs un 2 .... L'asso di fiori è 13 ... L'asso di picche è 52.

Uno dei metodi per determinare quanto sono mescolate le carte è quello di confrontarlo con una carta non mescolata e vedere se l'ordine delle carte è correlato.

Cioè, potrei avere queste carte, con la carta non mescolata per il confronto:

Unshuffled          Shuffled            Unshuffled number   Shuffled number
Two of Clubs        Three of Clubs      1                   2
Three of Clubs      Two of Clubs        2                   1
Four of Clubs       Five of Clubs       3                   4
Five of Clubs       Four of Clubs       4                   3

La correlazione con il metodo Pearson sarebbe: 0.6

Con un ampio set di carte (tutte e 52) potresti vedere emergere degli schemi. La mia ipotesi è che dopo più mescolamenti otterrai meno correlazione.

Tuttavia, ci sono molti modi per misurare la correlazione.

Ho provato la correlazione di Pearson ma non sono sicuro che questa sia la giusta correlazione da utilizzare in questa situazione.

È una misura di correlazione adatta? C'è una misura più adatta?

Punti bonus A volte vedo questo tipo di dati nei miei risultati:

Correlazione della carta campione

Chiaramente c'è qualche correlazione ma non so come si misurano le "linee di tendenza" separate?


Per aiutarci a capire meglio cosa vuoi, forse potresti essere un po 'più preciso su cosa intendi per "l'ordine delle carte è correlato".
whuber

@whuber, penso che l'OP significhi la posizione di una data carta prima di mescolarla e dopo. Ad esempio, l'asso di cuori potrebbe essere stato 3 ° dall'alto in alto e 8 ° dopo.
gung - Ripristina Monica

Mi chiedo se per "shuffle overhand", intendi quello che Wikipedia chiama "shuffle riffle"?
gung - Ripristina Monica

1
@gung la pagina wikipedia a cui ti sei collegato contiene sia "riffle shuffle" che "overhand shuffle" di cui parlava l'OP. È bello leggere i link a cui ti colleghi :)
bdeonovic

1
@Pureferret In tal caso, lo riformulerò. Si dovrebbe essere Computing misure di correlazione rango.
Tchakravarty,

Risposte:


14

Puoi misurare il livello relativo di correlazione (o più precisamente, il livello crescente di casualità) usando l' entropia di Shannon della differenza nel valore nominale tra tutte le coppie di carte adiacenti.

Ecco come calcolarlo, per un mazzo mischiato casualmente di 52 carte. Si inizia eseguendo il ciclo una volta attraverso l'intero mazzo e creando una sorta di istogramma. Per ogni posizione della carta , calcola la differenza nel valore nominale . Per rendere questo più concreto, diciamo che la scheda nel ° posizione è il re di picche, e la scheda nella ° posizione è il quattro di bastoni. Quindi abbiamo e e . Quando arrivi a , è un caso speciale; torni indietro di nuovo all'inizio del mazzo e prendii=1,2,...,52ΔFi=Fi+1Fi(i+1)iFi+1=51Fi=3ΔFi=513=48i=52ΔF52=F1F52. Se si ottengono numeri negativi per uno qualsiasi dei , aggiungere 52 per riportare la differenza del valore nominale nell'intervallo 1-52.ΔF

Finirai con una serie di differenze di valore nominale per 52 coppie di carte adiacenti, ognuna che cade in un intervallo consentito da 1-52; contare la frequenza relativa di questi usando un istogramma (cioè una matrice unidimensionale) con 52 elementi. L'istogramma registra una sorta di "distribuzione di probabilità osservata" per il mazzo; puoi normalizzare questa distribuzione dividendo i conteggi in ogni bin per 52. In questo modo finirai con una serie di variabili dove ognuno può assumere un discreto intervallo di valori possibili: {0, 1/52, 2/52, 3/52, ecc.} a seconda di quante differenze di valore facciale a coppie sono finite in modo casuale in un particolare contenitore dell'istogramma.p1,p2,...p52

Una volta che hai l'istogramma, puoi calcolare l'entropia di Shannon per una particolare iterazione shuffle come

E=k=152pkln(pk)
Ho scritto una piccola simulazione in R per dimostrare il risultato. La prima trama mostra come l'entropia si evolve nel corso di 20 iterazioni shuffle. Un valore di 0 è associato a un mazzo perfettamente ordinato; valori più alti indicano un mazzo che è progressivamente più disordinato o decorrelato. La seconda trama mostra una serie di 20 facce, ognuna contenente una trama simile a quella originariamente inclusa nella domanda, che mostra l'ordine delle carte mescolato rispetto all'ordine iniziale delle carte. Le 20 sfaccettature nella seconda trama sono le stesse delle 20 iterazioni nella prima trama, e sono anche codificate a colori allo stesso modo, in modo da poter avere un'idea visiva di quale livello di entropia di Shannon corrisponda a quanta casualità in l'ordinamento. Il codice di simulazione che ha generato i grafici viene aggiunto alla fine.

Entropia delle informazioni di Shannon vs. iterazione casuale

Ordine casuale contro ordine iniziale per 20 iterazioni di mescolamento, mostrando le carte che diventano progressivamente meno correlate e distribuite casualmente nel tempo.

library(ggplot2)

# Number of cards
ncard <- 52 
# Number of shuffles to plot
nshuffle <- 20
# Parameter between 0 and 1 to control randomness of the shuffle
# Setting this closer to 1 makes the initial correlations fade away
# more slowly, setting it closer to 0 makes them fade away faster
mixprob <- 0.985 
# Make data frame to keep track of progress
shuffleorder <- NULL
startorder <- NULL
iteration <- NULL
shuffletracker <- data.frame(shuffleorder, startorder, iteration)

# Initialize cards in sequential order
startorder <- seq(1,ncard)
shuffleorder <- startorder

entropy <- rep(0, nshuffle)
# Loop over each new shuffle
for (ii in 1:nshuffle) {
    # Append previous results to data frame
    iteration <- rep(ii, ncard)
    shuffletracker <- rbind(shuffletracker, data.frame(shuffleorder,
                            startorder, iteration))
    # Calculate pairwise value difference histogram
    freq <- rep(0, ncard)
    for (ij in 1:ncard) {
        if (ij == 1) {
            idx <- shuffleorder[1] - shuffleorder[ncard]
        } else {
            idx <- shuffleorder[ij] - shuffleorder[ij-1]
        }
        # Impose periodic boundary condition
        if (idx < 1) {
            idx <- idx + ncard
        }
        freq[idx] <- freq[idx] + 1
    }
    # Sum over frequency histogram to compute entropy
    for (ij in 1:ncard) {
        if (freq[ij] == 0) {
            x <- 0
        } else {
            p <- freq[ij] / ncard
            x <- -p * log(p, base=exp(1))
        }
        entropy[ii] <- entropy[ii] + x
    }
    # Shuffle the cards to prepare for the next iteration
    lefthand <- shuffleorder[floor((ncard/2)+1):ncard]
    righthand <- shuffleorder[1:floor(ncard/2)]
    ij <- 0
    ik <- 0
    while ((ij+ik) < ncard) {
        if ((runif(1) < mixprob) & (ij < length(lefthand))) {
            ij <- ij + 1
            shuffleorder[ij+ik] <- lefthand[ij]
        }
        if ((runif(1) < mixprob) & (ik < length(righthand))) {
            ik <- ik + 1
            shuffleorder[ij+ik] <- righthand[ik]
        }
    }
}
# Plot entropy vs. shuffle iteration
iteration <- seq(1, nshuffle)
output <- data.frame(iteration, entropy)
print(qplot(iteration, entropy, data=output, xlab="Shuffle Iteration", 
            ylab="Information Entropy", geom=c("point", "line"),
            color=iteration) + scale_color_gradient(low="#ffb000",
            high="red"))

# Plot gradually de-correlating sort order
dev.new()
print(qplot(startorder, shuffleorder, data=shuffletracker, color=iteration,
            xlab="Start Order", ylab="Shuffle Order") + facet_wrap(~ iteration,
            ncol=4) + scale_color_gradient(low="#ffb000", high="red"))

2

So che questo post ha quasi 4 anni, ma sono un crittanalista hobbista e ho studiato i numeri delle carte da gioco . Di conseguenza, sono tornato a questo post più e più volte per spiegare il mescolamento del mazzo come fonte di entropia per la codifica casuale del mazzo. Alla fine, ho deciso di verificare la risposta stachyra mescolando il mazzo a mano e stimando l'entropia del mazzo dopo ogni shuffle.

TL; DR, per massimizzare l'entropia del mazzo:

  • Per mescolare solo i riffle, sono necessari 11-12 shuffles.
  • Per tagliare prima il mazzo e poi mescolare, devi solo 6-7 taglia e mescola.

Prima di tutto, tutto ciò che la stachira menzionata per il calcolo dell'entropia di Shannon è corretto. Può essere ridotto in questo modo:

  1. Assegna numericamente un valore univoco a ciascuna delle 52 carte del mazzo.
  2. Mescola il mazzo.
  3. Per n = da 0 a n = 51, registra ogni valore di (n - (n + 1) mod 52) mod 52
  4. Conta il numero di occorrenze di 0, 1, 2, ..., 49, 50, 51
  5. Normalizza quei record dividendoli per 52
  6. Per i = 1 a i = 52, calcolare -p_i * log (p_i) / log (2)
  7. Somma i valori

Dove la stachira fa un'ipotesi sottile, è che l'implementazione di un riordino umano in un programma per computer arriverà con un po 'di bagaglio. Con le carte da gioco su carta, man mano che vengono utilizzate, l'olio dalle tue mani si trasferisce sulle carte. Per un periodo di tempo prolungato, a causa dell'accumulo di petrolio, le carte inizieranno a rimanere attaccate e ciò finirà nel tuo rimescolamento. Più il mazzo viene usato pesantemente, più è probabile che due o più carte adiacenti rimangano insieme e più frequentemente accadrà.

Inoltre, si supponeva che i due di fiori e una mazza di cuori fossero uniti. Potrebbero finire bloccati insieme per la durata del tuo rimescolamento, senza mai separarsi. Questo potrebbe essere imitato in un programma per computer, ma questo non è il caso della routine R di Stachyra.

Inoltre, stachyra ha una variabile di manipolazione "mixprob". Senza comprendere appieno questa variabile, è un po 'una scatola nera. È possibile impostarlo in modo errato, influendo sui risultati. Quindi, volevo assicurarmi che la sua intuizione fosse corretta. Quindi l'ho verificato a mano.

Ho mischiato il mazzo 20 volte a mano, in due casi diversi (40 shuffles totali). In primo luogo, ho solo riffle mischiato, mantenendo i tagli destro e sinistro vicini al pari. Nel secondo caso, ho tagliato deliberatamente il mazzo lontano dalla sua metà (1/3, 2/5, 1/4, ecc.) Prima di fare un taglio uniforme per il riordino del riffle. La mia sensazione di intestino nel secondo caso è stata che tagliando il mazzo prima di rimescolarlo, e stando lontano dal centro, avrei potuto introdurre la diffusione nel mazzo più rapidamente rispetto al mescolamento del fucile di serie.

Ecco i risultati In primo luogo, mischiare il fucile dritto:

Entropia per carta con mescolamento del riffle

E qui sta tagliando il mazzo combinato con il mescolamento dei riffle:

Entropia per carta con taglio e mescolamento del riffle

Sembra che l'entropia sia massimizzata in circa 1/2 del tempo del reclamo da parte di stachyra. Inoltre, la mia intuizione era corretta che tagliare il mazzo deliberatamente lontano dal centro prima, prima che il mescolamento del riffle introducesse una maggiore diffusione nel mazzo. Tuttavia, dopo circa 5 shuffles, non importava più molto. Si può vedere che dopo circa 6-7 mescolamenti, l'entropia è massimizzata, rispetto ai 10-12 come l'affermazione ha reso la mia stachira. Potrebbe essere possibile che 7 shuffles siano sufficienti o sono accecato?

Puoi vedere i miei dati su Fogli Google . È possibile che io abbia registrato una o due carte da gioco in modo errato, quindi non posso garantire una precisione del 100% con i dati.

È importante che anche i risultati vengano verificati in modo indipendente. Brad Mann, del Dipartimento di Matematica dell'Università di Harvard, ha studiato quante volte ci sarebbe voluto mescolare un mazzo di carte prima che la prevedibilità di qualsiasi carta nel mazzo fosse completamente imprevedibile (l'entropia di Shannon è massimizzata). I suoi risultati sono disponibili in questo PDF di 33 pagine .

La cosa interessante delle sue scoperte è che sta verificando in modo indipendente un articolo del New York Times del 1990 di Persi Diaconis , che afferma che 7 mischiature sono sufficienti per mescolare accuratamente un mazzo di carte da gioco tramite il riordino del riffle.

Brad Mann esamina alcuni diversi modelli matematici nel mescolare, comprese le catene di Markov, e giunge alla seguente conclusione:

Questo è circa 11,7 per n = 52, il che significa che, secondo questo punto di vista, ci aspettiamo in media 11 o 12 mescolamenti necessari per randomizzare un vero mazzo di carte. Si noti che questo è sostanzialmente più grande di 7.

Brad Mann ha verificato indipendentemente il risultato di stachyra e non il mio. Quindi, ho guardato più da vicino i miei dati e ho scoperto perché 7 shuffle non è sufficiente. Prima di tutto, l'entropia massima teorica di Shannon in bit per qualsiasi carta nel mazzo è log (52) / log (2) ~ = 5.7 bit. Ma i miei dati non superano mai molto i 5 bit. Curioso, ho creato un array di 52 elementi in Python, mescolato quell'array:

>>> import random
>>> r = random.SystemRandom()
>>> d = [x for x in xrange(1,52)]
>>> r.shuffle(d)
>>> print d
[20, 51, 42, 44, 16, 5, 18, 27, 8, 24, 23, 13, 6, 22, 19, 45, 40, 30, 10, 15, 25, 37, 52, 34, 12, 46, 48, 3, 26, 4, 1, 38, 32, 14, 43, 7, 31, 50, 47, 41, 29, 36, 39, 49, 28, 21, 2, 33, 35, 9, 17, 11]

Il calcolo della sua entropia per carta produce circa 4,8 bit. Farlo una dozzina di volte mostra risultati simili che variano tra 5,2 bit e 4,6 bit, con una media da 4,8 a 4,9. Quindi guardare il valore di entropia grezza dei miei dati non è abbastanza, altrimenti potrei chiamarlo buono in 5 shuffles.

Quando osservo più da vicino i miei dati, ho notato il numero di "zero bucket". Si tratta di secchi in cui non ci sono dati per i delta tra le facce delle carte per quel numero. Ad esempio, quando si sottrae il valore di due carte adiacenti, non si ottiene alcun risultato "15" dopo che tutti i 52 delta sono stati calcolati.

Vedo che alla fine si assesta intorno alle 17-18 "benne zero" intorno alle 11-12 shuffles. Abbastanza sicuro, il mio mazzo mischiato via Python ha una media di 17-18 "zero bucket", con un massimo di 21 e un minimo di 14. Perché 17-18 è il risultato stabile, non posso spiegare ... ancora. Ma sembra che io voglia sia ~ 4.8 bit di entropia sia 17 "zero secchi".

Con il mio riffle di scorta che mescola, sono 11-12 shuffles. Con il mio cut-and-shuffle, sono 6-7. Quindi, quando si tratta di giochi, consiglierei di tagliare e mescolare. Questo non solo garantisce che le carte superiore e inferiore si mescolino nel mazzo di ogni mischia, ma è anche semplicemente più veloce di 11-12 mischiate. Non so te, ma quando sto giocando a carte con la mia famiglia e i miei amici, non sono abbastanza pazienti per me per eseguire 12 shuffle di riffle.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.