【雀魂】升上魂天真的需要靠運(yùn)氣嗎?(基于python模擬)
????作為最難的魂系游戲,雀魂被不少人看做是一款“你立直必反向一發(fā)”,“國士聽牌被斷幺九”的恐怖游戲,但是,不同層次的玩家,在大量對(duì)局?jǐn)?shù)后的實(shí)力還是有明顯差別的??傮w上來看雀魂的最終戰(zhàn)績還是運(yùn)氣與實(shí)力的綜合體現(xiàn)。以下將通過python模擬,對(duì)一些情況進(jìn)行分析,試圖證明雀魂就是純運(yùn)辣游。
給定順位分布,求升上魂天所需要的對(duì)局?jǐn)?shù)
給定順位分布,進(jìn)行一定數(shù)量對(duì)局?jǐn)?shù)所得到的實(shí)際順位分布
兩個(gè)不同段位的玩家,進(jìn)行一定數(shù)量對(duì)局的勝率

1.給定順位分布,求升上魂天所需要的對(duì)局?jǐn)?shù)

????
????上圖為不同段位的各項(xiàng)數(shù)據(jù),我們先以目前魂天的平均順位為基準(zhǔn)來分析,并作如下處理:
1)近似將順位分布取為0.29,0.27,0.26,0.18
2)不考慮雀豪1之前的對(duì)局(一般為100-200半莊),從豪一原點(diǎn)開始全程在玉之間對(duì)局,并且1,2,3,4位的最終點(diǎn)數(shù)分別為4,3,2,1w
那么,根據(jù)雀魂段位Pt機(jī)制,可以算出1,2,3,4位的pt分別為[145,65,-5,-30-段位額外扣分]
3)考慮掉段機(jī)制,但是默認(rèn)只會(huì)掉回當(dāng)前的下一個(gè)順位(例如雀圣2掉回雀圣1,不考慮其再掉回豪3)
????首先驗(yàn)證假設(shè)3)的合理性:
????取試驗(yàn)次數(shù)n=10000,重復(fù)3次實(shí)驗(yàn)得到結(jié)果:

????可以看到,n=10000時(shí)得到的結(jié)果已經(jīng)相對(duì)穩(wěn)定(之后的順位模擬結(jié)果更加穩(wěn)定),綜合考慮程序的運(yùn)行速度,之后無特殊說明,均取n=10000作為試驗(yàn)次數(shù)且不做重復(fù)檢驗(yàn)。
????即使是豪1升豪2,也有大約2%的可能性會(huì)掉段,而且總體上來說,掉段次數(shù)的期望大約為1500/10000=0.15,從豪1升到魂天,大約有85%的概率會(huì)至少掉一次段,因此在模擬時(shí)引入掉段機(jī)制是有必要的,但也不必引入過于復(fù)雜的掉段機(jī)制,可以看到掉兩次段的概率已經(jīng)非常之低了,因此假設(shè)3)是合理的。
????經(jīng)過模擬得到,從雀豪1到魂天的對(duì)局?jǐn)?shù)分布如下:

????列表從左到右依次對(duì)應(yīng)[0-500,501-1000,1001-1500,1501-2000,2001-2500,>2500]區(qū)間,
根據(jù)模擬結(jié)果得到幾個(gè)參數(shù):
平均對(duì)局?jǐn)?shù)=1116.0(玉場)
對(duì)局?jǐn)?shù)落在[501-1500]這個(gè)區(qū)間的對(duì)局?jǐn)?shù)占82%,對(duì)其進(jìn)行細(xì)分

列表分別為落在[500-700,700-900,900-1100,1100-1300,1300-1500,1500-1700]的次數(shù),各區(qū)間分布數(shù)量雖然有一些不同,但總體來看,無論落在哪個(gè)區(qū)間都是可以接受的。
????由此看到,如果以相同實(shí)力開始對(duì)局,打上魂天的局?jǐn)?shù)也會(huì)有幾百場的偏差,因此不能僅僅根據(jù)對(duì)局?jǐn)?shù)量來判定玩家的實(shí)力
????接著我們改一下順位分布:
????取雀豪2的平均水平[25.6,25.3,25.0,24.1]:同樣取n=10000,然后程序竟然卡了,想了好久發(fā)現(xiàn)大概是因?yàn)閷?duì)局?jǐn)?shù)過多,導(dǎo)致while無限循環(huán)中…,于是將每一段的對(duì)局?jǐn)?shù)上限取為1000,一旦對(duì)局?jǐn)?shù)超過這個(gè)局?jǐn)?shù),就直接給予升段,以避免永遠(yuǎn)打不出魂天的情況(什么時(shí)候雀魂也能引入類似的保護(hù)機(jī)制),這里取n=1000,得到結(jié)果為

