從酒館經驗到金融複利|轉生成為魔物


3樓貓 發佈時間:2022-07-03 03:56:02 作者:手機用戶67681663 Language

酒館機制是一個現實中非常常見的模型,從銀行存款利息到房貸都有類似的影子。比如說房貸,30年利滾利,發現最後還款總額是當初借錢的兩倍之多。

我們先從增長率 r 說起。考過公務員的應該很熟悉 B = A*(1+r)。那麼連續增長 n 次,總的倍數就是 (1+r)^n 。現在假定銀行年利率非常誇張,為 r = 100%,那麼存一年的倍數為 (1+1) = 2,翻了一倍。而如果半年結算一次,那麼總倍數變為 (1+0.5)^2 = 2.25,發現倍數變多了。一般的,如果一年結算 n 次,則倍數為 (1+1/n)^n。n 趨於 ∞ 時,其極限是著名的 e,這便是所謂的複利。


這樣的論述有一個問題,即為啥把 1 年恰好均分為 n 段,不均分會不會使得倍數更大?也許 (1+0.1)(1+0.2)(1+0.3)(1+0.4) 會比 (1+0.25)^4 更優?

記1年分成任意的n段,增長率分別為 r1、r2、... 、rn。合起來為100%,即 r1+r2+...+rn = 1 。令 y = (1+r1)(1+r2)...(1+rn),求 y 的最大值。
由均值不等式,y ≤ ((1+x1)+...+(1+xn))^n = (1+1/n)^n。當且僅當 r1 = r2 = ... = rn = 1/n 時取等號。
由此看來,均分保證是最優的,而複利公式默認就是均分的。

對於編程選手,計算這個 y 的最大值也有 dp 的做法。(感謝 @有利 給出的方法。)
把它看做完全揹包問題。記總容量為V,第 i 個物品的容量為 i、價值為 W(i) = (1+i/V),求裝滿容量 V 得到的最大價值。f(n) 表示裝滿容量 n 得到的最大價值。
那麼,f(V) = max{ f(V-i)*W(i) },其中 f(0) = 1。
取 V = 10000,可以算出 f(V) = 2.718146,它非常接近 e。這個做法可以求得最大值,但是要解釋為啥是 e,需要參考之前純數學的做法。
對於最大值,按高考數學思維,第一反應是求導分析。而計算機思維看問題的角度又有所不同,換一個角度也許會帶來全新的體驗。

鋪墊完一些概念,我們回到正題。複利的增長率 r = 1/n,而我們酒館經驗的增長率 r 取決於使用的策略。
以常用情形為例,一次放 4 只等級相同的魔物,回收時為 0.7 倍經驗。現在考慮當前為 m 級,花費 33.3 小時,我們最多能翻幾倍。類似的,可以將 33.3 小時分為若干段。
分為 1 段:一次 33.3 小時,剛好從 1 級升到 m 級,新增了 4 個 m 級。(一次 33.3 小時是指到了 12 小時以後不回收,繼續放回升級。如果回收,那就變成 3 段時間了 33.3 = 12 + 12 + 9.3 )
分為 2 段:比如一次 10 小時,一次 23.3 小時。
...
一般的,分為 n 段,此時每段增長率為 ri = 0.7-a^hi,(a = q^-m,公比 q = 1.007,m 是當前等級)
且 h1+h2+...hn = 1,(hi 表示每段用時佔總時間 33.3 的比重,且合計為 100%)
類似地,有 y(n) = (1+4r1)(1+4r2)...(1+4rn) ≤ [ 1+4(0.7-a^(1/n)) ]^n
可以代入 n = 1 驗證,y(1) ≈ 1 + 4*0.7 ≈ 3.8,即分為 1 段時,倍數為 3.8 倍
和複利類似,只不過 y 的單調性有所變化,n 趨於無窮時,y 反而趨於 0了,這是因為回收只得到 0.7 倍經驗,反覆過多的利滾利反而把本金虧沒了。

上述分析看似很美好,但實際上忽略了底數 a 的變化,a 會隨著等級 m 的增大,慢慢的減小。其次,一個問題是認為上一次回收的經驗完全用於主力的升級,而忽略了接力狗糧的升級開銷,所以實際每段增長率比 ri 略小。修正完這兩點以後,最優解會稍稍偏離均分,而是呈現一個類似等差數列的分段形式。

儘管如此,均分為 n 段依然可以作為一個近似解,誤差在 1% 以內。至於最優解到底是幾小時一次,只需求 y 的極值點,不難推導留作習題。

另外一個常見的策略是階梯法,放入的4只的等級依次遞增。這種情況又有所不同,有待探討。

© 2022 3樓貓 下載APP 站點地圖 廣告合作:asmrly666@gmail.com