爐石競技場均七勝,求勝率(這是個嚴肅的數學問題)?

由於這道題目標答主非爐石圈人而是各位數學界人士(也不知道各位大神看不看得上這種問題),所以在這裡先把背景介紹一下。

爐石競技場機制是三敗出局,只要沒三敗可一直繼續直到你十二勝,獲得十二勝便不能再繼續。遊戲中可以中途放棄退出。(感覺把這個考慮進去的話可能這題就沒法答了,所以這個因素可以不予考慮。不過如果有大神足夠牛。。。請你把我這句話給忽視了)。問場均七勝的話勝率是多少。(至於為何求七勝,是因為七勝在爐石基本意味著可以把進入競技場的門票賺回來而且免費多獲得一個卡包(100金幣),俗稱『永動機』,所以場均七勝是每個競技場玩家追求的目標)

在看爐石競技場直播最近經常聽到主播提起勝率的問題,現在主流意見是場均七勝看做7-3所以勝率是70%。當然明眼人一眼就能看出這是有問題的。我自己試著解了一下,發現因為有不到十二勝則敗場必定為三,而十二勝則敗場必不為三這兩種情況,所以完全沒有頭緒啊,然而因此對這個問題的答案更加感興趣,於是便跑來知乎求助各位大神了。。。

這題的答案不可能是確定的數,因此答案可以是範圍可以是表達式可以是圖表。。。總之能讓廣大知友信服就行


雖然拖了一段時間,不過我還是來答下這個問題。

我們可以先簡單的定出(70%,72.3%)的上下界,這裡很容易就看到:
1、存在12勝的情況,使得場均7勝情況下平均負場小於3,因此勝率一定大於70%。
2、在所有場次勝率一致的情況下,這個勝率為72.3%(感謝 @汪軻 提供的解答過程)。然而後面的場次勝率一定低於前面的場次——相對弱的對手更容易被淘汰,留下來的都是戰鬥力較高的玩家——也就更容易給你造成麻煩。72.3%並不是一個實際上正確的答案。

然而怎麼找這個中間的具體值大概要開開腦洞了,我是按照以下這些思路去做的:

1、假定所有玩家的勝率符合平均值50%,標準差未知的正態分布(事實上大概略有出入)。
2、假定玩家間交手勝率符合Log5公式,這東西被證明適用於棒球和籃球賽事,其共同的特徵或許可以認為是:比賽最終結果可以被認為是大量發生的概率事件的結果總和——和爐石傳說這遊戲相當接近。我沒法驗證這個東西,但是它看起來還算符合直覺。
3、爐石盒子這個插件曾經發過一些使用其插件玩家的數據報告,比如爐石盒子一周天梯及競技場數據統計_17173爐石傳說專區 。然而這部分玩家很難代表總體,比如根據其各勝率算一下的話總勝率在54.4%左右。
4、這部分玩家應該接近於「從全體玩家的分布中截取出的一塊」而不是因為這個插件,他們會單獨得到一個分布(雖然應該承認,爐石傳說盒子在打競技場時提供了一定優勢)。
5、然後,找一個程序員……

模擬過程是:
1、生成10w個玩家,為他們標設一個戰鬥力值(即對抗所有玩家後的勝率統計),戰鬥力的分布符合正態分布,標準差可定。
2、從中選出一個平均戰鬥力X的群體(使用盒子插件的用戶群),單獨記錄他們的情況——請注意這裡有所有數據中最不科學的部分:我根據這兩個星期玩爐石的情況,大致認為爐石盒子的用戶佔總用戶數的四分之一……
3、把所有玩家扔進競技場。玩家選擇對手的條件是:只找與自己勝負場相同的人進行遊戲,如果不符合,就照勝負場相差1場的,盡量模擬爐石競技場的實際對戰環境。
4、兩個玩家相遇時,根據戰鬥力決定獲勝幾率,記錄相應勝負場。
5、累積到3負或者12勝結束一次競技場,記錄玩家勝負場情況。
6、把他們再扔進競技場99次,計算場均。

