5 mins read

Permainan lempar koin tidaklah sederhana – Beragampengetahuan

Oleh: Blog Bogumił Kamiński

Diposting ulang dari:

Dua minggu lalu saya menulis artikel tentang permainan lempar koin sederhana.
Izinkan saya melanjutkan hari ini dengan pertanyaan yang sedikit lebih sulit dan strategi penerapan yang sedikit dimodifikasi.

Postingan tersebut ditulis di bawah Julia 1.10.1, DataFrames.jl 1.6.1 dan StatsBase.jl 0.34.3.

Izinkan saya menjelaskan terlebih dahulu setting sebuah game (mirip dengan yang saya jelaskan di artikel ini).

Misalkan Alice dan Bob melempar koin secara adil n waktu. Selama setiap lemparan pertama (h) atau ekor (t) dapat muncul dengan probabilitas yang sama.

Alice menghitung berapa kali satu per satu ht pertunjukan berurutan.
Bob menghitung berapa kali satu per satu hh pertunjukan berurutan.

Pemenang permainan ini adalah orang yang melihat lebih banyak kemunculan rangkaian favoritnya.
Jadi misalnya n=3. Jika kita mendapatkannya hhh lalu Bob menang (ada 2 penampilan hhdan Alice melihat 0 kemunculan ht). Jika kita mendapatkannya hht ada seri (kedua pola terjadi satu kali). Jika kita mendapatkannya tht Alice menang.

Pertanyaannya adalah:

  • Rata-rata, siapa yang melihat lebih banyak kemunculan pola favoritnya?
  • Siapa yang paling berpeluang memenangkan permainan ini?

Mari kita coba menjawab pertanyaan-pertanyaan ini menggunakan Julia seperti biasa.

Kita mulai dengan menulis emulator permainan:

using Random

function play(n::Integer)
    seq = randstring("ht", n)
    return (hh=count("hh", seq, overlap=true),
            ht=count("ht", seq, overlap=true))
end

Fungsi ini tidak dioptimalkan untuk kecepatan (karena kita bahkan dapat menghindari penyimpanan seluruh string),
tapi menurut saya ini dengan jelas menunjukkan betapa kuatnya fungsi perpustakaan di Julia. Itu randstring fungsi
memungkinkan kita menghasilkan string acak. Dalam hal ini terdiri dari barisan acak h Dan t.
Berikutnya count memungkinkan kita menghitung jumlah kemunculan pola yang diinginkan.
Perhatikan bahwa kami menggunakan overlap=true argumen kata kunci untuk menghitung semua kemunculan pola
(secara default hanya menghitung kejadian terpisah).

Mari kita periksa hasil dari satu kali permainan:

julia> play(10)
(hh = 3, ht = 3)

Dalam kasus saya (saya tidak memilih generator nomor acak) kami melihatnya n=10 Kami memiliki urutan di sana
memiliki keduanya 3 penampilan hh Dan htJadi ini hasil imbang.

Ini adalah simulator, dengan syarat tertentu nmenjalankan permainan reps kali dan rangkum hasilnya:

using DataFrames
using Statistics
using StatsBase

function sim_play(n::Integer, reps::Integer)
    df = DataFrame([play(n) for _ in 1:reps])
    df.winner = cmp.(df.hh, df.ht)
    agg = combine(df,
                  ["hh", "ht"] .=> [mean std skewness],
                  "winner" .=>
                  [x -> mean(==(i), x) for i in -1:1] .=>
                  ["ht_win", "tie", "hh_win"])
    return insertcols!(agg, 1, "n" => n)
end

Apa yang kami lakukan dalam kode adalah sebagai berikut. Pertama kita jalankan gamenya reps kali dan mengubah satu hasil menjadi satu DataFrame.
Selanjutnya kita tambahkan kolom yang mewakili pemenang permainan. di dalam "winner" kolom 1 artinya hh menang, 0 berarti seri dan -1 berarti ht menang.
Terakhir, kami menghitung agregat berikut (menggunakan sedikit konversi bahasa; jika Anda tidak memiliki banyak pengalaman dengannya, Anda dapat melihat postingan ini):

  • mean, deviasi standar, dan skewness hh Dan ht menghitung;
  • kemungkinan itu ht menang, ada seri dan itu hh menang.

Berikut adalah hasil menjalankan kode yang diberikan reps=1_000_000 Dan n ubah dari 2 menjadi 16:

julia> Random.seed!(1234);

julia> reduce(vcat, [sim_play(n, 1_000_000) for n in 2:16])
15×10 DataFrame
 Row │ n      hh_mean   ht_mean   hh_std    ht_std    hh_skewness  ht_skewness   ht_win    tie       hh_win
     │ Int64  Float64   Float64   Float64   Float64   Float64      Float64       Float64   Float64   Float64
