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