View Single Post
Old 10-19-2016, 11:34 PM   #107
Full Tablet
FFR Player
 
Full Tablet's Avatar
 
Join Date: Aug 2016
Posts: 2
Default Re: hello allow me to introduce to u my Wife

For the Waifu system, I proposed using a Normal Distribution to fit the distribution of hit timings, and use the fit to give a value that represents the overall performance in a play. This post will explain that system with more detail.



In each chart there are both objects that have timings (regular arrows), and objects that have no timing window (hold notes, mines, etc...). Notes that have no timing windows remain unchanged in this proposed system (except for changing their point values, like the current Waifu system does with respect to the old DP system).

The total points obtained from objects that have a timing window is:
Number_of_Timed_Objects * Representative_Points

"Representative Points" is a value that represents the overall accuracy of the notes hit on the play. It's max value is 2 (hitting everything perfectly), and goes down to -8 (missing everything).

Calculating the Representative Points
1) Take the error in milliseconds of each note that was hit.

Take the sum of the squares of those errors (that value will be referred as "s"), and the count of the hits and releases that weren't misses (referred as "k").

2) Count the amount of misses notes (referred as "m").

3) With that information, calculate the Normal Distribution with zero mean that fits the data the best, obtaining the standard error Sigma (details of the calculation below).

4) Use sigma to calculate the "Representative Points"

Erf is the Error Function (while Erfc, appearing below, is the complementary Error Function). Each variable is the upper limit of the timing windows of a certain Judge setting (for example, the BOO timing window is 150ms in Judge 5). The value is equal to the average amount of DP points obtained per object with the Normal Distribution we found.

Note that this formula just defines a scale for what we are trying to measure, and the only way it affects balance is how Objects that have timing windows are weighted against objects with not timing windows (the function was chosen so the balance between both kind of objects remain the same as in the previous system). For making scores directly comparable between different Judge settings, it's better to use constant values for the timing window values (for example, the ones belonging to Judge 5), regardless of the setting the user set.

Using the parameters of Judge 5, the scale looks like:

Typical AAAA scores have a sigma of about 7ms (7ms has a value of 1.999999915 RP).
Typical AAA scores have a sigma of about 12ms (12ms ->1.998221949 RP)
Typical AA scores usually are about 25ms or less (25ms -> 1.863658612 RP)

Calculating the Standard Error "Sigma"
The variables are:
s = Sum of the squares of the timing errors of hits that weren't a Miss.
k = Count of hits/releases that weren't a Miss.
m = Count of Misses.
T = Upper limit of the timing window for a BOO, in ms. This timing window represents the limit of the error for a note to be considered "hit", any note hit outside this window, or not hit at all, is considered as "being hit anywhere outside the window" for the Maximum Likelihood Estimation.

Case without Misses or Hits
This is undefined, default to 0 Representative Points or something.

Case with only Misses
In this case, Sigma approaches infinity, the Representative Points are -8.

Case with only Hits
Sigma is simply

Case with Misses and Hits
Sigma is the positive number that solves the equation:

The equation doesn't have a simple closed form solution, but it can be easily solved numerically with Newton's Method (since the function to find a root for is convex and monotonic).
A first approximation of Sigma (that always is smaller than the real solution) is:


With BS = T/Sigma.
Function to find the root for:

It's derivative:


Note: Because of numerical errors while using double floating-point numbers to calculate the functions, for high values of BS, it's more accurate to use a series expansion near Sigma=0, instead of attempting to calculate their values with the exact formulas.
If BS > 7, then:

If BS >20, then:


The, starting with the initial approximation for sigma, iterate with Newton's Method until F[Sigma] is small:
Sigma[n+1] = Sigma[n] - F[Sigma[n]] / F'[Sigma[n]]

Testing this algorithm, it takes about 0.8ms in average to find an accurate value for Sigma (with an absolute error of 10^(-7)).

Last edited by Full Tablet; 10-19-2016 at 11:50 PM..
Full Tablet is offline   Reply With Quote