─────┼────────────────────────────────────────────────────────────────────────────────────────────────────────
   1 │     2  0.25068   0.249825  0.433405  0.432912     1.15052    1.15578      0.249825  0.499495  0.25068
   2 │     3  0.499893  0.499595  0.706871  0.5          1.06068    0.00162      0.374385  0.375765  0.24985
   3 │     4  0.751224  0.748855  0.902063  0.559496     1.0232     0.00312512   0.373833  0.37559   0.250577
   4 │     5  1.00168   1.00012   1.06192   0.612535     0.940274  -6.5033e-5    0.406445  0.28037   0.313185
   5 │     6  1.25098   1.2493    1.19926   0.661162     0.869559  -0.0012833    0.437276  0.233841  0.328883
   6 │     7  1.49972   1.50011   1.32213   0.707523     0.812272  -0.00190003   0.437774  0.234531  0.327695
   7 │     8  1.75064   1.74802   1.43616   0.750169     0.76024    0.00319491   0.440714  0.211252  0.348034
   8 │     9  1.99906   2.00108   1.53902   0.789413     0.715722   0.000107041  0.451749  0.189353  0.358898
   9 │    10  2.24857   2.25009   1.63787   0.829086     0.676735  -0.00207707   0.45343   0.184585  0.361985
  10 │    11  2.50092   2.50007   1.73343   0.867326     0.646397   0.000650687  0.454418  0.175059  0.370523
  11 │    12  2.74753   2.75065   1.81994   0.901478     0.621238  -0.00118389   0.458332  0.164575  0.377093
  12 │    13  2.99635   3.00128   1.90199   0.935108     0.597227   0.00212776   0.460248  0.159239  0.380513
  13 │    14  3.2469    3.25101   1.9814    0.96887      0.575535  -0.000255108  0.460817  0.154523  0.38466
  14 │    15  3.50074   3.49934   2.05981   0.998945     0.55527    0.000827465  0.461547  0.147699  0.390754
  15 │    16  3.75258   3.7513    2.13521   1.03027      0.538056   0.000772964  0.463627  0.142931  0.393442

Apa yang kita pelajari dari hasil ini?

Diatas rata-rata hh Dan ht terjadi dalam jumlah yang sama beberapa kali.
Kami melihat ini dari "hh_mean" Dan "ht_mean" kolom.
Hal ini diharapkan. Seperti dalam rangkaian dua pengamatan tertentu hh Dan ht ada kesamaan
probabilitas terjadinya (0,25) hasil hanya mengikuti linearitas nilai yang diharapkan.
Kita dapat melihatnya ketika kita meningkat n Nilai pada kolom ini meningkat kira-kira 0.25.

Namun, kemungkinannya ht kemungkinan menang yang lebih tinggi hh menang
(kecuali n=2 ketika itu sama). Hal ini dapat kita lihat dari "ht_win" Dan "hh_win" kolom.
Hal ini mengejutkan karena pola-pola ini terjadi dalam jumlah rata-rata yang sama.

Untuk memahami fenomena tersebut kita dapat melihat "hh_std", "ht_std",
"hh_skewness"Dan "ht_skewness" kolom.
Kita bisa melihatnya dengan jelas hh jumlah sampel dengan deviasi standar lebih tinggi dan untuk n>2 itu condong secara positif
(ketika ht memiliki deviasi nol).
Artinya hh jumlahnya lebih tersebar (bisa tinggi, namun bisa juga rendah).
Selain itu, kami memiliki beberapa nilai yang cukup tinggi yang diimbangi dengan banyak nilai yang lebih rendah hh tergantung pada ht (karena mean untuk kedua sampel adalah sama). Sebaliknya, ini berarti jika hh menang ht maka ia akan menang dengan margin yang lebih besar, namun hal ini lebih jarang terjadi daripada yang terlihat ht menang hh.

Alasan inti perilaku ini telah dibahas di artikel saya sebelumnya. Itu hh nilai yang dapat dikelompokkan (misalnya di hhh sampel), sementara ht Pola tidak boleh tumpang tindih.

Saya harap kuis ini menarik bagi Anda. Jika Anda tertarik dengan bagaimana properti yang kami uraikan dapat dibuktikan secara analitis, saya sarankan Anda membaca artikel ini.

Software Terbaru Saat Ini



Aplikasi yang sedang trend saat ini

object oriented programming, programming language, programming adalah, web programming, belajar programming, tournament software, software, software adalah, contoh software, apa itu software, pengertian software, aplikasi, aplikasi penghasil uang, aplikasi bokep, aplikasi video, programming

#Permainan #lempar #koin #tidaklah #sederhana

Tinggalkan Balasan

Alamat email Anda tidak akan dipublikasikan. Ruas yang wajib ditandai *