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

作者: Killercat (殺人貓™)   2015-01-20 15:13:38
※ 引述《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扣光為止
這樣看起來就會平均一點了(上班中 想到再補實作 實作其實滿簡單的)
作者: cowbaying (是在靠北喔)   2015-01-20 18:03:00
機率並不表示一定會發生的次數...就算是1/2的機率 也有可能永遠落在不中那邊
作者: ssccg (23)   2015-01-20 20:18:00
那是因為人對機率有不自然的傾向,會有一直沒中接下來更容易中的錯覺(其實下次機率還是不會變)真的調整成人感覺的隨機,那就不是隨機了
作者: cyclone350 (老子我最神)   2015-01-20 20:31:00
英雄聯盟的爆擊率好像就是這麼做的其實我覺得決策做好後要怎麼寫都不會太困難要真隨機還是假隨機決定好後就可以做了,前篇推文只是抱怨一下工作狀況 XD
作者: taco0827 (蛋爺-我愛好人卡)   2015-01-20 20:57:00
嗯...在業界當營運多年,一般是三種作法1.放任純機率 2.加上槓龜次數後必中 3.逐漸提升命中機率
作者: Killercat (殺人貓™)   2015-01-21 11:40:00
1 2樓,你知我知天知地知,可惜老闆顧客不知啊 XD

Links booklink

Contact Us: admin [ a t ] ucptt.com