Re: [問題] 想做 bias 的 random number generator

看板java作者 (殺人貓™)時間9年前 (2015/01/20 15:13), 編輯推噓2(2010)
留言12則, 5人參與, 最新討論串2/2 (看更多)
※ 引述《RSAES (RR)》之銘言: 其實推文有人提到「老闆的想法」,這個在遊戲界還挺常見的 尤其是博弈遊戲 我舉個粗略一點的例子(事實上他們用的手法精細的多) 我們假設有一個東西中獎率是1/4 但是我們不能用純亂數 因為你用亂數表去跑 Random random = new Random(); if(random.nextInt() % 4 == 0) Jackpot(); 你會發現雖然宏觀來講是極接近1/4是沒錯的,但是跑亂數表下去就知道 你會常常看到10個 20個沒中獎的,而且並不算少見 我隨手跑一個例子給你看 https://gist.github.com/Rayer/558e1e97df70d59b12d3 我隨便跑一次,出來的結果是 XXXXOXXXXXXXXXXXXXXXOXOXXXOXXOXXXXOXXOXXOOXXXXXXOX XXXXOXXXXXOXOXXXOXXOXXXXOXXXXOOOOXXXXOXXOXOXXOXXXO O是中獎(1/4) X是沒中獎(3/4) O剛好25(中獎率1/4)次,說真的算滿少見的 XD 我完全沒有更改任何結果喔 純粹是跑了兩次,選一次看起來聳動點的而已 看到第六次開始那長串X嗎?在遊戲裡面人有一種傾向就是會記憶壞運忘記好運 即使後面還有四連hit,都是沒有用的,他們心裡面就會認定,幹,這營運奸商 這想法就是典型你提到的老闆的想法 所以為了避免這種情形,我們會跑一個buffer讓這種情況最多連續n次沒中 而假設中獎率是1/m 那 n = 1.5*m 也就是中獎率 但是這個「必中」也不能白白送她,我們會從後面扣回來 扣回來的方法很多種,不過比較常見的就是從連續中獎下手,把本來中獎改成沒中 直到把前面「本來沒中,但是因為當次必中」的buffer扣光為止 這樣看起來就會平均一點了(上班中 想到再補實作 實作其實滿簡單的) -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 59.124.251.135 ※ 文章網址: https://www.ptt.cc/bbs/java/M.1421738021.A.CBD.html

01/20 18:03, , 1F
機率並不表示一定會發生的次數...
01/20 18:03, 1F

01/20 18:03, , 2F
就算是1/2的機率 也有可能永遠落在不中那邊
01/20 18:03, 2F

01/20 20:18, , 3F
那是因為人對機率有不自然的傾向,會有一直沒中接下來更容
01/20 20:18, 3F

01/20 20:20, , 4F
易中的錯覺(其實下次機率還是不會變)
01/20 20:20, 4F

01/20 20:21, , 5F
真的調整成人感覺的隨機,那就不是隨機了
01/20 20:21, 5F

01/20 20:31, , 6F
英雄聯盟的爆擊率好像就是這麼做的
01/20 20:31, 6F

01/20 20:32, , 7F
其實我覺得決策做好後要怎麼寫都不會太困難
01/20 20:32, 7F

01/20 20:37, , 8F
要真隨機還是假隨機決定好後就可以做了,前篇推文只是
01/20 20:37, 8F

01/20 20:37, , 9F
抱怨一下工作狀況 XD
01/20 20:37, 9F

01/20 20:57, , 10F
嗯...在業界當營運多年,一般是三種作法
01/20 20:57, 10F

01/20 20:58, , 11F
1.放任純機率 2.加上槓龜次數後必中 3.逐漸提升命中機率
01/20 20:58, 11F

01/21 11:40, , 12F
1 2樓,你知我知天知地知,可惜老闆顧客不知啊 XD
01/21 11:40, 12F
文章代碼(AID): #1KlW0boz (java)
文章代碼(AID): #1KlW0boz (java)