(上圖為盒子統計報告頁面結果,下圖為模擬結果)
比如這個是:總體標準差11.5%,盒子插件用戶平均戰鬥力0.575的情況。試了多組數據,很難做到完全貼合(1-3勝的實際情況一直會偏高),這是表現比較好的一組搭配。

在這個情況下,場均7勝需要怎樣的勝率呢?我們按正負0.05場(如7勝就要求6.95-7.05)的範圍來看的話:

百分位是指處於所有玩家中前百分之多少的位置。

啊總之回到原題:
場均7勝,大概需要你在競技場中維持71.1%的總勝率。而你事實上的實力要比這個更高——假設你從0勝開始,隨機碰到卡組隨機的玩家時,你應該有77%以上的勝率。達到這個水平後,我們就可以討論一下場均7勝的問題了。

不過大概只有不到1%的玩家實際做到了這些。


我把問題重新表述為:一名玩家從0勝0負開始進行競技場,每場遊戲中該玩家贏的概率為p,輸的概率為(1-p),且每場遊戲間獨立,玩家累計3負場或12勝場就出局。設這名玩家到出局為止,勝場數為X。問當p等於多少時,X的期望等於7。

這個問題我解的時候感覺似乎用窮舉更簡單。
(1) 對於i=0到11,因為戰績一定是i勝3負,且最後一場一定是負,所以
P(X=i)=inom{i+2}{2}*p^{i}*(1-p)^{3},  (i=0,...,11)
(2) 對於i=12,戰績可能是12勝附上0負、1負或2負,並且最後一場一定是勝,所以
P(X=12)=inom{11}{0}*p^{12}+inom{12}{1}*p^{12}*(1-p)+inom{13}{2}*p^{12}*(1-p)^{2}
(3) 平均勝場mathbb{E}(X)=sum_{i=0}^{12}{i*P(X=i)}=3p(26p^{13}-34p^{12}+frac{1-p^{12}}{1-p})

然後我用Matlab求解了一下,當mathbb{E}(X)=7時,解得papprox 0.7230858911approx72.3\%


這裡有個問題。。。爐石的競技場匹配是否是隨機匹配。如果不是,而是你n勝時匹配的也是n勝的對手,那麼「勝率」本身毫無意義。
你第一場隨機到的都是0勝,可能有0/0,0/1,0/2的,平均對手實力比較弱。而你5勝時匹配的是5/0,5/1,5/2的話。。。。本身就沒有統一的"勝率"
————————--
如果是完全隨機匹配,也就是說每場的對手的水平期望是完全一樣的。的獲勝概率是完全相同的,那麼我支持前面幾位答主的意見。
但就我玩過不多的幾次爐石的體驗而言,我傾向於爐石競技場匹配比較接近前一種猜測。


p=0.72308589114202431560...

www.wolframalpha.com/input/?i=78+x^14-102+x^13%2B3+x^12%2B3+x^11%2B3+x^10%2B3+x^9%2B3+x^8%2B3+x^7%2B3+x^6%2B3+x^5%2B3+x^4%2B3+x^3%2B3+x^2%2B3+x%3D7

一次性解決所有問題


雖然有些偏題,還過了一年時間,不過我還是來強答下這個問題

順便來個人算下開包的概率吧


如果說這個人一次十二勝都沒有打過,那麼勝率就是70%;
如果說這個人十二次中有七次打12-0,五次就打0-3,那麼勝率就是85.9%
所以說勝率不是一個確切值,而是在70%~85.9%之間浮動的。
一般情況下勝率大約是72%,並根據這個人打競技場的風格上下浮動。
如果這個人打競技場求穩,那麼勝率會低一些;反之,勝率會高一些。
另外,這個問題不能分析12-0,12-1的確切概率,因為勝場情況不是平均分布,而且和玩家選牌風格也是密切相關的。


知乎慣例,先看看70%是否正確。
首先這個問題並不是相對獨立的伯努利實驗,分布肯定不是二項分布,因此說勝率是70%應該是不正確的。
為了證明這個問題,我寫了一個小程序。源代碼已上傳至百度網盤。hearthstone.cpp_免費高速下載
將勝率設為0.7,模擬三次,結果如下:(為了保證真實性我還是貼圖吧)

