LV. 11
GP 13

【閒聊】論衝裝之, 強化機率率到底可不可信?(含數值模擬結果)

樓主 King帥 l76011427
相信很多人在強化裝備時, 總是滿心期待能夠上20、25、27、甚至MAX

但是大多數總是失敗收場, 簡單說就是挫折感很重

這個遊戲用到非常多的機率運算, 說他是一個機率遊戲也不為過

但是機率這個東西究竟能不能精準計算?

這個答案要看你從什麼角度下去回答

舉個例子, 我們都知道擲一枚銅板正面跟反面的機率是1/2(其實不一定對, 硬幣兩面印花不同, 重量就不同, 因此不是完美的1:1)

換個更容易懂的說法, 也就是如果有10000個人同時丟一枚銅板

那麼正面跟反面差不多會有5000人:5000人

丟銅板的次數如果趨近於無限次, 那就會得到1:1的結果

但是, 有10000個人丟銅板, 有沒有可能全部都是正面, 或是全部都是反面?

答案是機率不等於零, 也就是有此可能

所以你說要精準計算出1:1的結果可行, 但是10000個人同時丟出正面機率也不等於零

--------------------------------------------------------------------------------------------------------------

舉個例子, +19衝到+20的機率是35%, 這個敘述句可以換個問法

如果要把+19的武器衝到+20, 然後要有35%的機率, 那麼需要強化幾次?要有多少張白捲?

這個問題的答案很簡單, 你只要打開鐵匠鋪強化就知道了

就是強化一次, 需要4張白捲

--------------------------------------------------------------------------------------------------------------

問上面這個問題是想因我想引出接下來討論

常常看到版上有些人PO出+17不上防爆連用白捲過衝上+20

這個機率也很簡單計算, 既然是連過的話

那就是 p = 0.4 x 0.35 x 0.35 x 100% = 4.9%

也就是100個人有+17的武器, 官方送12張白卷, 平均只有4.9個人可以點上+20

--------------------------------------------------------------------------------------------------------------

好了, 由上面的討論, 我們可以簡單地知道, 非洲人口是一定大於歐洲人口的

這個其實就是官方所說的, 重點是強化次數

如果明天遊戲改版, 上線獎勵是100萬張白捲, 而且衝裝不用錢

那麼只要"次數夠多"就一定會有"非常高的機率"可以讓你有"某一次"當歐皇連過從+0衝到+30

注意這邊, 非常高的機率代表不是100%, 頂多99.999999%

但是有沒有可能一百萬張卷全部都失敗, 前面我們討論過了, "機率不等於零"

--------------------------------------------------------------------------------------------------------------

相信到這邊大家已經了解我想表達什麼了

同上面的討論, 問題應該是, 我+19衝到+20, 只衝一次過的機率是35%的話

那麼我如果要把機率提升到80%過, 那麼需要多少張白捲?

這個問題是高中數學, 需要計算log函數, 但這邊就不進行這種枯燥的數學計算

因為高中的這個題型機率是固定的, 而遊戲中+10~+20的機率是不一樣的

再者我們還需要統計強化張數、馬夫使用量、金幣等等其他數據

因此用手算起來會太麻煩

--------------------------------------------------------------------------------------------------------------

因此我們仰賴另一種方式, 就是電腦數值運算!

這邊先簡單介紹一下程式碼, 如果不想看可以直接跳到下面看結論

1.先把常用的參數拉到程式最上邊, 方便不同情形下的修改↓

衝裝有四種, 白捲不上防爆、白捲上防爆、祝卷裸衝以及祝卷+防爆, 這邊其實就是透過0跟1來當開關, 分別跑不同的迴圈, 以達到我們要的模擬效果

2.如果有人要問我電腦配備的話, CPU是5820K, 顯卡是GTX 970↓

不過由於我本身電腦還我再跑其他模擬及數值運算, 因此此次的模式是由單晶片系統來運行,
透過USB I/O port來接收結果, 只要程式碼對, 結論都一樣就是了~.~

3.主程式, 這邊如同第一點說, 將不同的參數呼叫對應的第1個副程式執行之↓

