İki deste destesi arasındaki ilişki?


11

Yukarıdan kart karıştırmayı simüle etmek için bir program yazdım .

Her kart numaralandırılır, takım elbise başlar CLUBS, DIAMONDS, HEARTS, SPADESve İki ila On arası, ardından Jack, Kraliçe, Kral ve As. Bu yüzden Kulüplerin İkiü 1'e, Kulüpler Üçü 2'ye sahiptir ... Kulüplerin Ası 13'tür ... Maça Ası 52'dir.

Kartların ne kadar karıştırıldığını belirleme yöntemlerinden biri, karıştırılmamış bir kartla karşılaştırılması ve kartların sırasının ilişkili olup olmadığını görmektir.

Yani, karşılaştırma için karıştırılmamış kart ile bu kartlara sahip olabilirim:

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

Pearson yöntemi ile korelasyon şöyle olacaktır: 0.6

Geniş bir kart setiyle (tümü 52) desenlerin ortaya çıktığını görebilirsiniz. Hipotezim, daha fazla karıştırmadan sonra daha az korelasyon elde edeceğinizdir.

Bununla birlikte, korelasyonu ölçmenin birçok yolu vardır.

Elimi Pearson korelasyonunda denedim ama bunun bu durumda kullanılacak doğru korelasyon olup olmadığından emin değilim.

Bu uygun bir korelasyon ölçüsü mü? Daha uygun bir önlem var mı?

Bonus Puanları Bazen sonuçlarımda bu tür veriler görüyorum:

Örnek Kart Korelasyonu

Açıkçası bazı korelasyonlar var ama ayrı 'trend çizgilerini' nasıl ölçtüğünüzü bilmiyorum?


Ne istediğinizi daha iyi anlamamıza yardımcı olmak için, "kartların sırası birbiriyle ilişkilidir" derken ne demek istediğiniz konusunda biraz daha kesin olabilirsiniz.
whuber

@whuber, OP'nin karışıklıktan önce ve sonra verilen bir kartın konumu anlamına geldiğini düşünüyorum. Örneğin, kalplerin ası önceden üstten 3. ve daha sonra 8. olabilir.
gung - Monica'yı eski durumuna getirin

Acaba "el sıkışma" ile Vikipedi "riffle shuffle" dediği anlamına mı geliyor ?
gung - Monica'yı eski durumuna getir

1
@gung bağlandığınız wikipedia sayfası hem "riffle shuffle" hem de OP'nin bahsettiği "overhand shuffle" için girişlere sahip. Link verdiğiniz linkleri okumak güzel :)
bdeonovic

1
@Pureferret Bu durumda, yeniden ifade edeceğim. Sen edilmelidir sıra korelasyon önlemleri hesaplama.
tchakravarty

Yanıtlar:


14

Bitişik kartların tüm çiftleri arasındaki yüz değeri farkının Shannon entropisini kullanarak göreceli korelasyon seviyesini (veya daha kesin olarak, artan rasgelelik seviyesini) ölçebilirsiniz .

52 kartlık rastgele karıştırılmış bir deste için bunu nasıl hesaplayacağınız aşağıda açıklanmıştır. Tüm güverte boyunca bir kez döngü yaparak ve bir çeşit histogram oluşturarak başlarsınız. Her kart konumu , nominal değer farkını hesaplayın . Bunu daha somut hale getirmek için, diyelim ki pozisyonundaki kart maça kralı ve Pozisyondaki kart kulüplerden dördü. Sonra ve ve . Sizin olsun , bu özel bir durum; tekrar destenin başına dönüp alırsınızben=1,2,...,52ΔFben=Fben+1-Fben(ben+1)benFben+1=51Fben=3ΔFben=51-3=48ben=52ΔF52=F1-F52. ' herhangi biri için negatif sayılarla karşılaşırsanız, yüz değeri farkını 1-52 aralığına getirmek için 52 ekleyin.ΔF

Her biri 1-52 arasında izin verilen bir aralığa düşen 52 çift bitişik kart için bir dizi yüz değeri farklılığı ile sonuçlanacaksınız; 52 elemanlı bir histogram (yani, tek boyutlu bir dizi) kullanarak bunların göreceli frekanslarını sayın. Histogram, güverte için bir tür "gözlenen olasılık dağılımı" kaydeder; her bölmedeki sayıları 52'ye bölerek bu dağıtımı normalleştirebilirsiniz. Böylece her birinin ayrık olabileceği bir dizi değişkeni elde olası değerler aralığı: {0, 1/52, 2/52, 3/52, vb.}, histogramın belirli bir bölmesinde kaç çift yüz değeri farkının rastgele sonuçlandığına bağlı olarak.p1,p2,...p52