可以看到勝率是70%吧……而平均勝場只有6.5左右。
下面我們來寫一個計算真正勝率的程序,就用二分法好了,誤差定在0.001。程序還是放在網盤:hearthstone(1).cpp_免費高速下載
結果如下:

可以看到勝率約為72%,才能保證場均7勝。綜上,70%的說法是顯然有問題的,應為72%左右


《每一個7勝的成功者背後,都有一個1.2勝的犧牲者》

你的問題是:「場均七勝的話,勝率是多少?」

我的回答是:每戰勝率穩定為72.3%時,勝場數平均為7場。


很多回答得出了72.3%這個結果,我也只能理解到這一步了。
這個計算方法的前提是某玩家的勝率固定,當然這有違現實。你所說的到7勝就退出,約等於之後故意把勝率將為0,這就不符合「勝率固定」的前提了。還有越到後面勝率越低向50%這個事實,也難以體現。

我對遊戲不了解,這個結果可能不夠指導成功,但是按照前提得出的這個結果絕對正確。我的數學演算法思參考了這個例題:&<有試驗終止條件的事件的概率求法&>三紅球終止事件 https://wenku.baidu.com/view/5de02954d5bbfd0a795673bb.html

開始說正題演算法。一次完整的競技場遊戲會有如下15種情況。分為十二勝結局和三負結局兩種互異結局,各用一套公式。其中0負和0勝兩種情況用簡化公式。這個計算方法的前提是某玩家的勝率固定,更像是自己做抓球問題。那麼無論其勝率是多少,這15種情況的概率之和都是100%。在這個Excel表格里勝率變數的變動始終驗算正確。你可以隨便輸入數值來看看結果。

關於你所關心的七勝,樣子應該是:10次勝場分別為8、7、8、6、5、9、6、4、10、7。10次中七勝以上的次數不超過6次。我不知道遊戲中一次6勝加一次8勝的獎勵等於2次7勝。

另外我有興趣知道賭場老闆設置這個規則,是賭場贏還是賭客贏。這就取決於獎勵了,我不了解遊戲,感興趣的人可以研究一下。假設只有兩組人比賽,優秀組的人只碰上失敗組的人,兩組各自勝率固定,那麼當優秀組以72.3%的勝率達到平均7勝的成績,那麼零和遊戲失敗者以27.7%的勝率每次只有1.15勝的期望。有一個7勝的成功者,就有一個1.2勝的犧牲者。


爐石競技場匹配機制是按照勝負場數來匹配,所以打的場次越多,單局勝利越接近50%,不知道題主求競技場勝率的意義是什麼,

按照爐石這套匹配機制,大約只有8.8%左右的人能打到7勝以上,所以我覺得這個結果更有參考價值


勝率在70%-84.8485%之間.
定義勝率=(總勝場)/(總勝場+總負場)
設總場數為w,贏12場輸2場的頻率為p1,贏12場輸1場的頻率為p2,贏12場輸0場的頻率為p3,贏0場輸3場的頻率為q0,贏1場輸3場的頻率為q1,...,贏11場輸3場的頻率為q11,
已知12sum_{i=1}^{3}{p_{i} } +sum_{k=0}^{11}{kq_{k} } =7,求frac{w(12sum_{i=1}^{3}{p_{i} }+sum_{k=0}^{11}{kq_{k} }  )}{w(2p_{1} +1p_{2} +0p_{3}+3sum_{k=0}^{11}{q_{k} }  )} 的範圍.
典型的線性規劃問題,用excel求解可得2p_{1} +1p_{2} +0p_{3} +3sum_{k=0}^{11}{q_{k} } 的最大值為3,最小值為1.5.
frac{7}{7+3} =0.7,frac{7}{7+1.5}=0.848485


設:一共玩了N次,12勝X次,平均7勝,則總勝7*N,總局數為(10*N-X)。總勝率為:7*N/(10*N-X)。當X=0,總勝率為70%,所以這個估算沒問題。

如果你假設每局的勝率一致,這個假設就是有問題的。


玩爐石,但是這個問題和爐石無關,題主可以關注插板法。就是在12勝中插三個板子,但是這個辦法會默認勝負概率各半。


