![]()
163場(chǎng)對(duì)局,136個(gè)英雄,同一個(gè)英雄連續(xù)roll出5-6次——這位程序員玩家開始用Go語(yǔ)言寫代碼驗(yàn)證:手游《英雄聯(lián)盟:激斗峽谷》的隨機(jī)選人系統(tǒng),到底是真隨機(jī),還是被"動(dòng)過(guò)手腳"的偽隨機(jī)。
他用163場(chǎng)對(duì)局做了一個(gè)對(duì)照實(shí)驗(yàn),結(jié)果發(fā)現(xiàn)游戲內(nèi)的"隨機(jī)"分布,與自己用加密隨機(jī)數(shù)生成的模擬結(jié)果,存在系統(tǒng)性偏差。
從"臉黑"到寫代碼:一個(gè)程序員的執(zhí)念
作者原本主攻軟件開發(fā)和Go語(yǔ)言技術(shù)寫作,這次破例寫游戲話題,純粹因?yàn)橄朐囋噂o-echarts數(shù)據(jù)可視化包。他被朋友拉入《英雄聯(lián)盟:激斗峽谷》的ARAM模式——5v5隨機(jī)英雄對(duì)戰(zhàn),每人開局被系統(tǒng)分配一個(gè)英雄,不滿意可以用"骰子"重新隨機(jī),但骰子限量、需時(shí)間積累。
ARAM的設(shè)計(jì)初衷是降低門檻:不用練英雄、不用搶位置,打開即玩。但作者很快陷入一種詭異的挫敗感——"永遠(yuǎn)roll到討厭的英雄,永遠(yuǎn)roll不到買了皮膚的本命英雄"。某天他連續(xù)10-12局內(nèi),同一個(gè)英雄出現(xiàn)5-6次,終于決定用程序員的方式復(fù)仇。
他開了個(gè)Excel臺(tái)賬,每局開局記錄系統(tǒng)分配的英雄。163場(chǎng)無(wú)間斷記錄,覆蓋當(dāng)時(shí)全英雄池136個(gè)角色。為控制變量,他主動(dòng)忽略了"萬(wàn)能骰"機(jī)制(一種可5選1的稀有道具),只統(tǒng)計(jì)系統(tǒng)強(qiáng)制分配的基礎(chǔ)隨機(jī)結(jié)果。
樣本量163,大于英雄總數(shù)136,理論上每個(gè)英雄至少應(yīng)出現(xiàn)1次——這是統(tǒng)計(jì)學(xué)意義上的"全覆蓋"基礎(chǔ)。
兩套隨機(jī)系統(tǒng)的對(duì)決
肉眼觀察163條記錄,很難區(qū)分"真隨機(jī)聚類"和"人為操控"。作者用Go語(yǔ)言實(shí)現(xiàn)了兩套模擬器:一套復(fù)刻游戲機(jī)制(基于他的猜測(cè)),另一套用crypto/rand加密隨機(jī)數(shù)生成器——后者是密碼學(xué)級(jí)別的真隨機(jī),也是他自己開發(fā)游戲時(shí)會(huì)采用的標(biāo)準(zhǔn)。
核心假設(shè)很簡(jiǎn)單:如果游戲算法公平,其分布特征應(yīng)與加密隨機(jī)數(shù)模擬結(jié)果一致;如果存在操控,兩套系統(tǒng)會(huì)產(chǎn)生可量化的偏離。
他對(duì)比了三個(gè)維度:?jiǎn)斡⑿圩罡叱霈F(xiàn)頻次、連續(xù)重復(fù)出現(xiàn)的間隔分布、以及"冷門英雄"(玩家熟練度低、皮膚持有少的角色)的聚集程度。具體代碼實(shí)現(xiàn)和完整數(shù)據(jù)集已開源,圖表用go-echarts生成。
結(jié)果呈現(xiàn)為一種"溫和的偏差"——不是明顯的作弊,而是統(tǒng)計(jì)學(xué)意義上的"不夠隨機(jī)"。
免費(fèi)游戲的"隨機(jī)"經(jīng)濟(jì)學(xué)
作者在文中提到,免費(fèi)游戲(free-to-play live-service)操縱隨機(jī)性并非新聞。業(yè)內(nèi)常用手段包括:動(dòng)態(tài)調(diào)整掉落率、根據(jù)玩家行為預(yù)測(cè)其"流失臨界點(diǎn)"、在特定節(jié)點(diǎn)投放"安慰獎(jiǎng)"以延長(zhǎng)留存。部分策略游走于道德灰色地帶,但極少被實(shí)錘。
ARAM模式的特殊性在于,英雄皮膚是核心付費(fèi)點(diǎn)。如果系統(tǒng)能識(shí)別玩家的皮膚持有情況和偏好數(shù)據(jù),理論上可以反向操作——讓"無(wú)皮膚英雄"更頻繁出現(xiàn),制造"買了皮膚卻用不上"的焦慮,或讓"已購(gòu)買皮膚英雄"刻意缺席,刺激額外消費(fèi)。
作者沒有訪問(wèn)拳頭服務(wù)器的權(quán)限,無(wú)法證明算法確實(shí)存在這種邏輯。但他的數(shù)據(jù)集提供了一個(gè)外部參照:當(dāng)玩家用自己的"真隨機(jī)"模擬器跑10000次163場(chǎng)對(duì)局時(shí),游戲?qū)嶋H分布落在模擬結(jié)果的邊緣區(qū)域——概率上可能,但重復(fù)實(shí)驗(yàn)中出現(xiàn)頻率偏低。
換句話說(shuō),他的163場(chǎng)記錄,更像是"被篩選過(guò)"的隨機(jī),而非純混沌。
代碼與數(shù)據(jù)的局限
作者明確標(biāo)注了研究邊界。樣本僅來(lái)自單一賬號(hào),無(wú)法排除"個(gè)人運(yùn)氣"的統(tǒng)計(jì)噪聲;ARAM存在隱藏分機(jī)制,英雄池可能根據(jù)隊(duì)伍構(gòu)成動(dòng)態(tài)調(diào)整(例如避免全脆皮陣容),這會(huì)引入系統(tǒng)性偏差;163場(chǎng)集中在短期內(nèi)完成,未覆蓋版本更新、賽季重置等變量。
更關(guān)鍵的是,他無(wú)法確認(rèn)自己的"公平模擬"與拳頭實(shí)際算法是否可比。游戲可能使用了加權(quán)隨機(jī)(weighted random)、基于玩家歷史的"防重復(fù)"機(jī)制、或其他他未考慮到的設(shè)計(jì)目標(biāo)。這些都會(huì)讓兩套系統(tǒng)的對(duì)比失去意義。
但他堅(jiān)持公開方法和數(shù)據(jù),邀請(qǐng)其他玩家復(fù)現(xiàn)。go-echarts生成的交互圖表已上傳,任何人可以疊加自己的記錄進(jìn)行對(duì)比。
163場(chǎng)對(duì)局,136個(gè)英雄,一個(gè)程序員用加密隨機(jī)數(shù)生成的平行宇宙——如果你的ARAM記錄也落在那個(gè)"邊緣區(qū)域",你會(huì)選擇相信數(shù)據(jù),還是相信"下次一定轉(zhuǎn)運(yùn)"?
特別聲明:以上內(nèi)容(如有圖片或視頻亦包括在內(nèi))為自媒體平臺(tái)“網(wǎng)易號(hào)”用戶上傳并發(fā)布,本平臺(tái)僅提供信息存儲(chǔ)服務(wù)。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.