武器升級概率問題!?

神器強化

現在有一把神器,初始為1級,可免費領取(即價值為0),可花費金幣對其升級,每次10000金幣,最多升到5級。

升級的成功率如下:

說明:1級武器強化時,有20%概率升到2級,10%概率升到3級,5%概率升到4級,65%概率不變。

3級武器強化時,10%概率跌到1級,20%概率跌到2級,20%概率升到4級,10%概率升到5級

問題:

(1)5級神器價值多少金幣?

(2)2、3、4級神器價值多少金幣呢?


是一個典型的馬爾可夫鏈,其一步轉移概率矩陣為:

其中第i行第j列的元素代表升級1次後,原來i狀態的武器升級為j狀態的概率,例如

  • 第1行第5列元素為0,代表1級武器升級1次後,成為5級武器的概率為0;
  • 第2行第2列元素為0.4,代表2級武器升級1次後,還是2級武器的概率為40%;
  • 第5行第5列元素為1,代表5級武器c升級1次後,還是5級武器的概率為100%;
  • 諸如此類。

根據Chapman-Kolmogorov方程,該馬爾可夫鏈的n步轉移概率矩陣為:

其中第i行第j列的元素代表升級n次後,原來i狀態的武器升級為j狀態的概率,例如2步轉移概率矩陣為:

  • 第1行第5列元素為0.03,代表1級武器升級2次後,成為5級武器的概率為3%;

以此類推,得到1級武器

  • 升級1次後,成為5級武器的概率為0%;
  • 升級2次後,成為5級武器的概率為3%;
  • 升級3次後,成為5級武器的概率為7.63%;
  • 升級4次後,成為5級武器的概率為12.99%;

......

  • 升級1次後,第一次成為5級武器的概率為0%;
  • 升級2次後,第一次成為5級武器的概率為3-0=3%;
  • 升級3次後,第一次成為5級武器的概率為7.63-3=4.63%;
  • 升級4次後,第一次成為5級武器的概率為12.99-7.63=5.36%;

......

所以求第一次成為5級武器所需升級次數的期望為(計算量較大,需要藉助計算機):

對應的每次升級花費10000金幣,那麼所需金幣數量的期望為160465.11枚。

PS:我想複雜了,最高票 艾慶興 的方法更好。

武器升級概率問題!? - 知乎

該方法用一步轉移概率矩陣表示如下,設武器價值行向量為:

分別代表1~5級武器的價值。

那麼有:

可轉換為如下線性方程:

解線性方程得到:

  • x1=0
  • x2=18023.3
  • x3=35232.6
  • x4=57441.9
  • x5=160465


算完以後發現,這遊戲太良心了,成功率簡直不能更高。

假設每個級別的武器的價值分別是x1,x2,x3,x4,x5.顯然,武器1的價值x1是0(免費)。

然後呢,根據轉移矩陣,我們可以得到這樣四個式子:

x1*0.65+x2*0.2+x3*0.1+x4*0.05+x5*0.0=10000+x1

x1*0.25+x2*0.4+x3*0.2+x4*0.1+x5*0.05=10000+x2

x1*0.1+x2*0.2+x3*0.4+x4*0.2+x5*0.1=10000+x3

x1*0.0+x2*0.1+x3*0.3+x4*0.4+x5*0.2=10000+x4

比如,第四行,第四把武器強化一次,投入x4+10000,產出的期望是x1*0.0+x2*0.1+x3*0.3+x4*0.4+x5*0.2

那麼,給x2,x3,x4,x5隨機值,然後用上面的式子迭代若干次,或者直接高斯消元解4元1次方程組,都可以求出x2,x3,x4,x5的值是:

x5 160465

x4 57441.9

x3 35232.6

x2 18023.3

也就是說,一把等級2的武器價值18000,等級3,4,5的武器價值分別是35232,57441,160465。

對了,請告訴我這是什麼遊戲,太良心了,我決定入坑


一種做法是,寫一個程序多次隨機模擬,得到升至2,3,4,5級的金幣的平均值,將這個平均值近似作為答案。這個演算法在現實應用中被廣泛使用(本人以前也是研究遊戲的,很多不好算的東西都是隨機模擬),缺點是精度不高。

另一種做法是解方程。比如要求升到5級的期望金幣,那麼記 f_i 為當前為 i 級,升到5級所需的期望金幣,其中 f_5=0 。以 f_4 為例:

f_4=10000+0.1f_1+0.2f_2+0.4f_3+0.2f_4+0.1f_5