????列表從左到右依次對(duì)應(yīng)[0-500,501-1000,1001-1500,1501-2000,2001-2500,>2500]區(qū)間
????也就是說,對(duì)于雀豪2的平均水準(zhǔn),且不說在特定的對(duì)局?jǐn)?shù)內(nèi)升魂天,就單單是升魂天本身都是十分困難的
????再來看一下雀圣1的相關(guān)情況:
????取順位為[0.27,0.26,0.255,0.215]進(jìn)行分析
????考慮到豪2模擬時(shí)翻車的情況,這次我們把n設(shè)定為1000,重復(fù)3次實(shí)驗(yàn)

????可以看到,以雀圣1的水平進(jìn)行對(duì)戰(zhàn),只有大約14%的人能在2500局之內(nèi)升天,而如果以魂天的平均實(shí)力,在2500局之內(nèi)升天的占比為99%。
????綜合起來看,對(duì)于實(shí)力相同的玩家,麻將確實(shí)就是純運(yùn)辣游,幾百場的偏差都是再正常不過的,但是對(duì)于不同實(shí)力的玩家,實(shí)力相差越大,最終所得到成績的差異就越明顯,拿雀豪2和魂天來說,如果都以最終升天為目標(biāo),那么只要魂天沒有得罪發(fā)牌姬,幾乎是必勝的。
????理論分析的話,給定特定的順位分布,多次實(shí)驗(yàn)后其總體成績呈正態(tài)分布,當(dāng)兩條分布曲線重合程度越高,二者實(shí)力差距就越小,那么對(duì)局時(shí)的運(yùn)氣成分占比就越大。反之,如果兩條曲線重合程度只有1%,那么這時(shí)勝負(fù)因素的主體就是實(shí)力而不是運(yùn)氣了。所以,實(shí)力越高,能升上魂天的概率越高以及升上魂天的對(duì)局?jǐn)?shù)期望越小。如果說能夠達(dá)到目前魂天的平均水平,那么2500場對(duì)局內(nèi)幾乎必定通關(guān)

2.給定順位分布,進(jìn)行一定數(shù)量對(duì)局?jǐn)?shù)所得到的實(shí)際順位分布
其本質(zhì)就是個(gè)獨(dú)立重復(fù)試驗(yàn),假定樣本的順位分布為[0.25,0.25,0.25,0.25]
對(duì)每一特定的對(duì)局?jǐn)?shù),重復(fù)10000次實(shí)驗(yàn)
2.1:對(duì)局?jǐn)?shù)n=100

列表從左到右分別為平均順位在[<2.25,2.25-2.35,2.35-2.45,2.45-2.55,2.55-2.65,2.65-2.75,>2.75]區(qū)間內(nèi)的頻數(shù)和頻率
2.2:對(duì)局?jǐn)?shù)n=1000

????列表含義同上,可以看到,此時(shí)全部的樣本都落在[2.35-2.65]這個(gè)區(qū)間上
????此時(shí),看似實(shí)際成績與真實(shí)成績十分接近了,但是
????考慮牌譜屋的數(shù)據(jù)(見上),相鄰段位的平均順位差距只有0.02-0.03,基于此,特地再拿出2.4-2.61這個(gè)區(qū)間段,以0.03為間距進(jìn)行統(tǒng)計(jì),得到如下結(jié)果:

????第一項(xiàng)是平順2.4-2.43的頻數(shù),第二項(xiàng)2.43-2.46,以此類推
可以看到:
????即使是n=1000,反映出的水平與真實(shí)水平差一兩個(gè)(甚至更多)段位也是非常正常的事情,如果n=100,那么其成績分布方差是非常大的,也就是說,100場對(duì)局?jǐn)?shù)所得戰(zhàn)績,與你的運(yùn)氣是有很大關(guān)聯(lián)的,其實(shí)際成績與真實(shí)水平差別很大,因此拿100多場的戰(zhàn)績來說明實(shí)力是沒有什么說服力的。
(關(guān)于對(duì)局?jǐn)?shù)與真實(shí)水平關(guān)系的討論在別的專欄也有看到過,并且還有更深入的分析,這里只是粗略地模擬一下)