Histogramı aldıktan sonra, belirli bir shuffle yinelemesi için Shannon entropisini

E=Σk=152-pkln(pk)
Sonucu göstermek için R'de küçük bir simülasyon yazdım. İlk grafik entropinin 20 shuffle yinelemesi boyunca nasıl geliştiğini göstermektedir. 0 değeri mükemmel sıralı bir desteyle ilişkilidir; daha büyük değerler, giderek daha düzensiz veya dekorla ilişkili bir desteyi belirtir. İkinci grafik, her biri soruya orijinal olarak dahil edilene benzer bir grafik içeren, karışık kart sırasını ve ilk kart sırasını gösteren 20 faset serisini göstermektedir. 2. komplodaki 20 faset, birinci komplodaki 20 iterasyonla aynıdır ve aynı zamanda renk kodlaması da aynı şekilde kodlanmıştır, böylece Shannon entropisinin hangi seviyeye denk geldiğine dair görsel bir fikir edinebilirsiniz. sıralama düzeni. Grafikleri oluşturan simülasyon kodu sonuna eklenir.

Shannon bilgi entropisi ve shuffle yinelemesi

Karıştırma sırası ve karıştırma 20 yineleme için başlangıç ​​sırası, kartların zaman içinde giderek daha az korelasyonlu ve daha rastgele dağıldığını gösterir.

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

Bu yazının neredeyse 4 yaşında olduğunu biliyorum, ama ben bir hobici kriptanalistim ve oyun kartı şifreleri üzerinde çalışıyorum . Sonuç olarak, güverteye rastgele anahtarlama için entropi kaynağı olarak güverte karıştırmayı açıklamak için bu yazıya tekrar tekrar geldim. Sonunda, güverteyi elle karıştırıp her karıştırmadan sonra güverte entropisini tahmin ederek cevabı stachyra ile doğrulamaya karar verdim.

TL; DR, güverte entropisini en üst düzeye çıkarmak için:

  • Sadece fırfır karıştırma için 11-12 karıştırmaya ihtiyacınız var.
  • Önce güverteyi kesmek, sonra fırfır karıştırmak için sadece 6-7 kes ve karıştır gerekir.

Öncelikle, stachyra'nın Shannon entropisini hesaplamak için bahsettiği her şey doğrudur. Bu şekilde kaynatılabilir:

  1. Destedeki 52 kartın her birine sayısal olarak benzersiz bir değer atayın.
  2. Desteyi karıştırın.
  3. N = 0 ila n = 51 için, (n - (n + 1) mod 52) mod 52'nin her bir değerini kaydedin
  4. 0, 1, 2, ..., 49, 50, 51 tekrar sayısını sayın
  5. Her birini 52'ye bölerek bu kayıtları normalleştirin
  6. İ = 1 ila i = 52 için -p_i * günlüğü (p_i) / günlüğü (2) hesaplayın
  7. Değerleri topla

Stachyra'nın ince bir varsayım yaptığı yerde, bir bilgisayar programında bir insan karıştırmasının uygulanmasının bir miktar bagajla gelmesidir. Kağıt tabanlı oyun kartları kullanıldıkça ellerinizdeki yağ kartlara aktarılır. Uzun bir süre boyunca, yağ birikmesi nedeniyle, kartlar birbirine yapışmaya başlayacak ve bu da karışıklığa neden olacaktır. Deste ne kadar çok kullanılırsa, iki veya daha fazla bitişik kart birbirine yapışır ve daha sık olur.

Dahası, iki kulüp ve kupa krikosu birbirine yapıştı. Karışma süreniz boyunca birbirine yapışabilirler, asla ayrılmazlar. Bu bir bilgisayar programında taklit edilebilir, ancak stachyra'nın R rutininde durum böyle değildir.

Ayrıca, stachyra bir manipülasyon değişkeni "mixprob" a sahiptir. Bu değişkeni tam olarak anlamadan, biraz kara bir kutudur. Sonuçları etkileyerek yanlış ayarlayabilirsiniz. Bu yüzden, sezgisinin doğru olduğundan emin olmak istedim. Bu yüzden elle doğruladım.

Desteyi 20 kez elle, iki farklı durumda (toplam 40 karışık) karıştırdım. İlk olarak, sağ ve sol kesimleri eşit tutmaya devam ederek karıştırdım. İkinci durumda, tüfek shuffle için eşit bir kesim yapmadan önce güverteyi kasten güverte ortasından (1/3, 2/5, 1/4, vb.) Kestim. İkinci örnekte bağırsak hissim, karıştırmadan önce güverteyi keserek ve ortasından uzak durarak, stok tüfek karıştırmasından daha hızlı bir şekilde güverteye difüzyon uygulayabiliyordum.

