武器升級概率問題!?
神器強化
現在有一把神器,初始為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級的期望金幣,那麼記 為當前為 級,升到5級所需的期望金幣,其中 。以 為例:
解方程組即可。這樣可以很快求出精確答案。
點贊數最高的兩位已經給出一個解決思路了,以下我給出一個通過條件概率計算的思路。
第一次強化到 level i 的所使用的次數 eg. 若 1-4-2-3,
以 start 作為起始等級
我們要求解的就是 , 並各自乘以10000元/次的費用, 就可以得到 level i 武器的期望價格.
顯然,
因為以等級 i 作為起始點不需要任何強化
由性質: ,
(1)
因為:
( ) P(j,i)
∑ P(j,k) ( )
(k ≠ i) (2)
其中右邊式子第一項表示條件給定的 次強化; 第二項表示以P(j,i)的概率僅一次從 等級j 轉移到等級i; 最後的求和項中考慮了所有其它強化結果k,每一項表示以P(j,k)概率,先發生 次強化,再以馬爾科夫鏈性質重置起始等級為k,要加上 次期望的強化。
注意:
是常量, 而 是隨機變數.
將 (2)式 代入 (1)式:
P(j,i)
∑ P(j,k) ( ) (k ≠ i)
用 X(i, s) 代替 :
X(i,s) X(j,s) + P(j,i) + ∑ P(j,k) { X(k,s) + X(i,k) } (k ≠ i)
(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個點,為什麼最近點對的距離小於邊長?