PTT推薦

Re: [閒聊] 機率大師請進

看板C_Chat標題Re: [閒聊] 機率大師請進作者
arrenwu
(不是綿芽的錯)
時間推噓 7 推:7 噓:0 →:6

※ 引述《smart0eddie (smart0eddie)》之銘言:
: 神域的泳裝活動
:
: 無課可以拿114顆抽獎球
: 課長可以拿202顆抽獎球
:
: 一池30球 一顆彩球
: 取後不放回
: 出彩球可換池
: 彩球有未知機率獲取號碼牌
: 4顆彩球必定獲取號碼牌
:
: 30個號碼各自對應獎項
: 其中只有一個是正妹的泳裝造型
:
: 試求無課與課長有泳裝穿的機率
:
: 這策劃的腦子在想甚麼
:
: → smart0eddie: 好問題 08/01 19:31: → smart0eddie: 可能要分兩種模式算 08/01 19:31: → smart0eddie: 照常理應該是連四顆空的才會保 08/01 19:32: → smart0eddie: 抽球來抽號碼⊂(・ω・*⊂) 08/01 19:34

那就按照「連四顆空才會保」,也就是你如果有2顆空的彩球,第3顆抽到號碼,
你手頭所有的彩球就會被清空。

然後還有一個機率不太清楚的是─抽到彩球後,得到號碼的機率是多少?

這個要用手得出一個closed form 還真是滿痛苦的
https://i.imgur.com/fzuv898.jpg

圖https://i.imgur.com/fzuv898.jpg?e=1666682720&s=Mg4q5o157EluWyZCKlgY9A, 機率大師請進


所以我寫了個蒙地卡羅的模擬程式,是假設彩球給號碼的機率在 5%~50% 之間不等的結果

這是無課的結果 (橫軸是每個彩球給號碼的機率, 縱軸是抽到泳裝的機率)
https://i.imgur.com/EgsCxcD.jpg

圖https://i.imgur.com/EgsCxcD.jpg?e=1666655873&s=trZ6TQeMGCRfiFmKDxECKA, 機率大師請進

這是有課的結果
https://i.imgur.com/3xytaez.jpg
圖https://i.imgur.com/3xytaez.jpg?e=1666676210&s=bE38TPVqdsmn8e4-NJYLwg, 機率大師請進

圖上淺紫色的部份是 95% 信賴區間的範圍

這結果看起來還真不是太舒服


不過我也不太確定我程式有沒有寫錯,所以我把python的程式碼附在下面:

import matplotlib.pyplot as plt
from concurrent.futures import ProcessPoolExecutor
import numpy as np
import random

n_trial = 640000

p_values = np.linspace(.05,.5,20)

def prob_win(p):
results = []
for _ in range(n_trial):
result = 0
balls_left = 202
balls_in_pool = 30
color_balls_failed = 0

while balls_left > 0:
balls_left -= 1
if random.randint(1,balls_in_pool) == 1:
# got a colored ball
color_balls_failed += 1
if color_balls_failed == 4 or random.random() < p :
# got a number
color_balls_failed = 0
if random.randint(1,30) ==1:
result = 1
break
# reset the pool
balls_in_pool = 30
else:
balls_in_pool -= 1
results.append(result)

return np.mean(results)


if __name__ == '__main__':
with ProcessPoolExecutor(max_workers=12) as executor:
p_results = [res for res in executor.map(prob_win, p_values)]


z = 1.96
p_results = np.array(p_results)

upper_bnd = (n_trial*p_results + z**2/2 +
z*np.sqrt(z**2/4+n_trial*p_results*(1-p_results)) ) / (n_trial+z**2)
lower_bnd = (n_trial*p_results + z**2/2 -
z*np.sqrt(z**2/4+n_trial*p_results*(1-p_results)) ) / (n_trial+z**2)

print(p_results)

plt.plot(p_values, p_results,'-o')
plt.fill_between(p_values,lower_bnd, upper_bnd,color='b', alpha=.1)

--
角卷綿芽給予炭治郎的建議
https://i.imgur.com/0mPdESk.jpg

圖https://i.imgur.com/0mPdESk.jpg?e=1666647944&s=tx74Plf8rQjMMK6HbezEIw, 機率大師請進
https://i.imgur.com/Ts4dBjy.jpg
圖https://i.imgur.com/Ts4dBjy.jpg?e=1666653236&s=fRO9TQkLqhdPlZlq-sI6fQ, 機率大師請進

--

※ PTT留言評論
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 165.225.243.22 (美國)
PTT 網址

showwhat208/01 20:40推、推!

smart0eddie08/01 20:43課長才 20% 好坑

那個20% 還是在彩球給號碼的機率是 50% 的前提

harryron908/01 20:44這寫法是彩球出的號碼會重複的情況 看起來沒啥問題

comedyc8c8c808/01 20:49第一張圖後面的背景484色色的阿?

comedyc8c8c808/01 20:49我需要連結好研究機率

https://i.imgur.com/bASITXX.jpg

圖https://i.imgur.com/bASITXX.jpg?e=1666697311&s=GMc4PFNJKRFvo589efYRoQ, 機率大師請進

這張很像no胖

a2998581608/01 20:55可以直接random.randint(1,30)來當這次的池要花幾顆來

a2998581608/01 20:55拿到彩球 剩餘球數不足的話就不進後面拿彩球的計算

a2998581608/01 20:57第一顆拿到的機率跟第三十顆拿到的機率都是1/30

a2998581608/01 21:04然後跑平行隨機的時候最好先call random.seed()重新產

a2998581608/01 21:04生種子,不然子程式可能會繼承主程式的種子碼導致產生

a2998581608/01 21:04一樣的隨機數

這個我倒還真沒有想到

smart0eddie08/01 21:35玩手遊學模擬(?

沒錯!

※ 編輯: arrenwu (165.225.243.22 美國), 08/01/2022 21:47:50

shirleyEchi08/02 01:53難怪資工系比數學系熱門 突然懂了什麼