Skip to content
This repository has been archived by the owner on Oct 8, 2024. It is now read-only.

An addition of SD(ObjectSpacing) to aim_pp with the goal to compensate high variance stream maps #108

Open
kornkaobat opened this issue Jan 5, 2020 · 23 comments

Comments

@kornkaobat
Copy link

kornkaobat commented Jan 5, 2020

Straight forward idea to add pp based upon the value of S.D.(of ObjectSpacing) throughout the map. Need some feedbacks (pros and cons) first before adding some math formulas to work on.

Pros

Rebalance https://osu.ppy.sh/beatmapsets/837869#osu/1754266

Rebalance https://osu.ppy.sh/beatmapsets/303778#osu/680689

Possibly add some nerf to 1-2 consistent jumps from this S.D. algorithm

@abraker95
Copy link

Needs further explanation how this will help provided example patterns and resultant values by plugging in those patterns into proposed formula(s).

@stanriders
Copy link
Member

This whole repo in the pp calculation code.

Pretty sure your idea will do exactly the opposite of what you want to achieve. If i understand correctly, you want to buff spacing inconsistencies and the current meta is already about inconsistent maps.

@abraker95
Copy link

The code is not that hard to find and the repo is small. Here you it anyway

https://github.com/ppy/osu-performance/blob/master/src/performance/osu/OsuScore.cpp

@stanriders
Copy link
Member

If you compare a regular diff spike jump farm map to the rubik's cube map you're referring to you'll see that farm maps are actually far less consistent in object spacing. Your approach would only work on streams where spacing changes are actually hard to follow. It can't fix jumps and overall promotes more diffspikes instead of consistent difficulty (which is harder to execute)

@stanriders
Copy link
Member

stanriders commented Jan 6, 2020

It's already been like that from the beginning

@stanriders
Copy link
Member

I'm sure there will be thousands of examples where it'll break pp, but you're free to try, we can't be sure without data

@abraker95
Copy link

abraker95 commented Jan 7, 2020

So how many notes will the algorithm take into account? Since these examples use 5, I'll assume 5. So now let me evaluate some basic common patterns @ 180 BPM:

Double taps [xx-xx-x]:
000 ->333 : 333
333 ->666 : 333
666 ->1333 : 666
1333 ->1666 : 333
1666 -> 2000 : 333
1666 ->2666 : 666
Standard Deviation, σ: 156.97770542341354

Triple taps case 1 [xxx-xx]:
000 ->333 : 333
333 ->666 : 333
666 ->999 : 333
1333 ->1666 : 666
1666 -> 2000 : 333
2000 ->2333 : 333
Standard Deviation, σ: 124.10177275123833

Triple taps case 2 [x-xxx-x]:
000 ->333 : 333
333 ->999 : 666
999 ->1333 : 333
1333 ->1666 : 333
1666 -> 2000 : 333
2000 ->2666 : 666
Standard Deviation, σ: 156.97770542341354

Double taps are moderately hard, triple taps are easy enough. One triple tap case shows same result as double tap case, so amount of notes taken into account should definitely not be 5. Observing the timing intervals between notes in the example the stdev is significantly high for simple cases. In fact it will be higher the lower the bpm. So how does this help?

@abraker95
Copy link

abraker95 commented Jan 7, 2020

@abraker95 I am confused, please use X,Y coordinates or display it in osu map editor.

There are no X,Y coordinates because these examples do not depend on spatial configuration, and these are arbitrary examples. When you are testing formulas going into editor to make a pattern is cumbersome. You can plug in mathematical descriptions of patterns like I did to simplify and speed up formula validation.

Certain fix for bpm problem is using xy=k Hyperbola equation where x=S.D. and y=bpm results in k=value for further calculation.

I have no idea what this is saying

@stanriders
Copy link
Member

stanriders commented Jan 7, 2020

it will be the whole Last Klai stream that will be taken into account.

How are you going to determine where that stream begins and ends? Streams often have sliders on downbeats so you cant just assume "a lot of circles means stream".
You should also try and test your idea on other maps, rubik's cube is quite an extreme one and you shouldn't be balancing everything around just it

@stanriders
Copy link
Member

With values like this you better just look at delta's rebalance imo, rubik's cube is already 929pp for ss there

@stanriders
Copy link
Member

There's no issue yet, but there're: Incomplete document explaining things, source code and a web calculator

@abraker95
Copy link

abraker95 commented Feb 22, 2020

I don't think you understand how PP calculation works. No map data gets sent to osu servers because the map data is already stored on the servers. Which means spacingsdev would be calculated there too.

@peppy
Copy link
Member

peppy commented Feb 22, 2020

it is definitely something we can add - we have the facilities to store new variables for performance calculation use.

@joseph-ireland
Copy link

There is a full implementation of difficulty and PP in the main repo https://github.com/ppy/osu/tree/master/osu.Game.Rulesets.Osu/Difficulty, and tools to run it https://github.com/ppy/osu-tools

I feel like that should be in the readme somewhere, it's probably what most people are looking for when tehy click this repo

@joseph-ireland
Copy link

There is already infrastructure to do everything that you want, but the relevant code isn't just in this repo. This repo only contains code to load beatmap difficulty attributes from a database and calculate the PP of a replay. That's why there's nothing about object spacing here. The code that calculates these difficulty attributes and knows about object spacing can be found in the links I posted.

@joseph-ireland
Copy link

You don't need to just yet, you can do everything in osu-tools and the main osu repo, just install the recommended requirements and follow "getting started" from the osu-tools readme, then you can start editing stuff in osu.Game.Rulesets.Difficulty and see the results.

This repo is just for use on the server to quickly calculate pp without having to do the hard calculations every time. osu-tools also calculates pp, but calculates map difficulty too, and that part is likely what you want to change.

@stanriders
Copy link
Member

stanriders commented Feb 28, 2020

Just test it and see the results
e: but first move public static double GetStandardDeviation(List values) { ... } and public static double StreamDeterminant(double deltadist,double deltatime) { ... } out of StrainValueOf or it wont compile

@kornkaobat kornkaobat mentioned this issue Mar 1, 2020
@kornkaobat kornkaobat changed the title Add extra performance points based upon the value of Standard Deviation of ObjectSpacing SD Mar 1, 2020
@kornkaobat kornkaobat changed the title SD An addition of SD(ObjectSpacing) to aim_pp with the aim to compensate high variance stream maps Mar 5, 2020
@kornkaobat
Copy link
Author

WhiteCat's new pp

@kornkaobat kornkaobat reopened this Mar 5, 2020
@kornkaobat kornkaobat changed the title An addition of SD(ObjectSpacing) to aim_pp with the aim to compensate high variance stream maps An addition of SD(ObjectSpacing) to aim_pp with the goal to compensate high variance stream maps Mar 5, 2020
@kornkaobat
Copy link
Author

Most comments I've made have been deleted due to me losing hope that this project will stride forward. A lot of temporary white paper is currently stored here : Osu! Dev Discord. More to come soon, especially my repo for anyone to use.

@kornkaobat
Copy link
Author

@kornkaobat
Copy link
Author

For all of my old deleted comments see https://gitmemory.com/kornkaobat

@kornkaobat
Copy link
Author

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
None yet
Projects
None yet
Development

No branches or pull requests

6 participants