本人數學差的,會碼點代碼,用python模擬了下概率分布圖。

假設+要素:
1,每盤取勝概率一樣
2,當輸連續三盤,遊戲結束
3,當玩完12盤,遊戲結束
4,模擬100000次遊戲
5,以下為,玩家單盤勝率,從0.1,0.2,0.3 到1,的10000次遊戲勝盤分布圖
6,以下橫軸為勝盤數,縱軸為100000次遊戲中,獲得該勝盤數的次數
7,最後一張圖為95%概率,一次遊戲中獲勝盤不低於該y軸盤數。要獲得「永動機成就」,既不低於7盤的概率,對應x軸玩家勝率大約要高於82%
8,talk is cheap, show me the code ,代碼在最後面
9,程序無優化,無仔細驗證過,可能存在邏輯錯誤。


玩家勝率為0.1, 平均數為0.36975盤

玩家勝率為0.2,平均數為0.94437盤

玩家勝率為0.3,平均數為1.782盤

玩家勝率為0.4,平均數為2.94847盤

玩家勝率為0.5,平均數為4.4116盤

玩家勝率為0.6,平均數為6.04975盤

玩家勝率為0.7,平均數為7.77181盤

玩家勝率為0.8,平均數為9.35842盤

玩家勝率為0.9,平均數為10.75879盤

玩家勝率為1,平均數自己瞧

縱軸為勝盤數,橫軸為玩家勝率。
當要保證95%的概率,每次玩12盤遊戲可以獲得7盤勝,既』爐石永動機『,大概要保證勝率在82%。

代碼:
import random
import pandas as pd
import matplotlib.pyplot as plt
import statistics

def one_game(p):
w,f,g=0,0,0

while True:
win_fail_p=random.uniform(0, 1)
if win_fail_p&

g=g+1
w=w+1
f=0
if win_fail_p&>p: #fail
g=g+1
f=f+1
if g==12 or f==3:

break
return w


def lot_game(p,number):
a=[]
for x in range(0,number):
a.append(one_game(p))

c=statistics.mean(a)

b=[]
b.append(a.count(0))
b.append(a.count(1))
b.append(a.count(2))
b.append(a.count(3))
b.append(a.count(4))
b.append(a.count(5))
b.append(a.count(6))
b.append(a.count(7))
b.append(a.count(8))
b.append(a.count(9))
b.append(a.count(10))
b.append(a.count(11))
b.append(a.count(12))

#計算0.05 值處
p_5_value=0
p_5_value_amount=0
for x in range(0,12):
p_5_value=p_5_value+b[x]
if p_5_value &>number*0.05:
p_5_value_amount=x

break


return b,c,p_5_value_amount

#計算概率分布
b=lot_game(1,100000)[1]

plt.style.use("ggplot")
ind = np.arange(len(b))
plt.bar(ind, b)
plt.show()

#計算5% 概率處
n=[]
for x in range (1,100):
print (x)
n.append(lot_game(x/100,100000)[2])


m=pd.DataFrame(columns=["value","p"])
m["value"]=n
m["p"]=range(1,100)
m["p"]=m["p"]/100

plt.style.use("ggplot")
ind = m.p
plt.bar(ind, m["value"])
plt.show()


既然有可能十二勝,而且十二勝的時候可能零敗一敗或者二敗,那麼是沒辦法算出一個準確概率的。如果想算出確切概率,需要額外條件,比如每場比賽勝率都是二分之一。


7勝3負必然來自7勝2負
因此P(7勝3負) = P(9場7勝)*P(一場負) = C29 * p^7 * (1-p)^2 * (1-p)
然後求極大似然,我反正是不會做


推薦閱讀:

為什麼爐石傳說的卡包賣這麼貴,其他暴雪遊戲都有打折?
為什麼天梯上很少有人帶死亡之翼?
如何評價爐石9.1版本改動爆出後各大論壇出現的棄坑論調?
暴雪是不是喜歡魚人,如果是的話為什麼?
為什麼網易熱衷於代理國外遊戲?

TAG:暴雪娛樂Blizzard | 數學 | 物理學 | 統計 | 爐石傳說Hearthstone |