解方程組即可。這樣可以很快求出精確答案。


點贊數最高的兩位已經給出一個解決思路了,以下我給出一個通過條件概率計算的思路。

N_i : 第一次強化到 level i 的所使用的次數 eg. 若 1-4-2-3, N_3 = 3, N_1 = 0

start: 以 start 作為起始等級

我們要求解的就是 E[N_i|start = 1] i = 2,3,4,5 , 並各自乘以10000元/次的費用, 就可以得到 level i 武器的期望價格.

顯然, E[N_i|start = i] = 0

因為以等級 i 作為起始點不需要任何強化

由性質: E[X] = E[E[X|Y]] ,

E[N_i|start = s] = E[E[N_i|N_j,start=s]] (1)

因為:

E[N_i|N_j,start=s]= (N_j|start=s ) + P(j,i) +

∑ P(j,k) (E[N_k|start=s] + E[N_i|start = k] )

(k ≠ i) (2)

其中右邊式子第一項表示條件給定的 N_j 次強化; 第二項表示以P(j,i)的概率僅一次從 等級j 轉移到等級i; 最後的求和項中考慮了所有其它強化結果k,每一項表示以P(j,k)概率,先發生 N_k|start=s 次強化,再以馬爾科夫鏈性質重置起始等級為k,要加上 E[N_i|start = k] 次期望的強化。

注意:

E[N_i|start = k] 是常量, 而 N_i|start = k 是隨機變數.

將 (2)式 代入 (1)式:

E[N_i|start = s] =E[N_j|start=s] + P(j,i) +

∑ P(j,k) (E[N_k|start=s] + E[N_i|start = k]+E[N_i|start = k] ) (k ≠ i)

用 X(i, s) 代替 E[N_i|start = s] :

X(i,s) = X(j,s) + P(j,i) + ∑ P(j,k) * { X(k,s) + X(i,k) } (k ≠ i)

i,j,s=1,2,3,4,5 (3)

求解出這個方程組中X(i,1) 的值,也就解決了最開始的問題。

歡迎指正。


算完之後發現還是直接用期望價值算比較簡單,但我一開始想到的就是這個先求期望次數再次數乘花費的笨辦法,就給大家看看傻瓜是怎麼算的吧

這裡首先認為玩家投入=價值

假設從i強化到5的期望次數是ti,那麼有

t1=0.65t1+0.2t2+0.1t3+0.05t4+1

t2=0.25t1+0.4t2+0.2t3+0.1t4+1

t3=0.1t1+0.2t2+0.4t3+0.2t4+1

t4=0.1t2+0.3t3+0.4t4+1

解方程組,得到t1=16.0465,t2=14.2442,t3=12.5233,t4=10.3023

那麼強5武器價值=t1×10000=160465

強4武器價值=(t1-t4)×10000=57442

強3武器價值=(t1-t3)×10000=35233

強2武器價值=(t1-t2)×10000=18023

再隨便延伸一下,此處可以投放防爆道具和祝福道具,且VIP6以上才能使用。道具可交易,在遊戲內可每日每角色少量產出,產出途徑需嚴控工作室,比如需要在某強對抗PVP玩法中拿到相當的擊殺或助攻等等……


當年玩傳奇征途練武器的時候,我也在思考成功率的問題,直到後面學了金融風險管理計算違約率,我才算把其中的原理搞清楚,計算這個要用到轉移矩陣,而且最好是用計算機去算,超過兩步的計算那會非常複雜。

以下為轉移矩陣的介紹:

轉移概率矩陣(又叫躍遷矩陣,英文名:transition matrix)是俄國數學家馬爾科夫提出的,他在20世紀初發現:一個系統的某些因素在轉移中,第n次結果只受第n-1的結果影響,即只與當前所處狀態有關,而與過去狀態無關。 在馬爾科夫分析中,引入狀態轉移這個概念。所謂狀態是指客觀事物可能出現或存在的狀態;狀態轉移是指客觀事物由一種狀態轉移到另一種狀態的概率。

簡要來說,就是列表示現在(now)的狀態,行表示下一次(next)的狀態,例如題主給出的這個表格:

我們先看縱向:

1級武器升級後還是1級的概率是65%;

2級武器升級後降到1級的概率是25%;

3級武器升級後降到1級的概率是10%;

4級武器升級後降到1級的概率是0%;

然後再看橫向:

1級武器升級後還是1級的概率是65%;

