Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[FeatReq] Skill Rating Approximator #18

Open
ReiFan49 opened this issue Oct 25, 2016 · 0 comments
Open

[FeatReq] Skill Rating Approximator #18

ReiFan49 opened this issue Oct 25, 2016 · 0 comments

Comments

@ReiFan49
Copy link

ReiFan49 commented Oct 25, 2016

as the title said, a system that used to calculate skill rating of each producers. (well, PRP or fan count might be able to sort out for another thing, but PRP is not only about skill; it's about team combination and composition too)
it still underwent on testing here. for now (on the website), PRP is weighted per 1000 to add 1.00 bonus to rating

Note: Master+ is still under assumption

The skill rating itself only involves FC and clear count. Each difficulty represents a single weighted rating (ofc it's tentative).

  • Debut: 10
  • Regular: 20
  • Pro: 60
  • Master: 100
  • Master+: x (x is total song count that have Master+)
# Difficulty Skill Contribution formula:
# [Difficulty Weight] * (
#   [Clear Count] * 40% + [Full Combo] * 60%
# ) / [Song Count on Respective Difficulties]

After obtaining the skill rating for each difficulties, find the highest one along each difficulties except Master+ and add up to 5.00 rating from the harder difficulty (Exclude Master+).

# the flow is written in Ruby

# player_skill_contrib is an OrderedDict that have:
# - kdif as the difficulty key
# - vclr as contributed value for the respective difficulty
player_skill = player_skill_contrib.inject(0.0) { |accx,(kdif,vclr)|
  idx = diff_keys.index(kdif)

  # bonus is obtained via:
  #   finding a harder difficulty from the current one on enumeration
  #   and compare which one have higher contribution along the
  #   eligible difficulties (that harder than enumerated one)
  bonus = diff_keys.select { |kdf|
    diff_keys.index(kdf) > idx
  }.inject(0.0) { |kbon,kdf|
    [player_skill_contrib.fetch(kdf,0.0),kbon].max
  }
  # acc_skill is the post-bonus given skill calculation after the
  # rating bonus from higher rating is given
  # Formula:
  # [Current Rating] + 5 * (
  #   Minimum([Current Rating],bonus)/Maximum(1,[Current Rating])
  # )
  acc_skill = vclr + 5 * Rational([vclr,bonus].min,[vclr,1].max)

  # accx is the final accumulated skill, which is counted after
  # comparing with the current difficulty skills.
  [accx,acc_skill].max
}

# Master+ bonus is added after 5.00 bonus

i hope this kind of rating might helps.

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

No branches or pull requests

1 participant