Sonuçlar burada. İlk olarak, düz riffle karıştırma:

Kağit karıştırma ile kart başına entropi

Ve burada güverte tüfek karıştırma ile kombine edilir:

Kesme ve riffle karıştırma ile kart başına entropi

Entropinin, stachyra ile iddianın yaklaşık 1/2 zamanında maksimuma çıkarıldığı görülmektedir. Dahası, sezgim, riffle karıştırmanın güverteye daha fazla difüzyon getirmeden önce güverteyi kasıtlı olarak ortasından uzağa doğru kesmenin doğru olduğunu söyledi. Ancak, yaklaşık 5 karışıklıktan sonra, artık çok fazla önemli değildi. Yaklaşık 6-7 karıştırmadan sonra iddianın maksimuma çıktığını, iddiamın stachyra yaptığım gibi 10-12 olduğunu görebilirsiniz. 7 karıştırmanın yeterli olması veya kör olmam mümkün olabilir mi?

Sen olabilir Google E benim verileri görmek . Bir veya iki oyun kartı yanlış kaydetmiş olabilirim, bu nedenle verilerle% 100 doğruluğu garanti edemiyorum.

Bulgularınızın da bağımsız olarak doğrulanması önemlidir. Harvard Üniversitesi Matematik Bölümü'nden Brad Mann, destedeki herhangi bir kartın öngörülebilirliği tamamen öngörülemez hale gelmeden önce bir kart destesini karıştırmanın kaç kez sürdüğünü inceledi (Shannon entropisi maksimuma çıkarıldı). Elde ettiği sonuçlar bu 33 sayfalık PDF'de bulunabilir .

Bulguları ile ilginç olan şey, aslında Persi Diaconis tarafından hazırlanan 1990 New York Times makalesini bağımsız olarak doğrulamakta ve 7 karışıklığın bir iskambil destesini tüfek shuffle ile iyice karıştırmak için yeterli olduğunu iddia etmektedir.

Brad Mann, Markov zincirleri de dahil olmak üzere karıştırmada birkaç farklı matematiksel modelden geçiyor ve şu sonuca varıyor:

Bu n = 52 için yaklaşık 11,7'dir, yani bu bakış açısına göre, gerçek bir kart destesini rastgele hale getirmek için ortalama 11 veya 12 karıştırmanın gerekli olmasını bekleriz. Bunun 7'den büyük olduğunu unutmayın.

Brad Mann stachyra'nın sonucunu bağımsız olarak doğruladı ve benim değil. Verilerime daha yakından baktım ve 7 karışıklığın neden yeterli olmadığını keşfettim. İlk önce, destedeki herhangi bir kart için bit cinsinden teorik maksimum Shannon entropisi log (52) / log (2) ~ = 5.7 bit'tir. Ancak verilerim hiçbir zaman 5 bitin üzerinde bozulmaz. Merakla, ben Python 52 element bir dizi oluşturdu, bu dizi karıştırdı:

>>> 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]

Kart başına entropinin hesaplanması yaklaşık 4.8 bit verir. Bunu bir düzine kez yapmak, ortalama olarak 4.8 ila 4.9 olmak üzere 5.2 bit ile 4.6 bit arasında değişen benzer sonuçları gösterir. Bu yüzden verilerimin ham entropi değerine bakmak yeterli değil, aksi takdirde 5 karışıklıkta iyi diyebilirim.

Verilerime daha yakından baktığımda, "sıfır kova" sayısını fark ettim. Bunlar, bu numara için kart yüzleri arasında deltalar için veri bulunmayan kovalardır. Örneğin, iki bitişik kartın değeri çıkarılırken, 52 deltanın tümü hesaplandıktan sonra "15" sonucu olmaz.

Sonunda 11-12 arasında yaklaşık 17-18 "sıfır kova" yerleştiğini görüyorum. Tabii ki, Python üzerinden karıştırılan destem ortalama 17-18 "sıfır kova", 21 ve düşük 14 ile ortalama. Neden 17-18 yerleşik sonuç, henüz açıklayamıyorum .... Ama görünüşe göre ben hem ~ 4.8 bit entropi VE 17 "sıfır kova" istiyorum.

Hisse senedi fırfır karıştırma ile, bu 11-12 karıştırır. Kes ve karıştır ile 6-7. Yani, oyun söz konusu olduğunda, kes ve karıştır tavsiye ederim. Bu, üst ve alt kartların her bir karıştırmanın güvertesine karışmasını garanti etmekle kalmaz, aynı zamanda 11-12 karıştırmadan daha hızlıdır. Seni bilmiyorum, ama ailem ve arkadaşlarımla kart oyunları oynadığımda, 12 tüfek karıştırması için yeterince sabırlı değiller.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.