1級武器升級後升到2級的概率是20%;

1級武器升級後升到3級的概率是10%;

1級武器升級後升到4級的概率是5%;

1級武器升級後升到5級的概率是0%;

這道題是計算武器升級成功的概率和期望,武器分為1、2、3、4、5級,5級是最高級,一把武器能夠從1級升級到5級是小概率事件。

就像我們計算公司的違約率,公司的債券按信用等級可以分為A級、B級、C級、D級、E級(姑且有E級),公司從A級降到E級也是小概率事件。

那麼,我們需要分別計算期望,然後再計算總期望,我僅演示其中一種路徑:

我們假設武器升級四次才能成功,中間幾個「-」,就代表升級幾次:1-2-3-4-5:

20%*20%*20%*20%=0.000032;

累計花費:

10000*4=40000金幣;

路徑圖:

此外還有以下路徑等:

1-1-1-1-5:

1-1-1-2-5;

1-1-1-3-5;

1-1-1-4-5

也就是首尾不變,首是1,尾是5,中間三個數字,每個數字有四種變化(1,2,3,4),那麼一共就是64種路徑。

我們假設升級五次才能成功,中間幾個「-」,就代表升級幾次,比如:1-1-2-3-4-5;

首尾不變,中間四個數字,每個數字有四種變化(1,2,3,4),那麼一共就是256種路徑。

我們假設升級三次才能成功,比如:1-2-3-5;

首尾不變,中間兩個數字,每個數字有四種變化(1,2,3,4),那麼一共就是16種路徑。

我們假設升級兩次才能成功,比如:1-2-5;

首尾不變,中間一個數字,有四種變化(1,2,3,4),那麼一共就是4種路徑。

當然,還有可能升級到n次才成功,我們要把以上數據做期望,然而,我通過人腦已經無法計算了,需要用到計算機。

答案寫到這裡,實在是深感無力了,


期望價值法的思路是對的,但是在這裡顯然有一些毛病@艾慶興

因為這裡有個失敗率的問題(降級),也就是說價值期望的計算有正有負,前面的回答只計算了正向的,因此對於價值的估量有些偏高。那麼這裡思路出現了障礙,不妨換一種思路。

假設試驗無窮多次,計算提高1單位級別的平均成本。並且假定出現任何一個想要的結果(先定為5)後立刻更換新的原材料,即不考慮想要的結果繼續參與運算。

對級別1

一次試驗產生級別提高期望為

對級別2

一次試驗產生級別提高期望為

對級別3

一次試驗產生級別提高期望為

對級別4

一次試驗產生級別提高期望為

由於是無窮多次試驗,每個級別出現的次數的比例將趨於穩定(詳見概率的定義)

因此p1:p2:p3:p4=1:0.9:1:0.75

所以每一次試驗級別提高的期望是(Σpi*ui)/4=0.14875。(i=1、2、3、4)

提升4個級別到5,平均需要26.8908次試驗,也就是268908個金幣。(大概你沖270k金幣,如果氪不出來就可以卸遊戲了qwq)

順便一提,如果只需要提升到4,則每一次試驗期望高達0.27333,提升3個級別平均需要10.9757次試驗,需要110k。

如果只需要提升到3,則每一次試驗期望0.41,2個級別,4.8780次試驗,約合50k。

如果只需要提升到2,則每一次試驗期望0.55,1個級別,1.8182次試驗,約合20k。

二更:

後來想想,高級的價值應該要包含低級的價值更加合理,因為一方面高級的裝備一般要比低級有巨大的提升,另一方面高級的裝備很有可能是從某一個低級的強化上來的,打個比方,5從4強化上來,4本身就沒有了! 因此5的價值也要包含4的價值(qwq不知道我這樣強行解釋一波有沒有用。)


其實對題目中武器「價值」的理解會造成一定偏差,即:

是否將類似1-&>4-&>2(2在本輪第一次出現)這樣的情況考慮到2級武器的價值中,而5級武器顯然不存在這樣的問題,所以沒有出現這樣的偏差。

在我進行模擬的思路中,我在當前等級首次成為本輪模擬中最大等級時記錄數據,因此對於每次記錄的等級n,我沒有考慮1-&>n+1-&>n這種情況。畢竟假如我本來目標就是三級武器,一不小心直接拿了個四級,我當然就不會再冒著風險升級啦,所以這一輪升級就不會參與三級武器的價值計算了。

