一個爐石競技場玩家的勝率是75%,他開一次競技場的最終勝場的數學期望是多少?
爐石傳說競技場的規則為三敗出局,最高12次勝利,12次勝利後無法再開局。如果一個人的勝率為75%,那他開始一次競技場在結束後勝利場次的數學期望是多少?
7.68場的結論是正確的。
如果你需要計算任意獲勝概率對應的期望場次,把具體的p代入如下公式:
其中 是12勝的概率, 是i-1勝的概率(i取1-12,對應0-11勝)。
也就是@馬頓 用的負二項分布,這是最簡單的方法。
@王平 用了隨機模擬,給出了勝率每增加1%對期望勝場的結果,我用Matlab給一個同樣的過程:
p(橫軸)是贏的概率,y(縱軸)是進場後的期望勝場數。
p=0:0.01:1;
n=length(p);
a=ones(n,12);
b=ones(n,3);
y=zeros(1,n);
for k=1:n
for i=1:12
a(k,i)=(1-p(k))^3*nchoosek(i+1,i-1)*p(k)^(i-1)*(i-1);
end
for j=1:3
b(k,j)=p(k)^12*nchoosek(j+10,j-1)*(1-p(k))^(j-1)*12;
end
y(k)=sum(a(k,:))+sum(b(k,:));
end
plot(p,y)
ps 如果函數nchoosek可以向量對向量做就不用套循環了,大神看到了求指教
結論:大約28.1%的情況下會12勝
計算過程:
方法1.
設在競技場過程中在第12次贏場之前我們輸了X次
方法2.
設在競技場過程中在第3次輸場之前我們贏了X次
解釋一下:
是負二項分布(Negative Binomial Distribution),或者帕斯卡分布(Pascal Distribution)。.
我定義 為 重複成功概率為 的二選一事件,第次成功之前失敗次數 的分布。
(有很多其他不同的定義方式,我這裡選擇的和mathematica中使用的相同)
方法一中贏一局競技場算成功,贏的概率是0.75,在第12次贏場之前輸場的數量的分布就是 。
就是在第12次贏場之前輸0~2次的概率。
方法二中輸一局競技場算成功,輸的概率是0.25,在第3次輸場之前贏場的數量的分布就是 。
就是在第3次輸場之前贏0~11次的概率。 就是第3次輸場之前贏大與等於12場的概率。(如果輸3次之前贏場超過12場那就是12-0,12-1或者12-2)
雖然可以手算,但是太煩了,我用了Mathematica:
In[13]:= Probability[0 &<= x &<= 11, x [Distributed] NegativeBinomialDistribution[3, 0.25]] Out[13]= 0.718872 In[14]:= 1 - % Out[14]= 0.281128 In[15]:= Probability[0 &<= x &<= 2, x [Distributed] NegativeBinomialDistribution[12, 0.75]] Out[15]= 0.281128
再解釋一下負二項分布:
我們扔很多很多次硬幣,假設這個硬幣扔到正面的概率是,在扔到第次正面之前我們扔出了次反面,那麼X就遵從負二項分布 。
要算扔出 次反面的概率,那就是要算:最後一次扔到正面的概率,乘上除掉最後一次之前扔出 次正面的概率。。
一共扔次硬幣,扔出 次正面的情況有 種,每一種情況概率是 ( 次正面和 次反面)。所以除掉最後一次之前扔出 次正面的概率是 。
上面這個值再乘上最後一次是反面的概率 就是我們要求的。
所以在扔出第 次正面之前,扔出 次反面的概率是
如果要求扔 到 次反面的概率,只需要對上式做一次求和就可以。
簡單寫了個程序,執行了一億輪競技場,每輪打到12勝或者3敗,勝率75%情況下平均勝場為7.68左右。更一(無)般(聊)地,把測試次數降到了一千萬輪每次,我把勝率從1%到99%的平均勝場都算了下,結果如下圖:
c#代碼如下:class Arena
{
Random seed = new Random();
int winPercent = 1;
long testRounds = 10000000;
public string testAll()
{
string result = "";
while (winPercent &< 100)
{
result += winPercent.ToString() + " " + test().ToString() + "
";
winPercent ++;
}
return result;
}
public double test()
{
double avereageWins = 0;
for (int i = 0; i &< testRounds; i++)
avereageWins += oneGame();
avereageWins /= testRounds;
return avereageWins;
}
public int oneGame()
{
int win = 0;
int lose = 0;
while (win &< 12 lose &< 3)
{
if (seed.Next(100) &< winPercent)
win++;
else lose++;
}
return win;
}
}
謝邀...然而我作為函數式玩家不做非泛化的題...
難度打到頂,勝率恆定為 ,然後贏 局或輸 局終止
求總的局數的期望...解答過程有點長,先給你看個數值上的答案吧:
平均進行局數是右下角10.24局,此時期望勝7.68場,敗2.56場
12勝情況下平均要進行13.44局比賽,另外成功的概率只有28%...
平均要打9場的樣子會挑戰失敗......
要保證每局82%的成功率才能保證50%的可能性完成挑戰
====================================
第一反應馬爾科夫狀態鏈...然後想到一共 個狀態...寫出來運算量大了點...
再想想發覺自己想多了,過程無關啊,只和結果有關...
最後一局贏的時候,前面必須贏 局,然後允許輸 局.
一共是 種情況,反之最後一局是敗同理 種情況...
總的情況數就是 種.
驗算下這個公式...沒錯...
ArenaTimes = Function[{w, l}, Gamma[1 + l + w]/(Gamma[1 + l]*Gamma[1 + w])]
ArenaTimes[12, 3]
(*455*)
------------------------------------------------------------------------------------
然後把概率分進去求和
還是根據最後一局勝敗分類:
數值驗證無誤,Oh,Yes...這玩意兒算著好煩...求錯我要哭了...
ArenaWinP[w_,l_,p_]:=1-w Beta[p,w,l] Binomial[-1+l+w,-1+l];
ArenaLoseP[w_,l_,p_]:=1-(1-p)^l p^w Binomial[-1+l+w,-1+w] Hypergeometric2F1[1,l+w,1+l,1-p];
Through[{ArenaWinP,ArenaLoseP}[12,3,.75]]
(*{0.7188723757863043`,0.2811276242136955`}*)
---------------------------------------------------------------------------------------
接下來算期望和:
封裝成函數吧:
Clear["`*"]
ArenaPropertiesName=ToString/@{"總可能勝負鏈數","勝利概率","失敗概率",
"勝利平均進行場數","失敗平均進行場數","平均進行場數","平均勝利場數","平均失敗場數"};
ArenaExpection[w_,l_,p_:p]:=Block[{AT,AL,AW,EL,EW,pro},
AT=Gamma[1+l+w]/(Gamma[1+l]*Gamma[1+w]);
AL=w Beta[p,w,l] Binomial[-1+l+w,-1+l];
AW=1-AL;
EL=(1-p)^l Sum[(i+l)Binomial[i+l-1,l-1]p^i,{i,0,w-1}];
EW=p^w Sum[(w+i)Binomial[w+i-1,w-1](1-p)^i,{i,0,l-1}];
pro={AT,AL,AW,EL/AW,EW/AL,EL+EW,p(EL+EW),(1-p)(EL+EW)};
Association@@Rule@@@Transpose[{ArenaPropertiesName,FullSimplify@pro}]]
ArenaPlot[w_,l_,pro_]:=Plot[Evaluate[ArenaExpection[w,l]/@pro],{p,0,1},PlotTheme-&>"Business",PlotLegends-&>pro]
ArenaPlot[12,3,{"平均進行場數","平均勝利場數","平均失敗場數"}]
可以看到當勝率為90%左右時平均進行的場數最高...另外勝率符合負二項分布...
也就是
從圖上看每局勝率低於60%的玩家洗洗睡吧,12勝不是你們的菜...
手機碼字,先寫個大概思路:
分別計算出0(勝場)-3(負場)、1-3、2-3、3-3…………10-3、11-3、12-2、12-1、12-0各自的概率,然後乘以各自的勝場數,最後相加得到的就是勝場的數學期望了。
0-3(就是連輸3場概率):25%×25%×25%
1-3(前三場任選一場贏第四場必輸的概率):(25%×25%×75%)×3×25%
其餘概率類推。
。
。。。其實這遊戲勝率不好這麼算……前幾勝有更大概率遇上水平低的玩家,就像股票沒有「假設都是理性投資人」的情況。所以大家的答案大概會和每天泡在競技場里的人相違背,很多時候都是三勝以後開始算一個大概的勝率……
打了n場以後,恰好輸3次的概率。因為第三敗總是最後一場,那麼要考慮的就是前n-1場中敗2場。也就是說在n-1場中選出2個敗場。也就是有(n-1)(n-2)/2種情況。
這個數再乘0.75^(n-3)+0.25^3就是勝利n-3場的概率。
所以勝利n場的幾率是((n-1)(n-2)/2)*(0.75^(n-3)*0.25^3)。n&>=4。
組合很差的高中生,錯了求輕噴。
手機拍屏見諒。圖2為最終勝利n場的概率。
上面的沒有考慮12勝的情況。
12-0的的概率為0.75^12,
12-1的概率為0.75^12*0.25*13
12-2的概率為0.75^12*0.25^2*14*13/2
加起來是0.3147837482392788
這題看著來氣,經常一勝,偶爾兩勝,很少三勝,往往不勝,幾乎沒有四勝以上的我回答不了!
其實這題用樹狀圖都可以做,可是沒有那麼大的紙
用個簡単的方法
毎一個格子代表一個狀態、裡面寫著経過該狀態的概率。
検索一下動態規劃
反正不是12勝就是13勝
假設他已經輸了3場,那麼他贏的期望場數是9場
推薦閱讀:
※從自然數 1 ~ n 中隨機取 m(1≤m≤n)個,其中最大數的數學期望是多少?
※能包含00~99的最短的長數字有多少個?例:1203包含12,20,03。
TAG:數學 | 概率 | 排列組合 | 爐石傳說Hearthstone |