Tuesday 22 May 2018

10 years of Osu! 雜談(2) - pp篇

寫雜談~遊戲篇時突然想把一個問題單獨拿出來寫一篇:到底pp系統是好是壞?雖然作為分數時代#1引入pp系統我一定是受害者,不過都退隱了再追究排名的話實在有點無聊。不得不承認,pp系統比起單純ranked score更能準確反映實力。

這個系統大部分設計都沒問題:當然要弄一個star rating才能計算那張圖比較難,打難圖當然比易圖更能反映高層次的實力;二次方收斂的速度也沒問題,大概pp排位前20才對整體pp有較大的影響力,跟同期頂級圖包的數量也算吻合。

我最在意的是,SS所給予的pp會比非SS高一大截--以連續性來看這無疑是不合理的,但將統計模型套進去則可以得到一個更有趣的答案。

先把問題簡化為SS跟1 100 2種結果好了。我們將圖的難度跟玩家程度配對,假設每一個note的誤差都呈正態分佈$X\sim N(0, \sigma ^2)$。我想看到底標準差$\sigma$要到多少,拿到SS的機會才會比1 100更高?這個問題可以看成likeihood estimator的簡化版,利用標準差選出較大可能的結果。定義$p,q$為拿到300, 100的機會:

$p = P(|Z|\leq \theta _{300}/\sigma )$

$q = P(|Z|\leq \theta _{100}/\sigma )$

二次分佈可得 $P(SS) = p^n, ~P(1\times 100) = np^{n-1}(q-p)$

可得比例為 $LR(\sigma) = \frac{p}{n(q-p)}$。留意右方為homogeneous polynomial,所以我們可以用$p/q$對應$\sigma$。嫌太複雜的話可以考慮$n=500, OD=8$的狀況:

$\theta_{300} = 31.5, \theta_{100} = 75.5, n=500$

$LR(\sigma) = \frac{p}{500(q-p)} = 1 \Rightarrow \frac{p}{q} = \frac{500}{501}$

不難證明$\sigma \mapsto \frac{p}{q}$為單調函數,所以用電腦做二分法即可得到$\sigma \approx 10.1ms$。Unstable rate = 101是甚麼概念?大概就是4.5*上下的跳圖很難達到,串圖很好達到的準確率。這個數字正好證實了我的看法:擁有可以制霸某一層級的譜面的實力時,能否SS還是打出一兩個100只是機率問題,並無實力高下之分。

那麼打出一堆100機率又怎樣算呢?當$k \ll n$時
$P(r\times 100, 1\leq r\leq k) = \sum _{r=1}^k C^n_rp^{n-r} q^r \approx \sum n^r p^{n-r}q^r = p^{n-1}n(q-p)\frac{p^k-n^k(q-p)^k}{p^k-np^{k-1}(q-p)}$

誠然$C^n_r\approx n^r$是一個很粗的估算,但我們放大這個機率時所得$\sigma$的臨界點會向下,這樣我們仍然能拿到一個有效的下限:

$LR(\sigma) = \frac{p}{n(q-p)}\frac{p^k-np^{k-1}(q-p)}{p^k-n^k(q-p)^k}$

設$LR(\sigma) = 1$再化簡後神奇地得出以下等式:

$n^{k+1}(q-p)^{k+1} -2np^k (q-p)+p^{k+1} = 0$

當$k=1$時上式化簡為$(n(q-p)-p)^2 = 0$跟我們上面計算一樣,但當$n\geq 2$時上式則可以給予$\sigma$的下限值。上式除以$q^{k+1}$再將$x = p/q$代入後可得

$f(x) = n^{k+1}(1-x)^{k+1}-2nx^k(1-x)+x^{k+1} = 0$

看似複雜的等式其實有非常漂亮的解--首先對於所有$k$我們都能拿到一個實根$x_1 = \frac{n}{n+1}$:

$f(\frac{n}{n+1}) = n^{k+1}(\frac{1}{n+1})^{k+1} -2n(\frac{n}{n+1})^{k}(\frac{1}{n+1}) + (\frac{n}{n+1})^{k+1} = 0$

然後第二個實根約為$x_2 \approx \frac{2n}{2n+1}$而且$\lim _{k\to \infty}x_{2,k} = \frac{2n}{2n+1}$[雖然因為$k\ll n$這個並沒多大意義]:

$f(\frac{2n}{2n+1})=(\frac{n}{2n+1})^{k+1}-2n(\frac{2n}{2n+1})^{k}(\frac{1}{2n+1}) + (\frac{2n}{2n+1})^{k+1} < 2^{-k-1} \to 0$

