利用MATLAB逆推英雄聯盟護甲值—傷害減少率公式

遊資網發表於2020-03-31
我們已經知道,英雄聯盟中的傷害公式採用的是乘法公式,角色的護甲值影響的是受到的傷害的減少率,如圖,拳頭已經貼心地標出來了。

利用MATLAB逆推英雄聯盟護甲值—傷害減少率公式

那麼,如何才能知道護甲值是通過什麼公式得到這個減少率的呢?可以借用MATLAB軟體裡的曲線擬合功能得出公式。

1、我們在訓練營中記錄下眾多護甲值以及與其對應的傷害減少率,並錄入Excel中(大小順序無所謂)。

利用MATLAB逆推英雄聯盟護甲值—傷害減少率公式

2、開啟MATLAB,並匯入Excel中的資料

利用MATLAB逆推英雄聯盟護甲值—傷害減少率公式

3、採用列向量的格式分別匯入護甲值和受到的傷害的減少率

利用MATLAB逆推英雄聯盟護甲值—傷害減少率公式

4、修改一下列向量的名字,方便識別

利用MATLAB逆推英雄聯盟護甲值—傷害減少率公式

利用MATLAB逆推英雄聯盟護甲值—傷害減少率公式

5、開啟曲線擬合工具箱

利用MATLAB逆推英雄聯盟護甲值—傷害減少率公式

6、選擇以護甲值為x軸資料,受到的傷害的減少率為y軸資料

利用MATLAB逆推英雄聯盟護甲值—傷害減少率公式

7、由於護甲值屬於開放數值,可以無上限,而受到的傷害的減少率屬於封閉數值,範圍是0到1。在Tools-Axes Limits中調整一下xy軸的最小最大值。

利用MATLAB逆推英雄聯盟護甲值—傷害減少率公式

8、好了,這時我們可以看一下圖中,黑色離散的點就是我們錄入的資料,而藍色連續的線就是y=f(x)的函式的影象,也就是我們所想要逆推的公式的函式影象,我們需要通過使藍色線儘量吻合黑色資料點,從而逆推出公式。

利用MATLAB逆推英雄聯盟護甲值—傷害減少率公式

9、通過調整MATLAB的逼近方式,可以調整藍色線的形狀。

利用MATLAB逆推英雄聯盟護甲值—傷害減少率公式

10、這裡可以看到,通過選擇有理數逼近,且分子分母中自變數最高次數都為1次方時,曲線最為吻合。

利用MATLAB逆推英雄聯盟護甲值—傷害減少率公式

11、在Results中可以看到結果。

利用MATLAB逆推英雄聯盟護甲值—傷害減少率公式

12、如圖,SSE(和方差)表示擬合程度,SSE越接近0,說明擬合程度越高。同樣,R-square(確定係數)也表示擬合的程度,R-square越接近1,表明擬合程度越高。在這裡可以看到,擬合程度是很高的,基本可以確定這就是我們要找的公式。接下來就可以讀取公式了,可以看到f(x)=(p1*x+p2)/(x+q1)是該公式的基本形式,下面緊接著提供了常數p1,p2,q1的值。得出公式:

利用MATLAB逆推英雄聯盟護甲值—傷害減少率公式

利用MATLAB逆推英雄聯盟護甲值—傷害減少率公式

13、考慮到遊戲設計的公式不會如此古怪,將各常數近似簡化後,得出如下公式:

利用MATLAB逆推英雄聯盟護甲值—傷害減少率公式

即:

利用MATLAB逆推英雄聯盟護甲值—傷害減少率公式

14、我們進入訓練營驗證一下。

利用MATLAB逆推英雄聯盟護甲值—傷害減少率公式

護甲:139

利用MATLAB逆推英雄聯盟護甲值—傷害減少率公式

可以看到,的確是58%

利用MATLAB逆推英雄聯盟護甲值—傷害減少率公式

護甲:184

受到的傷害的減少率=184/(184+100)=0.6479=65%

利用MATLAB逆推英雄聯盟護甲值—傷害減少率公式

同樣可以看到,的確是65%

利用MATLAB逆推英雄聯盟護甲值—傷害減少率公式

再試一個,護甲:266

受到的傷害的減少率=265/(265+100)=0.7260=73%

利用MATLAB逆推英雄聯盟護甲值—傷害減少率公式

依然符合,基本可以確定這就是正確的公式。

15、我們還可以思考一下設計師為什麼要選擇一條這樣的公式。我們很容易就可以想到,受到的傷害的減少率是有個範圍的,大小在0到100%,假如這個減少率大於100%了,那就是無敵了,因此這是一個封閉的數值,是有上限的,上限為100%,同時,它還不能達到100%,因為達到100%也意味著無敵了。那麼我們可以看一下這條公式的函式影象,當護甲值趨於無窮大時,受到的傷害的減少率無限趨近於1,但永遠也無法達到1,非常符合需求。同時,從函式影象也可以輕易看出,當護甲值越大時,受到的傷害的減少率的增長速率越小,意味著當玩家護甲值越高時,再購買加護甲的裝備的收益也就越小了。

利用MATLAB逆推英雄聯盟護甲值—傷害減少率公式



相關文章