3.兩個(gè)不同段位的玩家,進(jìn)行一定數(shù)量對(duì)局的勝率
處理方法是:先按照每個(gè)玩家的順位分別得到二者一局的順位并進(jìn)行比較,如果相同,則此局作廢重開,重復(fù)n次實(shí)驗(yàn)
3.1:對(duì)局?jǐn)?shù)=10
魂天vs普通玩家(順位為0.25,0.25,0.25,0.25)

列表從左到右依次為魂天獲勝[<=3,4,5,6, >=7]場的頻數(shù)
在實(shí)力相差很大的情況下,只進(jìn)行10個(gè)半莊的對(duì)局,弱者勝,平,負(fù)的頻率分別為0.25,0.23,0.52,可以看到,魂天與一個(gè)一般玉場玩家對(duì)局10個(gè)半莊,也有1/4的概率是負(fù)的
魂天vs雀圣1(順位為0.27,0.26,0.255,0.215)

列表含義同上
弱者勝,平,負(fù)的概率分別為0.32,0.24,0.44,二者勝率差進(jìn)一步縮小
3.2:對(duì)局?jǐn)?shù)=100:
魂天vs普通玩家

列表為魂天獲勝[<40,40-49,50,51-60,>60]場的頻數(shù)
弱者勝,平,負(fù)頻率為:0.11,0.04,0.85
此時(shí)展現(xiàn)出了還不錯(cuò)的區(qū)分度,但弱者仍有0.1的概率戰(zhàn)勝強(qiáng)者
魂天vs雀圣1

列表含義同上
弱者勝,平,負(fù)概率為:0.26,0.07,0.67
????結(jié)論:兩個(gè)玩家水平越接近,要區(qū)分其水平所需要的對(duì)局?jǐn)?shù)也就越多。就雀魂本身的運(yùn)氣性而言,區(qū)分頂尖玩家和處于中上水平的普通玉之間玩家,哪怕是用10個(gè)半莊也不能完全區(qū)分出水平。而比賽場玩家每次對(duì)局也就1-2個(gè)半莊,幾乎沒有比賽場會(huì)以每人10半莊為單位去進(jìn)行。那么在這種情況下,只要實(shí)力差距不是太懸殊,那么運(yùn)氣成分還是相當(dāng)可觀的。對(duì)于四象戰(zhàn)這種頂尖選手的對(duì)局,幾乎看的就是選手的運(yùn)氣。

? ?
????通過以上幾個(gè)模擬,可以看到,在短期對(duì)局中,雀魂的運(yùn)氣成分確實(shí)占最終成績的相當(dāng)一部分比重。而對(duì)于1000場以上的對(duì)局,實(shí)力還是占主導(dǎo)地位。只要實(shí)力足夠,那么上魂天也只是時(shí)間問題(當(dāng)然隨個(gè)體屬性(狗力)不同對(duì)局?jǐn)?shù)還是會(huì)有較大變化)。同時(shí)也可以看到,在一段時(shí)間的對(duì)局中,掉段,戰(zhàn)績特別好或者特別差,這些都是非常普通的現(xiàn)象,只要個(gè)人的打法固定,心態(tài)沒崩,對(duì)這些其實(shí)不需要特別在意,更不要因?yàn)槎虝r(shí)間的波動(dòng)來結(jié)果論地改變自己的打法,這樣反而會(huì)更不利。(當(dāng)然這并不是說不能改變,只是強(qiáng)調(diào)不能根據(jù)一兩局的結(jié)果來草率地否定之前的打法。)麻將的運(yùn)氣成分終究還是很大的,所以在對(duì)局的過程中,我們更應(yīng)該去關(guān)注做牌的思路,過程等問題,而不是簡單地根據(jù)最后和了還是銃了來進(jìn)行評(píng)價(jià),把該做的都做好,成績自然會(huì)得到改觀。最后祝大家雀力日進(jìn),早日升到魂天!


附源代碼:
1.
注:這里用到了第三方模塊numpy,需要先安裝對(duì)應(yīng)模塊才能使用
另外也嘗試使用函數(shù)遞歸進(jìn)行分析,雖然結(jié)果確實(shí)是精確了那么一些(沒有掉段的近似處理),但是程序運(yùn)行實(shí)在是太慢。
本人也只是初學(xué)小白,目前想不出更優(yōu)解,如果有更好的算法歡迎大佬評(píng)論指出!
(使用遞歸函數(shù)的代碼如下:)
2.
3.