至於為什麼要這麼做原因很簡單, 白捲+1、祝卷+3, 同時還有上不上防爆的問題, 上了防爆失敗不會減少強化等級, 而不上防爆則會, 共有四種情形. 這邊還有用到C語言當中的指標運算, 簡單介紹一下指標就是把變數的記憶體位址丟給副程式, 但是副程式運算之後變數不會改變, 所以還要用到另一種演算法叫做Call by value、Call by address、Call by value resule...之前考高考的時候念的, 有點忘記正確是哪一個了, 如果有資工的歡迎指導@@

4.經過上一步的參數分析後, 就看我們是用白捲還是祝卷, 有沒有上防爆, 再呼叫第2個衝裝副程式, 總共有四種, 這邊只介紹一種, 就是祝卷+馬夫↓

這邊一樣是用指標運算, 把指標丟來丟去得到我們要的結果, 但如同我文章開頭說的, 隨著+10衝到+20, 衝裝的機率、卷軸數量、馬夫、金幣都是不同的, 因此這個副程式在衝裝迴圈當中會一直重複呼叫chance函數, 也就是抓取chance函數當中的機率(p)、卷軸數量(num)、馬夫(horse)、金幣(cost)值, 然後看衝幾次就把結果累加起來, 最後達到我們要的衝裝值時,就可以看總共衝了幾次裝、花了多少卷軸、馬夫用幾顆、金幣花了多少

5.這邊就是不同強化等級要往下一個等級衝, 所需要的參數值, 從+0~+30總共有31筆資料↓
至於你說為什麼不直接用網頁上的衝裝模擬器來點? 因為網頁上的衝裝模擬器還有動畫, 如果需要衝10000次你不就點一個禮拜不能休息...

6.這邊可以不看了, 這邊只是單晶片系統跟PC間的溝通, 直接呼叫函式即可↓

到這邊為止, 我們的自動衝裝模擬器已經建構完畢, 剩下就是開始跑數值模擬了!

--------------------------------------------------------------------------------------------------------------

開始模擬, 如果你跳過講解程式的部分請直接從這邊往下看

我的程式整體架構是這樣的, 設定一個衝裝初始值and衝裝最後值, 之後設定是白捲還是祝卷、上不上防爆, 在卷軸、防爆、金幣無限的情況下, 衝到我們要的值才停止, 並且回報衝了幾次裝(i)、花了幾張卷軸(num)、用了幾顆馬夫(horse)、以及花多少金幣(cost)

前面有說過, 由於機率越多次才可以趨近理論結果, 但礙於篇幅這邊先取簡單模擬5次所得的平均

1.一開始來個簡單的, 如果要從+0衝上+10不上防爆, 需要的參數如下


2.再來同樣是+0衝到10, 這次換成祝卷不上防爆, 資料如下

到這邊我們可以發現, 只要換成祝卷,雖然沒上防爆, 但是由於會跳+1~+3, 因此這邊強化次數(i)已經下降非常多了, 但是花費台幣卻大幅上升了XD

3.+0衝+10白捲上防爆

跟白捲裸衝相比, 由於上了防爆不會下降的關係, 平均衝裝次數由40.4次降到13.6次, 但還是比不上祝卷裸衝10.2次!

4.+0衝+10祝卷+防爆

由於祝卷會跳+1~+3, 又上防爆不會-1, 因此次數最少, 這個模擬結果跟我們認知相同!

--------------------------------------------------------------------------------------------------------------

接下來是+10衝+20的結果, 這個區間應該卡最多人, 上+20是一的大門檻

1.+10~+20白捲裸衝

到這邊你幾乎可以發現白捲裸衝要上+20幾乎是不可能的了....卷軸都要千張為單位, 就算你是長期壓等卷軸給你5000張好了, 你也沒那麼多金幣可以衝, 不過這邊其實也可以看出歐洲人跟非洲人的差別, 運氣最好的是強化411次, 最差強化到2000次, 像我前面說的,其實模擬越多組的平均會越準, 好比說1000次模擬結果平均值, 由於寫這個code已經花了我空閒時間3天了@@, 更大的數據就要在主程式外圍加一個迴圈,讓他跑1000次自行平均統計

2.+10~+20祝卷裸衝

我相信這邊還是有大課長可以達成的!