計算$f'(x)$易得以上就是$x\in [0,1]$區間所有的實根了[然後還有$k-1$個在1附近的複根,k為偶數時會在$2-x_1$附近有第三個實根]。這跟上面$k=1$的結論一致:只要達到某個準確度,打出SS跟打出幾個100的差距並不大。

不妨看一下$n=700$的情況




留意$\frac{700}{701} \approx 0.99857, \frac{1400}{1401} \approx 0.999286$,當$k=7$時$x_2 \approx 0.999283$。來到這裡我們可以直接計算$n\mapsto \sigma$:


可得$\sigma \approx 31.12(-\log (1-\frac{p}{q}))^{-0.605}$,代入$\frac{p}{q} = 1-(dn+1)^{-1}$ ($d =1,2$)得到$\sigma \approx 31.12 (\log (dn+1))^{-0.605}$。巧合的是31.12這數字跟OD8的$\theta _{300}  = 31.5$非常接近。更神奇的是這對其他OD值也同樣成立:

$\sigma = (\theta _{300} - 0.4)(\log (dn+1))^{-0.605}$

回到OD8這個預設值,以主流長圖頂多1500combo上下來說unstable rate在100上下剛好夠用[如果取第二實根$x_2 = 1-(2n+1)^{-1}$則unstable rate需要在90上下]。這也跟主流SS紀錄的unstable rate相近[我是拿我2012年的圖出來看就是了...]。

上面的模型假設了每個note的誤差是一樣的,在實作當然不一定為真。引入數個不同的標準差$\sigma _1,..., \sigma _n$再計算二次分佈也可以得出相近的結果。另一個做法是將一個難的note看成若干($j$)個「標準」的note且假設在$k\ll n$時我們在這$j$個notes裡面頂多會打出一個100,那這個note的誤差標準差將為$\sigma ' = sd(jX) = j \sigma$。這個方法的缺點是只能考慮每個note的誤差標準差為$\sigma$的整數倍,不過將所有notes一起剁碎考慮就沒問題了呢。

TL;DR SS所給予的PP獎勵在連續性和數據上毫無意義,夠準的話SS就自然會出來 佛系SS

當然上面說了一大堆只是因為這邊有計算的空間,但更多的爭議點是在各種mod的PP加成,或者更一般來說pp系統算出來難的的圖是否真的難,打出高pp的玩家是否比低pp的人更強?這才是當初沒法量化的東西,也是設計pp系統的初衷。

我的看法會是偏向用大數據用玩家表現反饋譜面難度,因為玩家打不好是結果上的難,肯定比理論上的難更為直觀和準確。這樣做還有一個好處就是不用一直修--最近Osu才將不同mod的pp加成修過一次,但用結果論去看就不用進行人手調整了。即使公式當下是準確的,玩家的難所還是會隨時間/科技[例如從滑鼠改成繪版,從60Hz屏幕改成144Hz]改變,只有利用玩家數據自動調整有才辦法隨時反映出真正難的譜面和打到難譜面的玩家。

上面說到了一個重點:Osu最近才修過一次加成比重--修改的源頭是Sotarks也好,不是Sotarks也好都顯示出pp系統的問題:有公式就有法子濫用,結果就是大家為了pp被逼打性質單一的譜面。先不說濫用機制的人是不是智障,在部分玩家有pp的需求下供應跟上是遲早發生的事情。比較糟糕的是現在事情變得一發不可收拾:頂級玩家的小圈子從來不太在乎排名更迭,這下直接表示不玩了;剩下一堆中產玩家望著那虛偽的pp值死命衝刺,osu這個圈子似乎喪失了往日的創意和活力。

不過退一百步來說,有個完美準確的實力估算系統又如何呢?只要指標一天還在,主流玩家就會變成實力導向,非實力相關的譜面始終還是難以抬頭。要我說的話還不如回歸分數系統,實力指標乾脆不做也好,反正場外的人會自己做一個。就算想做官方實力指標也不應該放在當眼位置,最好跟排名剝離一下:只有當官方將遊戲樂趣定位在硬實力以外的東西,這遊戲才有辦法吸引各種不同的玩家,才有辦法多元化發展下去。

本來遊戲篇想說一下這幾年遊戲管理的危與機,不過眼下的Osu也沒過得有多好,所以那篇就留到我10+n年紀念時再發出來吧。[另外我好像已經寫不出很中文的中文了...]

wmfchris
21/5/2018 [剛好十年又兩個月]

No comments:

Post a Comment