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

看板C_Chat作者 (不是綿芽的錯)時間1年前 (2022/08/01 20:36), 1年前編輯推噓7(706)
留言13則, 6人參與, 1年前最新討論串4/5 (看更多)
※ 引述《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
所以我寫了個蒙地卡羅的模擬程式,是假設彩球給號碼的機率在 5%~50% 之間不等的結果 這是無課的結果 (橫軸是每個彩球給號碼的機率, 縱軸是抽到泳裝的機率) https://i.imgur.com/EgsCxcD.jpg
這是有課的結果 https://i.imgur.com/3xytaez.jpg
圖上淺紫色的部份是 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/Ts4dBjy.jpg
-- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 165.225.243.22 (美國) ※ 文章網址: https://www.ptt.cc/bbs/C_Chat/M.1659357375.A.8DB.html

08/01 20:40, 1年前 , 1F
推、推!
08/01 20:40, 1F

08/01 20:43, 1年前 , 2F
課長才 20% 好坑
08/01 20:43, 2F
那個20% 還是在彩球給號碼的機率是 50% 的前提

08/01 20:44, 1年前 , 3F
這寫法是彩球出的號碼會重複的情況 看起來沒啥問題
08/01 20:44, 3F

08/01 20:49, 1年前 , 4F
第一張圖後面的背景484色色的阿?
08/01 20:49, 4F

08/01 20:49, 1年前 , 5F
我需要連結好研究機率
08/01 20:49, 5F

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

08/01 20:55, 1年前 , 7F
拿到彩球 剩餘球數不足的話就不進後面拿彩球的計算
08/01 20:55, 7F

08/01 20:57, 1年前 , 8F
第一顆拿到的機率跟第三十顆拿到的機率都是1/30
08/01 20:57, 8F

08/01 21:04, 1年前 , 9F
然後跑平行隨機的時候最好先call random.seed()重新產
08/01 21:04, 9F

08/01 21:04, 1年前 , 10F
生種子,不然子程式可能會繼承主程式的種子碼導致產生
08/01 21:04, 10F

08/01 21:04, 1年前 , 11F
一樣的隨機數
08/01 21:04, 11F
這個我倒還真沒有想到

08/01 21:35, 1年前 , 12F
玩手遊學模擬(?
08/01 21:35, 12F
沒錯! ※ 編輯: arrenwu (165.225.243.22 美國), 08/01/2022 21:47:50

08/02 01:53, 1年前 , 13F
難怪資工系比數學系熱門 突然懂了什麼
08/02 01:53, 13F
文章代碼(AID): #1YvyY_ZR (C_Chat)
文章代碼(AID): #1YvyY_ZR (C_Chat)