但是這個似乎並不是造成我和兩位高票答主 @艾慶興 @韓迪 的答案偏差的主要原因,因為他們採用的方法似乎也沒有考慮這種冒險降級的情況(轉移概率矩陣我並不太了解,如果我理解有誤望指正)。

我試著改了我思路中的一個地方:

原本的:某等級武器的平均價值=其在每輪中首次成為最高等級時的花費/其成為過每輪最高等級的輪數

結果見原答案

修改後:某等級武器的平均價值=其在每輪中首次成為最高等級時的花費/總模擬輪數

新的結果為

2 16318.26

3 30852.9

4 60771.72

5 160304.37

好像接近了一點。。。但是對於其意義我已經開始懵逼了。。

沒找到自己問題出在哪,果然還是要繼續提高自己的姿勢水平。希望有大神能找出我的問題,感激不盡!

——————————原回答———————————

還沒系統地學過演算法,所以試著模擬一下

python3實現

整體思路大致如下:

在每個等級利用輪盤賭演算法確定下一等級,當下一等級首次成為該輪模擬的最高等級時,將該輪當前花費計入該等級花費總和中,最後對每一個等級花費求平均值得到結果。

1000000次模擬結果為:

級別 價值

2 28647.704651973032

3 49476.4345998983

4 81560.42521597186

5 160726.85

每個等級花費總和:

{2: 16362910000, 3: 30940880000, 4: 60857290000, 5: 160726850000}

每個等級成為過該輪最高等級的輪數:

{2: 571177, 3: 625366, 4: 746162, 5: 1000000}

具體代碼如下

from random import random, seed
from time import time

seed(time())

# 每一輪中該level第一次成為最高level時將當前花費加入對應key的value中
value_sum = {2: 0, 3: 0, 4: 0, 5: 0}
# 每一輪中該level成為過最高level,則對應key的value+1
level_time = {2: 0, 3: 0, 4: 0, 5: 0}
# 最終平均值為兩者的商
probability = {
1: (0.65, 0.2, 0.1, 0.05, 0),
2: (0.25, 0.4, 0.2, 0.1, 0.05),
3: (0.1, 0.2, 0.4, 0.2, 0.1),
4: (0, 0.1, 0.3, 0.4, 0.2)
}
cost = 10000 # 每次花費金幣

class OneRun():
def __init__(self):
self.max_level = 1 # 當前達到過的最高等級
self.gold = 0 # 當前花費金幣
self.level = 1 # 當前等級

# 參數:每一級概率元組,返回下一級
def next_level(self, probability):
probability_range = [sum(probability[:i + 1]) for i in range(len(probability))]
point = random() # 產生一個隨機數
for level_1, _probability in enumerate(probability_range):
if _probability &> point:
level = level_1 + 1
break
return level

def run(self):
# 付錢
self.gold += cost
# 升級
self.level = self.next_level(probability=probability[self.level])

# 若為新的最高等級,記錄數據
if self.level &> self.max_level:
self.max_level = self.level
level_time[self.level] += 1
value_sum[self.level] += self.gold

if self.level == 5:
self.max_level, self.gold, self.level = 1, 0, 1
return None

else:
self.run()

# 實例
one_run = OneRun()

def main(time):
for i in range(time):
one_run.run()
print("級別 價值")
for level in range(2, 6):
print("{} {}".format(level, value_sum[level] / level_time[level]))

if __name__ == "__main__":
time = int(input("請輸入模擬次數:"))
main(time=time)
print(value_sum, level_time)


先說一下結論:

在題主所給的數據下,用MATLAB模擬消費金幣升級過程1000 0000次,平均升到5級需要160 500金幣。升到2、3、4級分別平均需要50002金幣,76446金幣,105240金幣。程序不方便附上。


和上年網易遊戲雷火盤古校招的一道筆試題很像啊


我想說,這個好幾年前就玩過了

馬爾科夫鏈有可以計算到收斂狀態前的期望,then 解了.就一條方程而已.

具體請去參考YYDZH上有關武器升級期望的帖子


推薦閱讀:

如何評價菲爾茲獎得主Vladimir Voevodsky?
一個放置於粗糙平面的立方體,作用於其中心和邊緣的兩個同樣大小的力,哪種作用力會更加容易把此立方體推動?
2的65536次方是多少?
如何通俗的解釋排列公式和組合公式的含義?
數學/演算法:正方形內有5個點,為什麼最近點對的距離小於邊長?

TAG:演算法 | 數學 | 概率論 |