Narrill wrote:
Full Tablet, how would you then apply the weighted note values to come up with an overall complexity/difficulty metric? We want to reduce the complexity/difficulty of the sequence to a single number.
After having determined the complexity of each note, calculate an overall complexity value.
One of the simplest ways to calculate this value is ranking the complexity values and summing weighted according to their rank (The highest value being worth 100%, the next one 99%, etc...), similar to how the overall pp value of players is calculated. The problem with this approach is that, the maximum value of complexity a note can have is 1, so even in the most complex case (all notes in the map being different), the complexity is at most a finite value even with a infinite amount of notes. If the weighting factor is high (close to 1), then long maps would indicate a value too high compared to short maps, if it is lower, then the limit is approached too quickly.
So, other function should be used. It should have the following properties:
- It should always give a higher or equal value, if an extra value is added to the list.
- If the list of elements has several high complexity values, then adding a low complexity value to the list should barely increase the overall complexity of the map.
- The overall complexity should tend towards infinity with an infinite amount of notes with maximum complexity, while the overall complexity increase for adding a maximum complexity note should tend towards 0.
A function that takes an input the list of N values and returns the overall complexity could be:
The real positive value of "a" that solves the equation:
With the maximum complexity case (all values in the list being 1), the solution is:
The value of the function can be calculated with Brent's method
http://en.wikipedia.org/wiki/Brent%27s_method, with initial guesses a=0 and b=InverseErf[2^(-1/N)]
So the overall algorithm is (note that I changed how the matrix and the complexity list is calculated, to give a relatively lower complexity value to patterns with long pattern repetitions):
The values in the list of elements could be timing between objects (for Rhythm Complexity), angles (for Complexity of Spacing Patterns caused by Variability), distance moved divided by the timing between objects (Complexity caused by changes in the Distance Snap).
Some examples with Rhythm Complexity:
https://osu.ppy.sh/b/129891&m=0 2.14467
https://osu.ppy.sh/b/297463&m=0 2.1152
https://osu.ppy.sh/b/312959&m=1 2.05506
https://osu.ppy.sh/b/443272&m=0 1.9342
https://osu.ppy.sh/b/323875&m=0 1.91054
https://osu.ppy.sh/b/323769&m=0 1.93728
https://osu.ppy.sh/b/152078&m=1 2.25295
https://osu.ppy.sh/b/58063&m=0 1.84154
https://osu.ppy.sh/b/203906&m=0 2.13684
https://osu.ppy.sh/b/264090&m=0 1.96381
Do you think those values reflect the rhythm complexity of the maps?