3.+10~+20白捲上防爆

雖然努力龜馬石可以達成, 但是不如把馬石放到+23以後衝+30CP值更高!

4.+10~+20祝卷上防爆

我想不會所有人+10就用祝卷, +11~+12上馬石, 那結果很簡單, 數據就是介於+10~+20上圖四種數據之間, 很意外地居然有一個4次的, 大概就是+2+2+3+3吧...也就是常在巴哈發文的超級歐洲人

--------------------------------------------------------------------------------------------------------------

1.+20~+30白捲裸衝

+20衝+30當然沒有人會用白捲裸衝, 這只是單純看看數據, 光是強化次數就要20000多次了,現在各伺服器第一名的大課長強化次數也還沒超過10000吧...而且金必須要10億...大概玩到遊戲倒了也沒辦法吧

2.+20~+30祝卷裸衝

這部分我相信還是有大課長可以完成的, 注意最後等級31或32是只28或是29時點祝卷跳+2或+3, 在遊戲中應該會直接顯示MAX了

3.+20~+30白捲上防爆



4.+20~+30祝武上防爆


--------------------------------------------------------------------------------------------------------------

題外話, 小弟武器從+17爆回+10後, 歷經千辛萬苦終於又點回+17

也終於在兩個禮拜前靠著三次白捲+馬石 p = 0.4 x 0.35 x 0.35 x 100% = 4.9% 的機率當一次歐洲人了...



但是+20後才發現根本無法脫離+20/+21地獄, 而且衝一次就要6萬6, 一下子就當乞丐了...

上20後有人建議+24或是+25再用祝武+馬石

不過小弟是建議+23就開始用祝武馬伕了

這邊有跑了一點數據分析

+20用白捲裸衝上+23


+20用百卷裸衝上+24


可以發現裸衝+23跟+24平均所花費的金額差非常多, 當然你如果是大課長, 或是像+24第五組模擬一樣, 只要6次就可以上, 那就沒什麼差別了, 但如果是一般玩家的話, 這幾百萬可以做很多事情呢@@

--------------------------------------------------------------------------------------------------------------

到這邊全部重要的數據都PO上來了, 當然我相信只跑5次平均還是有點太少的, 之後要更大數據的部分就我有時間再寫了...最後, 這邊必須要註明, 程式中所使用的機率, 是1~100出現的機率各是1%, 如果遊戲中的衝裝演算法不是這麼寫的話, 那就沒人可以知道了,好比說在某個條件下呼叫一個特殊程式之類的...程式經過Compiler(編譯)後, 成為Object code, 這中間有經過語彙分析、語法分析、語意分析、最佳化、生成目的碼等動作, 這是一個不可逆的動作, 如果要知道官方的演算法是不是"特別"演算法, 大概只能請高手去分析網路封包, 像當時二戰在破解迷密碼機一樣了吧!

最後的最後, 本人是從事電子電路產業的, 並不是資工或資訊本科系的, 寫程式是我的興趣, 僅以此興趣與各位大大分享, 如果錯誤, 或是觀念不正確, 也歡迎大家多多指教, 感謝!


--------------------------------------------------------------------------------------------------------------

還有想知道自己武器衝裝平均值的歡迎在下面留言要用白武還是祝武、上不上防爆

我可以幫大家跑個模擬~謝謝各位

板務人員:

64 筆精華,05/22 更新
一個月內新增 0
歡迎加入共同維護。


face基於日前微軟官方表示 Internet Explorer 不再支援新的網路標準,可能無法使用新的應用程式來呈現網站內容,在瀏覽器支援度及網站安全性的雙重考量下,為了讓巴友們有更好的使用體驗,巴哈姆特即將於 2019年9月2日 停止支援 Internet Explorer 瀏覽器的頁面呈現和功能。
屆時建議您使用下述瀏覽器來瀏覽巴哈姆特:
。Google Chrome(推薦)
。Mozilla Firefox
。Microsoft Edge(Windows10以上的作業系統版本才可使用)

face我們了解您不想看到廣告的心情⋯ 若您願意支持巴哈姆特永續經營,請將 gamer.com.tw 加入廣告阻擋工具的白名單中,謝謝 !【教學】