推 emptie: 多想了吧 你抽好幾次是不是在同一個thread上執行都不知道 11/27 16:52
這跟 thread 無關,一個程式的亂數引擎照理只會被 init 一次,
init 兩次以上會產生非常多可能的問題,一個合格的工程師通常不會這樣搞
推 tonyxfg: 友情抽是什麼意思? 11/27 16:52
→ emptie: 而且他也可以寫0-999999 然後0-9999出UR啊 11/27 16:53
當然可以呀,但結果是一樣的,先用友情抽把 10000-999999 的數字篩掉一些,
有機會微幅地增加近期序列裡大獎的密度
推 arrenwu: 友情抽那邊可以更詳細說明嗎? 看不懂什麼是友情抽@@" 11/27 16:53
→ wolver: 那是人工讓大數據機率趨近於 亂數 但對單一個人來說 11/27 16:54
→ wolver: 那種絕對不是亂數,才會有歐洲人非洲人差別 11/27 16:54
→ wolver: 也就是某個人抽很多好卡,就會有倒楣鬼一直抽爛卡 11/27 16:55
推 kashiwa27: 友情抽就是很多手遊都有的免費垃圾抽 11/27 16:55
→ anumber: 友情點就是大部分遊戲不能課金拿到的資源啦 11/27 16:55
推 tonyxfg: 原來是這意思XD 11/27 16:55
噓 s2637726: 又是賭徒 11/27 16:56
→ ming1053: 你沒考慮過分散式情況 可能不只一個worker在處理抽卡 11/27 16:56
有可能,但這無損於友抽的策略
如果我命不好,友抽抽完被丟去另一個伺服器,那也不過就是回到原點,
跟一般的玩家一樣而已,但若是剛好在同個伺服器被服務到,不就有點用了 ^^?
→ tonyxfg: 可是這樣也不對啊,照原po的說法會變成卡片總數固定,抽 11/27 16:56
→ wolver: 單一個體跟所有個體總和後的數據 這就是差別 11/27 16:57
→ tonyxfg: 完不放回,但一般不太可能會這樣做吧?這樣只要準備足夠 11/27 16:57
→ tonyxfg: 多的錢就能把卡池抽光光? 11/27 16:57
不是的,隨機函式並不是一個池,而是一個無窮的列序,用一個簡單的例子來說,
假設這個函數是這樣設計的
f(0) = 3, f(n + 1) = f(n) * 7 mod 17 // mod 是取餘數的意思
這時,f(1) = 4, f(2) = 11, f(3) = 9, f(4) = 12, ...
序列是 3, 4, 11, 9, 12, ... 一直下去,要多少都有,無限的
但亂數引擎在設計時,會希望序列長度夠大時,各個數字出現的次數差不多,
而且希望能均勻,不管是產生1萬次或100萬次。
既然如此,如果最近才剛出現過某些數字,
在很短的時間又重覆出現的機率,相對就低了
→ wolver: 因為電腦根本不懂啥是亂數 隨機 它的硬體就是這樣 11/27 16:57
推 arrenwu: 戰女裡面有類似友情抽的機制嗎? 11/27 16:58
推 Rain0224: 沒有吧 @@ 11/27 16:59
噓 CCapocalypse: 這招有效怎麼會有倒霉鬼? 真正的酋長怎樣做出來的 11/27 17:01
→ CCapocalypse: 就是r卡 11/27 17:01
你完全搞錯了機率的用法,1% 的UR,抽不中的機率是 0.99
連續1000抽不中是 (0.99)^1000 ~= 萬分之四,
一萬個人裡面有4個人連續1000抽槓龜是很自然的事,接受他,放下他
→ wolver: 現實就是沒辦法做到單一玩家,自己有單一獨立的數據亂數 11/27 17:03
→ wolver: 所以爐石或那些卡牌遊戲才會有防臉黑機制 11/27 17:03
推 OAzenO: 是的 探究到底就是電腦做不到真隨機 11/27 17:04
→ wolver: 幫那堆可憐的地獄倒楣鬼.至於歐洲人還是一樣歐洲 11/27 17:04
→ wolver: 所以前面確認你是非洲人還是歐洲人 再決定要不要玩 11/27 17:06
→ krousxchen: 問題在於你確定隨機是在你本機執行的嗎?? 11/27 17:06
→ wolver: 非洲人還要玩 那你就是要變成石油王. 否則跳比較快 11/27 17:06
→ krousxchen: 如果都是在伺服器執行的,你那些友抽馬上被其他人洗掉 11/27 17:07
這無所謂,就算別人立刻抽掉1000張好了
從我開始抽的那個瞬間,往後看100萬張,這序列仍然少了我友抽跳掉的那30張
要看的不是近期的幾十張,機率不是這樣用的,要用很巨觀的角度來看
噓 shintrain: 抽籤放回跟抽籤不放回的機率是一樣的 11/27 17:07
抽籤是這樣,但是程式語言的 random 不是抽籤
→ shifa: 簡單說只要抓出歐洲人,其他人就是非洲人?我好像懂了什麼 11/27 17:07
→ shifa: XD 11/27 17:07
→ wolver: 不太可能在本機 這樣很容易作弊. 11/27 17:08
→ shintrain: 所以你說先抽一些爛卡讓好卡的機率增加是錯的 11/27 17:08
推 guogu: 並不會 通常不是一個數列在取 他是用時間當種子在取 11/27 17:08
→ krousxchen: 而事實上,我遇過抽卡突然閃退,重開抽到的東西還在 11/27 17:08
→ guogu: 用時間當種子在取的話那跟你前面抽幾次一點關係都沒用 11/27 17:09
→ krousxchen: 所以抽卡絕對是在伺服執行的 11/27 17:09
→ wolver: 而且通常為了不讓SERVER負擔太大 很有可能還是先抽好 11/27 17:10
→ wolver: 然後USER抽的時候直接派抽好的結果給你 11/27 17:10
我從來沒說過是在本機抽,這絕對都是在 server 上抽,
而且,只要用了 random(),這跟直接派抽好結果的意義是一樣的,
跟我論述不但沒相抵觸,反而完全符合。
先抽好的結果我也相信他就是簡單用一個 random 去產生的,數列的性質是一樣,
當數量很大的時候,各個隨機數字的分佈是均勻的,
於是,當你在某個時間點抽掉了特定大的數字,接下來幾佰萬次的序列中,
存在大數字的比例就稍微降低了
→ krousxchen: 但如果別人那一千抽都是法老上身?? 11/27 17:16
結果是一樣的,一樣用100萬抽來看,1萬抽是UR,有法老瞬間抽掉1000張UR,
如果我沒先抽掉30張N卡,我面對的序列是 9000張UR + 99萬張其他
如果我先抽掉30張N卡,那我面對的序列是 9000張UR + (99萬-30)張其他
仍然是先濾掉一些N卡來得有利~~
不論我怎麼做,都無法阻止別人抽卡,其他人的行為對我而言也都是隨機的,
用機率來看這件事,就不需要去想這種特例。
→ lay10521: 獨立事件 11/27 17:19
獨立事件只存在於紙上,程式的運作沒那麼完美
推 howardjou: 可是你ㄧ台抽的數字在其它幾萬台面前可能被洗光了 11/27 17:23
→ krousxchen: 你高興就好,因為一百萬分之30是很接近零的 11/27 17:26
很接近零,但不是零,反正友情抽都是要用掉的,何不拿來增加點可能性?
→ hsiehfat: 問題是友抽的池和石抽的池根本不一樣啊... 11/27 17:27
→ hsiehfat: 你為什麼覺得抽掉友抽就能影響石抽的結果? 11/27 17:27
→ hsiehfat: 有些卡友抽抽不到,有些卡石抽抽不到 11/27 17:28
→ hsiehfat: 所以終歸還是回到一句話:玩家根本無法得知伺服器端 11/27 17:28
→ hsiehfat: 是怎麼實做隨機這件事情 11/27 17:28
的確,除非給我看 code,不然沒辦法驗證,
不過,程式寫久了,自然會對實作的方法有感覺。
抽個卡而已,最簡單就是用 random,如果覺得效果不好,
也是透過保底或者是累積幸運值的方式去補比較實在,
要做好亂數引擎是一門大學問,也不該是 app 工程師該花時間去做的事,
所以,預設程式端是個簡單的 random 是很合理的想法。(剃刀原理
→ gn00399745: 你這篇的結論前提很多 11/27 17:28
→ gn00399745: 一個平均分布的樣本 你如何sample 他都還是平均的 11/27 17:30
→ gn00399745: 另外你可以去查一下memoryless property 11/27 17:31
推 arrenwu: "序列長度夠大時各數字出現的次數差不多" 這隨機就行了 11/27 17:33
→ arrenwu: Law of Large number 會保證你講的那件事情 11/27 17:34
→ jimmy689: 你覺得每次處理你抽獎請求的服務器都是同一臺? 11/27 17:36
的確,這沒辦法保證呢... 不過,在那麼多的未知之下,
要抽卡之前先把友情抽抽掉,也沒壞處,不是嗎?
搞不好他們的系統跟我想的一樣呀~,審慎樂觀 ^^"
→ hardyuse: 之前才有某遊戲抽卡動手腳的新聞 你還相信random實作? 11/27 17:39
當然相信呀,不然怎麼會去玩呢?
都已經不相信遊戲公司了,還去玩人家的抽卡遊戲,這也太奇怪了吧...
→ hardyuse: 整篇看下來我只覺得你在自high 很多細節不知道你是裝作 11/27 17:41
→ hardyuse: 沒看到還是真的沒看到 11/27 17:42
舉個例子?
推 bowcar: 看一下 這作法就當偏方吧 反正友情點放著也沒用 11/27 17:48
→ bowcar: 我是懂原PO想表達的意思啦,不過就像推文說的這前提很多 11/27 17:49
→ bowcar: 就寧可信其有吧XD 11/27 17:49
→ hollowland: 一般來講 友情抽的random範圍應該跟課金抽依樣 11/27 17:50
→ hollowland: 你這前提是友抽的範圍=課金的廢卡範圍 11/27 17:51
→ hollowland: 我想不出來有什麼理由要這樣幹 比起特別縮小友抽範圍 11/27 17:52
→ hardyuse: 我說的嚴重了,不過我建議你不要對遊戲公司抱太大期望 11/27 17:52
→ hollowland: 直接給友抽另一個table不是比較乾脆 11/27 17:52
以實作的角度,我覺得第一階段先 random 出卡級是很理所當然的。
因為遊戲的公告裡是這麼寫的,UR 1%/SSR 4%/SR 15%/R 80%
各級卡片裡張數不一,要如何能確保結果各級卡片的產出符合公告?
最直覺的做法,就是先骰稀有度,然後再決定到底是該星級裡的哪張卡片
他先用一個 random 骰了級數,接著用第二個 random 決定卡面。
友抽可以是另一個 table,但他也一樣是用兩個 random 來骰出一張卡。
只要用到了 random,就是同個序列了
當然,他絕對可以把機制弄得更複雜,但隨機的結果人類來看都差不多,
用最簡單直覺的作法是比較有可能的... :)
→ hardyuse: 你覺得不妥我第二和第三行推文可以刪除沒關係 11/27 17:53
呃... 大家交換意見而已,沒這麼嚴重 ( ̄□ ̄|||)a
※ 編輯: archon (125.227.30.252), 11/27/2017 18:02:27
噓 Xavy: 抽卡玄學自己信就好,不用說給人聽 11/27 18:19
推 saulong: 我建議你寫個程式下去跑結果 證明有效即可 11/27 18:30
推 hardyuse: saulong +1 我也建議你跑程式證明你的理論 11/27 18:32
有這麼難嗎?剛才我跑了第一次,10000 抽中 UR 中了 105 張(>1%,
有興趣的人可以自己安裝 python 環境多玩幾次,跑到100萬抽應該要花點時間
import random
def friendPick():
for i in range(1, 30):
r = random.randint(1, 100)
if r <= 5: # hit R
return True
return False
def main():
cntLovecaPick = 0
cntUR = 0
while cntLovecaPick < 10000:
if friendPick():
continue
r = random.randint(1, 100)
if r == 1: # hit
cntUR = cntUR + 1
cntLovecaPick = cntLovecaPick + 1
print(cntLovecaPick, cntUR)
print(cntUR)
if __name__ == '__main__':
main()
推 dodomilk: 糟糕你講得好像有點道理,不過如果沒有足夠次數驗證我是 11/27 18:40
→ dodomilk: 不會信的......有些噓文的可能不了解程式的運作方式 11/27 18:41
※ 編輯: archon (125.227.30.252), 11/27/2017 18:47:04
→ shinchen: 你怎麼知道友抽跟石抽都是用數字小的當作中獎? 如果設計 11/27 18:48
→ shinchen: 石抽0中獎 友抽95~99中獎 照你的理論不就反過來了 11/27 18:48
推 R0bin03: 用程式觀念試著解釋而已也要被說是玄學… 11/27 18:48
→ R0bin03: 用程式觀念試著解釋而已也要被說是玄學… 11/27 18:49
→ R0bin03: 重複推到抱歉 11/27 18:49
推 dodomilk: @shinchen 原PO自己有提到,一般工程師不會這樣折磨自己 11/27 18:52
→ dodomilk: 要證明的話就分兩組,一組直接投石抽,一組先抽友抽連續 11/27 18:54
→ dodomilk: 30次二星以下,再抽石抽。看兩者石抽四五星機率有沒有差 11/27 18:55
→ dodomilk: 不過我猜可能要抽個幾百次才能達到p<0.05 11/27 18:56
噓 nomorethings: 友情抽增加機率我也是笑笑的,這種感覺文又沒有足 11/27 18:57
→ nomorethings: 夠數據證明,那麼厲害怎麼不做個統計來證明你的理 11/27 18:57
→ nomorethings: 論咧? 11/27 18:57
→ shinchen: 改個數字也叫折磨自己 當工程師是猴子嗎... 11/27 18:57
→ shinchen: 你不知道伺服端程式怎麼寫的 分析這些就是玄學沒錯啊 11/27 18:58
推 guogu: 1w抽1%隨便都能跑出105以上好嘛w別搞笑了 11/27 19:10
→ guogu: 不信你直接寫寫看1w抽1%試試看 11/27 19:10
→ hollowland: 你的前提是友抽要先必骰到普卡 然後才骰那張卡 11/27 19:12
→ Xavy: 還真的有人被唬得一愣一愣的耶 11/27 19:12
→ hollowland: 我寫友抽直接骰什麼卡 你這個假設不就gg了 11/27 19:14
→ harryron9: 10000抽1% 抽成1.05%算是顯著提升...嗯... 11/27 19:15
→ noob9527: 阿這不就是賭徒謬誤嗎... 11/27 19:15
→ yukitowu: 畢竟不會跳例外的BUG很難除錯啊www 11/27 19:15
→ hollowland: 別人友抽直接抽那張卡 不就gg了 11/27 19:15
推 unsocial: 友情抽跟寶石抽怎麼會在一個池? 11/27 19:16
→ guogu: 老人學不會新把戲也不是讀資工的就通融我VB隨便寫吧 11/27 19:20
→ hollowland: 我看一下這個程式碼… 我很懷疑你繼續跑個幾十次會得 11/27 19:20
→ hollowland: 出可以提升抽卡率的結果 11/27 19:20
→ noob9527: 照你說的rand()%10 我9抽沒出0 第10抽中0機率有100%呢 11/27 19:22
→ noob9527: 這種又沒說抽完後獎項就再也抽不到 所以前題就錯了 11/27 19:26
→ hollowland: rand()不是整數所以沒這個問題… 11/27 19:27
→ hollowland: 上面g大程式示範了直接抽1%抽到1.12% xd 11/27 19:29
推 NoNameL: g大那隻程式是這樣沒錯啊,但這隻程式是「有機率」會掉 11/27 19:38
→ NoNameL: 進無窮迴圈出不來的。那些就是「被吃掉」的小於1%的機率 11/27 19:39
→ shinchen: guogu的程式是固定抽10000次 你是不是看錯迴圈變數...? 11/27 19:41
→ shinchen: 會盡無窮迴圈是一直抽到中100個才停下來看次數那種 11/27 19:41
→ hollowland: 掉進無窮迴圈程式就當掉了耶... 11/27 19:42
推 NoNameL: 啊,對,我看錯了。 11/27 19:46
推 kamisun: 戰女很少大爆死,但我遇過幾次,最嚴重的是去年萬聖節 11/27 19:53
→ kamisun: 抽快40把四星武器,才來想要的 11/27 19:54
推 guogu: 我是用雙浮點去接rnd 理論上來說他是產生0~1的數字 11/27 19:56
→ guogu: 印象中是小數以下7位吧? 如果沒加等號大概千萬分之一會爆破 11/27 19:58
推 yuyuyuai: 怎可能這樣讓你搞 友抽和石抽不太可能會寫在一起吧 11/27 20:00
→ gn00399745: 每次run random用的seed應該不太一樣吧 11/27 20:01
→ gn00399745: 事實上seed在亂數序列的位置應該會一直跳 11/27 20:01
→ gn00399745: 你亂數序列概念對 但是你要考慮到seed吧 11/27 20:02
→ gn00399745: 用seed產生亂數 你只要SEED變動 他結果就是和之前抽 11/27 20:03
→ gn00399745: 無關 甚至seed可能會跳回你友抽用的爛seed 11/27 20:04
→ yuyuyuai: 對 樓上這也是一種反駁的論點 只是最近才被龍珠手遊的廢 11/27 20:04
→ yuyuyuai: 物工程師打臉QQ 11/27 20:04
→ gn00399745: 亂數在程式裡的確是一個大數表單 但是她會循環 11/27 20:07
→ gn00399745: 而且還可以利用多個大數表單交配產生更大的表單 11/27 20:09
→ greydust: 呃你的推論是沒錯 但通常亂數序列至少也是2的31次方減1 11/28 00:50
→ greydust: 也就是21億多 就算你先抽掉100個大數字也才增加2100萬分 11/28 00:50
→ greydust: 之1的機率.. 11/28 00:50
→ greydust: 還要考慮到序列重置和序列遠大於2147483647的可能性 基 11/28 00:50
→ greydust: 本上這個方法等於沒有用 11/28 00:50
→ benny30912: 二項分配的標準差是sqrt(np(1-p)),差不到一個標準差 11/28 06:32
→ benny30912: 根本沒有統計上的差異 11/28 06:32
噓 WrongHole: 11/29 07:02