※ 本文為 diabloex.bbs. 轉寄自 ptt.cc 更新時間: 2020-06-02 16:48:29
看板 C_Chat
作者 標題 Re: [閒聊] 賭徒謬誤:關於抽卡的機率
時間 Mon Jun 1 21:38:56 2020
→ : 說真的, 程式攤開來九成九就一行 if rand()%100 > 9906/01 20:53
→ : { 喔耶出運啦! } 玩家看了也不會覺得公平的 :>
→ : { 喔耶出運啦! } 玩家看了也不會覺得公平的 :>
其實大部分都不是,因為rand()出來的東西是偽隨機,理論上直接這樣寫會出問題。
至少我知道的專案都是用亂數表加上種子來處理,盡量讓結果接近真隨機。
(我文組也不是寫程式的,這方面的東西有老大要解釋的麻煩幫個忙www)
然後這個種子通常是用時間來抓,
簡單來講就是某些手遊有同時間抽卡會有相同結果的都市傳說,這是有可能的。
這樣看起來好像就是所謂的歐洲時間?
但其實時間的種子通常會以秒以下來抓,真的有歐洲時間那也可能只是毫秒等級的時間。
當然,亂數是有可能被破解的。
比較有名的例子就以前的PM。
用破解亂數運作、調整時間的方式抓自己理想體質的PM曾盛極一時。
但是前陣子GF調整之後破解PM亂數變成幾乎不可能的任務,所以亂數世代也隨之終結。
這部分我也問過程式,他們幾乎都是說要破解刻意加強設計的亂數是幾乎不可能的事。
所以還是多做好事,扶老婆婆過馬路最實在,起碼有幫助到別人 ==
然後卡池的內容也不會寫在程式碼裡,因為那是我們這些雜工企劃要處理的東西。
基本上大部分的遊戲資料都是用表格在管理,卡池內容也一樣。
卡池其實不是讓你直接抽到商品。
而是先抽塞滿相同機率的商品的箱子,再從箱子中抽取商品這樣。
(避免一張搞到又臭又長,debug的時候看到san值歸零)
只是我高中的時候就把數學課本完全丟掉了,
不太確定這樣設計會不會影響到抽取的期望值計算www
--
(と・てノ) 翼龍欸
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 1.161.247.120 (臺灣)
※ 文章代碼(AID): #1UrGJopY (C_Chat)
※ 文章網址: https://www.ptt.cc/bbs/C_Chat/M.1591018738.A.CE2.html
※ 同主題文章:
06-01 20:10 ■ Re: [閒聊] 賭徒謬誤:關於抽卡的機率
06-01 21:25 ■ Re: [閒聊] 賭徒謬誤:關於抽卡的機率
● 06-01 21:38 ■ Re: [閒聊] 賭徒謬誤:關於抽卡的機率
推 : 以ms當單位加上網路延遲基本不太可能破啦1F 06/01 21:41
推 : 翼龍怎麼什麼都懂= =2F 06/01 21:41
推 : 到頭來都是抽下去才知道3F 06/01 21:42
Re: [問題] 單機遊戲用seed生成的假亂數表好處是? - 看板 C_Chat - 批踢踢實業坊
首先要有一個觀念 目前沒有所謂的真亂數 程式裡用隨機函式(後面用rand()代稱)產生的亂數全都是假亂數 rand()有很多種,但不論哪種都是人寫出來的 有自己寫過的就會知道流程大概都如下
首先要有一個觀念 目前沒有所謂的真亂數 程式裡用隨機函式(後面用rand()代稱)產生的亂數全都是假亂數 rand()有很多種,但不論哪種都是人寫出來的 有自己寫過的就會知道流程大概都如下
推 : 你說的時間是time(NULL)那個嗎?5F 06/01 22:14
理論上是吧,但是不一定每個專案都只用時間
推 : 真的是文組 笑死6F 06/01 22:50
推 : 種子用時間跟所謂運氣的「歐洲時間」根本沒關係 = =
推 : 種子用時間跟所謂運氣的「歐洲時間」根本沒關係 = =
我現在深刻的理解讓理組閱讀文章有多困難 ==
※ 編輯: Satoman (1.161.247.120 臺灣), 06/01/2020 23:26:36
→ : 上面假設的歐洲時間是沒有錯的啊因為亂數種子是一樣的8F 06/01 23:48
推 : 講錯就說人家看不懂耶www9F 06/01 23:49
→ : 前文的假設是seed只用時間 一樣的seed跑出來的結果會10F 06/01 23:50
→ : 是一樣的
→ : 是一樣的
推 : seed一樣只是用同一個表 同一個表你跑好幾次rand結果12F 06/01 23:54
→ : 也不會一樣
→ : 也不會一樣
推 : 咦?你認真的嗎?14F 06/01 23:57
推 : 這就要看你怎麼實作rng了啊 假如你用的是傳統的(7^5*s15F 06/01 23:58
→ : eed)mod(2^31-1)就會一樣了
→ : eed)mod(2^31-1)就會一樣了
推 : 不是 你實作不太可能是跑一次rand就換一個seed吧17F 06/02 00:05
→ : 一般是X_i+1=rng(X_i)吧18F 06/02 00:07
推 : 對啊 所以你就算同一個時間 每個user都跑一次rand也不會19F 06/02 00:07
→ : 一樣啊
→ : 一樣啊
→ : 上一次的rng的output作為下一次的seed21F 06/02 00:08
→ : 可是上面的假設是rng(time())啊
→ : 當然 他沒有講的那麼清楚 但是我看下來是這個意思
→ : 可是上面的假設是rng(time())啊
→ : 當然 他沒有講的那麼清楚 但是我看下來是這個意思
推 : 問題是實作沒有人會這樣啊24F 06/02 00:12
推 : 你每次都換seed就變成一個跟時間1-1的函數完全不隨機了
推 : 你每次都換seed就變成一個跟時間1-1的函數完全不隨機了
→ : 實作不會這樣跟上文這樣討論是兩回事啊26F 06/02 00:22
→ : 我看著手機上的圖片喊我婆 現實中我還是一個人睡覺R
→ : QQ
→ : 我看著手機上的圖片喊我婆 現實中我還是一個人睡覺R
推 : crypto 用的 generator 通常也不會讓你自己刻29F 06/02 00:25
→ : 重點是觀念要對 call function 不要出錯 RTFM
→ : 重點是觀念要對 call function 不要出錯 RTFM
推 : 重點是這個人每次講錯就先嗆別人 先嗆不會讓你變成對的31F 06/02 00:27
→ : ......32F 06/02 00:33
→ : 我個人身為寫程式的(沒有寫亂數相關就是) 看不太出來33F 06/02 00:35
→ : 原po講的架構有什麼錯啊?
→ : rand我印象沒錯的話 輸入同樣參數給出的結果是相同(C
→ : 原po講的架構有什麼錯啊?
→ : rand我印象沒錯的話 輸入同樣參數給出的結果是相同(C
推 : 就實際上有點規模的遊戲都不可能會有所謂歐洲時間36F 06/02 00:37
→ : 不同的程式語言或不同function倒是不一定37F 06/02 00:37
→ : 上面已經講過了 我再講一次 你不會每次跑rand都重設seed38F 06/02 00:37
→ : 但是如果以原po的講法實作的話應該是這樣的沒錯39F 06/02 00:38
→ : 那樣會變得更不隨機40F 06/02 00:38
→ : 不管實務上是怎麼做(我也說我工作沒有寫亂數相關 只是41F 06/02 00:39
→ : 啊原Po講的就是錯的啊42F 06/02 00:40
→ : 偶爾會摸到)43F 06/02 00:40
→ : 但是原Po講的理論 錯在哪邊我也看不太出來
→ : 題外話我看不太懂跑rand要重設seed是什麼意思
→ : 是每次都要重置到初始值還是每次都給不一樣的值?
→ : 但是原Po講的理論 錯在哪邊我也看不太出來
→ : 題外話我看不太懂跑rand要重設seed是什麼意思
→ : 是每次都要重置到初始值還是每次都給不一樣的值?
推 : 原Po的理論要成立只有你跑隨機之前都會用現在時間當種子47F 06/02 00:43
→ : 然後剛好這個公司很爛只用標準rand 才會在同一個時間
→ : 得到同樣的結果
→ : 然後剛好這個公司很爛只用標準rand 才會在同一個時間
→ : 得到同樣的結果
→ : 原po的確是這樣講沒錯啊 所以才說"這情況" "可能" 會50F 06/02 00:44
→ : 實際上兩者在稍微正常一點的公司都不會發生51F 06/02 00:45
→ : 有歐洲時間 然後後面也接了大部分公司會弄更複雜的52F 06/02 00:45
→ : 亂數讓這件事不會發生
→ : 亂數讓這件事不會發生
→ : 第一個前提就已經不可能了...54F 06/02 00:46
→ : 等等 所以你講了這麼多 只是想講實務上不會拿時間當55F 06/02 00:46
→ : 參數丟進函式這樣而已??
→ : 參數丟進函式這樣而已??
→ : 對啊57F 06/02 00:47
→ : 你不能把沒有人會作的事情因為做得到就說可能啊
→ : 你不能把沒有人會作的事情因為做得到就說可能啊
→ : .... 我現在處於一個又震驚又不知道該說什麼的狀態59F 06/02 00:48
→ : 不曉得該說是溝通問題還是我中文能力還不夠強....
→ : 不曉得該說是溝通問題還是我中文能力還不夠強....
推 : 原po講的就是如果這樣做就可能有產生歐洲時間 你在那邊61F 06/02 01:00
→ : 實務上不會這樣做
→ : 實務上不會這樣做
推 : 就沒有這種如果啊63F 06/02 01:02
→ : 問題FGO真的有發生這種事,實體活動同時按抽的兩人抽64F 06/02 01:04
→ : 出完全一樣的內容。
→ : 所以真的有這個如果,真的有人這樣做。
→ : 退一萬步說這個做法很爛可以,但講說一定沒人這樣作我
→ : 覺得太武斷了。
→ : 出完全一樣的內容。
→ : 所以真的有這個如果,真的有人這樣做。
→ : 退一萬步說這個做法很爛可以,但講說一定沒人這樣作我
→ : 覺得太武斷了。
推 : 就算發生了也絕對不是那樣 比較可能是其他原因69F 06/02 01:08
→ : 只要做的到就沒有甚麼叫做絕對不會。70F 06/02 01:10
→ : 講難聽點日本很多電腦方面的能力比台灣是差很多的。
→ : 你自己也講了是「正常點的公司不可能」,抱歉,有些公
→ : 司就是那麼不正常。
→ : 你不能把理論上可能的事講成絕對不可能。
→ : 這才是所謂理組的邏輯。
→ : 講難聽點日本很多電腦方面的能力比台灣是差很多的。
→ : 你自己也講了是「正常點的公司不可能」,抱歉,有些公
→ : 司就是那麼不正常。
→ : 你不能把理論上可能的事講成絕對不可能。
→ : 這才是所謂理組的邏輯。
推 : 抽卡遊戲的命根子就是抽卡 你說會隨便亂搞那我隨便了76F 06/02 01:14
→ : 其實請不要小看人類智商的下限 xd77F 06/02 01:16
→ : 誰說命根子就不會隨便搞的。78F 06/02 01:16
→ : 工作上其實偶爾都會遇到測試模組因為可以跑 然後也沒79F 06/02 01:17
→ : 如果你夠清楚FGO這類日本抽卡遊戲的狀況就不會覺得有80F 06/02 01:17
→ : 什麼不可能了。
→ : 什麼不可能了。
→ : 時間修就這樣把測試code丟上正式環境了...(切腹82F 06/02 01:17
→ : 有很多蠢到爆的bug都是因為時間跟管理壓力造成的
→ : 有很多蠢到爆的bug都是因為時間跟管理壓力造成的
→ : 整個遊戲一開始在開發時都不被當一回事,所以根本沒投84F 06/02 01:19
→ : 注什麼心力在做根本當免洗隨便搞,結果莫名靠IP死士硬
→ : 是撐到活起來,大概就是這種狀況。
→ : 抽卡對抽卡遊戲是命根子,但在開發期對老闆跟團隊別說
→ : 抽卡環節整個遊戲都只是個免洗企劃,這種案例多的是。
→ : 我不是寫程式的是做圖搞設計的,我進上一家公司前也以
→ : 為正常點的公司會把資料跟圖紙好好歸檔啊,製造業你工
→ : 程資料可是命根耶。
→ : 注什麼心力在做根本當免洗隨便搞,結果莫名靠IP死士硬
→ : 是撐到活起來,大概就是這種狀況。
→ : 抽卡對抽卡遊戲是命根子,但在開發期對老闆跟團隊別說
→ : 抽卡環節整個遊戲都只是個免洗企劃,這種案例多的是。
→ : 我不是寫程式的是做圖搞設計的,我進上一家公司前也以
→ : 為正常點的公司會把資料跟圖紙好好歸檔啊,製造業你工
→ : 程資料可是命根耶。
推 : 你們說的都不是會賺錢的事情啊92F 06/02 01:23
→ : 阿結果?一家40年老企業就是都沒做然後人家賺錢賺到現93F 06/02 01:23
→ : 在,存在即合理我能怎樣。
→ : 在,存在即合理我能怎樣。
→ : 不過真的扯太遠了 隨便啦95F 06/02 01:23
→ : 他媽的就是 我跟你保證...96F 06/02 01:24
→ : 所以你說因為趕時間有bug導致歐洲時間我信啊97F 06/02 01:24
→ : 實際上就是跟賺錢有關啊。98F 06/02 01:25
→ : 我是不曉得你家公司有多威猛 但是小公司管理一蹋糊塗99F 06/02 01:25
→ : 但是一開始設計就會有歐洲時間那是不可能的100F 06/02 01:25
→ : 然後code一堆奇怪東西根本很正常101F 06/02 01:25
→ : 設計大概只跟你講 亂數抽卡你信不信
→ : 設計大概只跟你講 亂數抽卡你信不信
→ : 那不叫一開始設計就有歐洲時間,設計的人就是廢到不知103F 06/02 01:26
→ : 道會搞出問題這還比較可能。
→ : 道會搞出問題這還比較可能。
→ : 沒錯 (狂點頭105F 06/02 01:26
→ : 我以前也以為大公司的工程師多厲害啊,結果碰到台○電106F 06/02 01:26
→ : 那群北七……
→ : 那群北七……
推 : 反正我只是來罵原Po的 你們隨意108F 06/02 01:27
→ : 然後寫code的是剛進來的菜鳥 連rand怎麼寫現場google109F 06/02 01:27
→ : 後續會發生什麼鬼事根本不是他有辦法知道的事
→ : 後續會發生什麼鬼事根本不是他有辦法知道的事
→ : 不就是你要罵的根本沒罵的嗎。111F 06/02 01:28
→ : 我是沒到過那種真的管理很嚴謹的企業 但是我的經驗告112F 06/02 01:31
→ : 看起來變成像是對人不對事了...就這樣吧113F 06/02 01:31
→ : 訴我小公司絕對沒有什麼 "正常來講不會發生"114F 06/02 01:31
推 : "抽卡遊戲的命根子就是抽卡 你說會隨便亂搞那我隨便了"115F 06/02 01:32
→ : 只能說呵呵
→ : 只能說呵呵
→ : 別說小公司,有的時候大公司也是讓人匪夷所思。117F 06/02 01:33
→ : 因為大公司有時候決定標準的根本不懂工程實務。
→ : 因為大公司有時候決定標準的根本不懂工程實務。
推 : 如果這個世界大家都是這樣理所當然的在思考,那我想世119F 06/02 01:34
→ : 界也不會那麼亂了
→ : 界也不會那麼亂了
→ : 比方說某間供應商出錯以後就規定所有同型產品都要一致121F 06/02 01:35
→ : 超高標準,結果之後因為這種超高標準在某些尺度完全做
→ : 不到,卡死自己研發跟品保,然後工程師完全跟上層溝通
→ : 無效。
→ : 超高標準,結果之後因為這種超高標準在某些尺度完全做
→ : 不到,卡死自己研發跟品保,然後工程師完全跟上層溝通
→ : 無效。
→ : 然後上層只負責出一張嘴 責任都不是他的(O125F 06/02 01:37
→ : 偏偏台灣這邊供應商很誠實都說做不到,支那那邊都是跟126F 06/02 01:37
→ : 你說可以但實際上做不到,然後就全部轉單過去,然後出
→ : 事以後回來找台灣幫忙,想轉回台灣然後別部門又再要求
→ : 台灣要做這個標準無限循環哈哈哈。
→ : 你說可以但實際上做不到,然後就全部轉單過去,然後出
→ : 事以後回來找台灣幫忙,想轉回台灣然後別部門又再要求
→ : 台灣要做這個標準無限循環哈哈哈。
→ : 靠杯這我超有即視感的xddddd130F 06/02 01:38
→ : 果然這世界運作的模式都很像(o
→ : 果然這世界運作的模式都很像(o
→ : 欸你說他們大公司工程師薪水那麼高成天做這種無用功是132F 06/02 01:38
→ : 怎麼賺錢的?我也不知道,反正人家是跨國大公司不是我
→ : 能理解的。
→ : 怎麼賺錢的?我也不知道,反正人家是跨國大公司不是我
→ : 能理解的。
推 : 我朋友在台灣公司寫遊戲 他們就是寫像文中一樣的程式135F 06/02 09:01
→ : 碼 他們的遊戲很紅 排行榜上也有
→ : 碼 他們的遊戲很紅 排行榜上也有
→ : 完全亂扯137F 06/02 09:25
推 : 現代硬體很多都內建硬體亂數器了,實作上直接去亂數池撈138F 06/02 11:34
→ : 亂數當種子八
→ : 亂數當種子八
推 : 抽卡遊戲的命根子是抽卡(X) 卡面(O)夠香就會砸錢抽140F 06/02 15:06
→ : ,誰跟你算數學
→ : ,誰跟你算數學
→ : rand()就是亂數表阿,用之前要選種子。你說用rand會有142F 06/02 16:40
→ : 問題所以用亂數表+種子???你真的知道你在說啥嗎
→ : 問題所以用亂數表+種子???你真的知道你在說啥嗎
--
※ 看板: diabloex 文章推薦值: 0 目前人氣: 0 累積人氣: 195
回列表(←)
分享