Optimum gameplay scoring

  • #1
    I'm starting to quite like how the scoring is coming along at http://www.diablo3ladder.com as we're getting closer to something that reflects optimum gameplay scoring for players in terms of including every important aspect from how fast you kill and survive to how well you loot and gain experience.

    This score is then placed in multiple ladders so you can compare your hero against everybody else from players with the same build and class or even just compare with everyone.

    Also worth mentioning is that the site has extensive graph tracking wth datapoints taken on each import that remembers how your characters looked in the past (which includes data such as old exp, positions, items, dps, ehp and score) so that you can come back and check how your character progressed over time.

    [edit2 : Softcore scoring below]
    Tidied up latest version in use :
    Here's the current equation (v6b)
    First 500,000 EHP = Score is EHP 500,000 * 0.3
    For every 30,000 EHP count segment. Score = (EHP * 0.3) * (1 - (count * 0.01)) until count is 95. Remaing EHP is added with 0.05 multipier.
    This becomes ScoreEHP

    Lifesteal = (1 + (Lifesteal*3));
    Regen = 1 + (((100 / Total Life) * Regen) / 100 ) * 2;
    LifeOnHit = 1 + (((100 / Total Life) * LifeOnHit) / 100 ) * 2;

    Exp = All Experience_Bonus_Percent % from items.
    if Paragon Level is 100
    Exp = 1 ( No gain from experience)
    else
    Exp = 1 + Calculation Experience * 0.33;

    Movement = all movement from gear.
    Cap Movement to 25%
    Movement = 1 + (Movement / 2);

    Magic Find = All Magic_Find% from items.
    Magic Find = (ParagonLevel* 0.03) + Magic Find;
    Cap Magic Find to 3 (300%)
    Magic Find = 1 + (Magic Find * 0.11);

    Bonus Elites = 1 + (Bonus Elites / 3);

    Score = round( ( (DPS * sqrt(sqrt(sqrt(DPS))) ) * ScoreEHP) * Movement * Lifesteal * Regen * LifeOnHit * Exp * Magic Find * Bonus Elites * 0.000045)

    ---

    I'm trying to be as transparent as possible with how it is calculated so that people understand how the points are calculated. If we come across a scenario where we see point decrease yet overall performance has increased then something is wrong and needs reassessing or readjusting.

    A case example is the part where we gain overall points from exp%+ with the helm up until p100 (the points should roughly match an equivalent %life+ gem for the helm).

    Gaining experience is good up until we stop gaining any benefit so we should swap to a +%life gem, however if your EHP already exceeds 3,000,000 unbuffed EHP then there's no benefit there either as the amount of times you're going to die with such a high EHP is negligible, so should we swap this to a topaz now? well, no because we already hit the maximum magic find percentage as well.

    Instead, we're left with the emerald gem which gives us gold instead. That's better than nothing.

    Or rather, perhaps a good strategy at this point is to reduce EHP by increasing DPS from other items at the cost of EHP, then a +% life gem can be put to better use in the long run, thus a higher score is achieved.

    I've still yet to add gold into the equation as I've yet to figure out a decent percentage gain from it (virtually next to nothing probably)

    But, as you can see. With such a scoring system, players may focus towards stats that should give a better overall performance - be it faster at finding loot, exp or killing and surviving.

    Feedback back is welcome to help improve things further. Thanks.
  • #2
    % gear found vs. traded
    number of deaths
    class factor
    Winter is coming...
  • #3
    Quote from ghostwheel

    DPS * SQRT(SQRT(SQRT(DPS)))) *
    Bonus elites damage % / 3 *
    1st 1,000,000 EHP * 0.3 (Basically full EHP point gain) *
    Every EHP in blocks of 200,000 have diminishing point decrease of 10% up to 100% (max gain from EHP is therefore 3,000,000 EHP) *
    (Life Steal% * 4) *
    (Life on hit % based off full life ) * 2) *
    (Regeneration % based off full life ) * 2) *
    (Movement Speed) / 2) *
    (if not p100): experience% * 0.33 *
    (Max 300%) magic find * 0.11



    I assume this is just an empirical expression? Also is this the full formula, or a simplified summary?

    Otherwise I'd be really interested to know why your expression is proportional to DPS^1.125. Monster killing performance is strictly sublinear in DPS because you can never have 100% dps uptime in a game. If you approximate WW barbs as a constant damage field, they're reasonably close to this, but having a superlinear power law relationship seems difficult to defend. Likewise linear in move speed is likely unjustifiable. For characters that are either moving or attacking at any given time, the powers on DPS and movespeed should add to one, and any effect from movespeed should be proportional to (%ms+100) regardless.

    I don't know EHP numbers well enough to comment on them directly, except to say that a diminishing return ceiling of 1M seems perhaps a bit high, and you might look for a smooth function rather than what you have. EHP never stops giving you any benefit, in the same way DPS doesn't. I'd suggest picking some points from the curve that you'd like and regressing a logarithmic function.

    Besides that, I'd be interested to know why you've simply multiplied all this together. Surely all healing should be additive instead as all forms can substitute for one another. Life on hit should be multiplied by total aps and lifesteal should scale with dps, perhaps.

    How you want to count adventuring stats is more of a judgement call (why mf but no gf, for instance?) but what I've mentioned above are places where the mathematical basis of your formula seems at first glance to be lacking.

    Edited: more constructive tone.
  • #4
    Firstly thanks for the feedback.


    % gear found vs. traded

    The API does not supply this information, but yes that would be good to consider adding.


    number of deaths

    That had crossed my mind before, and I also think that would be good to incorporate so that we're able to add an element of player skill into the equation - unfortunately, that is also not supplied in the API other than playing HC where you die once.


    class factor

    Class is indirectly affected by the 30% gain of EHP inherent in melee, other than that the ladder supports and seperate characters by classes so you can compare against players of the same class.


    I assume this is just a stream of random numbers? Otherwise I'd be really interested to know why it would be proportional to DPS^1.125.

    The above formula was presented in such a way to highlight the important areas of the equation without being bogged down by maths. A more detailed equation is presented below which includes all the extra bits like the 1+ to certain criterias.
    I'd like to point out that * 0.000045 is used at the end; that is to make the number as small as possible which happens to be around a score of 1 in HC at level 10.


    Monster killing performance is strictly sublinear in DPS because you can never have 100% dps uptime in a game


    DPS weighting has been emphasised as the game imo is DPS centric in terms of requiring the player to kill faster to move up the MP levels. The earlier equations did used a linear DPS multiplier but I felt DPS needed a higher weighting than everything else thus the overall score increases as a curve as you improve DPS.


    Monster killing performance is strictly sublinear in DPS because you can never have 100% dps uptime in a game. If you approximate WW barbs as a constant damage field, they're reasonably close to this, but having a superlinear power law relationship seems difficult to defend.


    The DPS is unbuffed without skills and passives, so the DPS used in the equation means 100% uptime of the absolute mininum damage you are able to dish out. The superlinear power law relationship as you pointed is a weighting mechanism that promotes the player to add scoring to this area of the equation in preference to any other part.


    I don't know EHP numbers well enough to comment on them directly, except to say that a diminishing return ceiling of 1M seems perhaps a bit high, and you might look for a smooth function rather than what you have. EHP never stops giving you any benefit, in the same way DPS doesn't. I'd suggest picking some points from the curve that you'd like and regressing some logarithmic function.

    Smoothing out the diminsihing returns would be better yes, 3 million is the ceiling but diminsihing returns only start at 1 million. Previous to these EHP changes, we had high mitigation stormshield barbs topping the charts at around 2 times the points of everybody else. High EHP is easy to gain, high DPS is harder to get.


    Besides that, I'd be interested to know why you've simply multiplied all this together. Surely all healing should be additive instead as all forms can substitute for one another. Life on hit should be multiplied by total aps and lifesteal should scale with dps.

    Life on Hit and Regeneration is directly proportional to your total life. High mitigation with lower life is more effective than High life and low mitigation. I've tried to reflect this in the forumula but yes, this is one area thats needs some more polishing.


    How you want to count adventuring stats is more of a judgement call (why mf but no gf, for instance?) but what I've mentioned above are places where the mathematical basis of your formula is sorely lacking.

    I'll include GF at some point. This is a singular score that is supposed to give the player the most optimum method of playing the game in all sceneros at anytime, it might not be best at one singular activity but if you are looking to do exp runs, find loot, gain exp, kill and survive at the same time then this scoring is something that's aimed to help.

    Lastly, here's the full forumula with all the extra bits, so it doesnt read as "just a stream of random numbers". Thanks again, it has given me lots to think about.

    Equation v6 :

    First 1,000,000 EHP = Score is EHP 1,000,0000 * 0.3
    For every 200,000 EHP segment. Score = (EHP * 0.3) * 1 - (count of segment * 0.1) until count is 10
    This becomes ScoreEHP

    Lifesteal = (1 + (Lifesteal*4));
    Regen = 1 + (((100 / Total Life) * Regen) / 100 ) * 2;
    LifeOnHit = 1 + (((100 / Total Life) * LifeOnHit) / 100 ) * 2;
    Exp = All Experience_Bonus_Percent % from items.

    if Paragon Level is 100
    Exp = 1 ( No gain from experience)
    else
    Exp = 1 + Calculation Experience * 0.33;

    Movement = all movement from gear.
    Movement to 25%
    Movement = 1 + (Movement / 2);

    Magic Find = All Magic_Find% from items.
    Magic Find = ($plevel * 0.03) + $magicfind;
    Cap Magic Find to 3 (300%)
    Magic Find = 1 + (Magic Find * 0.11);

    Bonus Elites = 1 + (Bonus Elites / 3);

    Score = round( ( (DPS * sqrt(sqrt(sqrt(DPS))) ) * ScoreEHP) * Movement * Lifesteal * Regen * LifeOnHit * Exp * Magic Find * Bonus Elites * 0.000045)
  • #5
    Sorry I missed this response. This is a topic that I'd thought about somewhat in the past. I see you haven't really understood several of my comments, so I'll try to explain further, but first I have a question. Are you trying to a number that scales directly with how effective a player is, or do you just want to assign each character a number so you can compare them for the lulz? Either is fine, comparing characters with a single number is convenient, but its a much more interesting problem if you'd like a smooth mapping of your character score onto farming efficiency. There's also a question of how big you want it to get for high end characters. Currently, DPS increases as approximately a 5th order polynomial, so the numbers become very large and IMO somewhat difficult to manage. You have the opportunity to avoid this if you desire.

    If you just want a number to associate with each character, your formula is as good as any other. If you want to be more quantitative, it still needs corrections. As I mentioned before, it should be linear in absolute movement speed, which is 1+(MS/100). In your expression, you have a +1 but I assume you've still expressed move speed as a percentage. Also I don't understand why you've divided by 2.

    Again as before, total life gain should be a sum because your survival doesn't depend on each individually, but rather on total healing/health pool, of which healing can in turn be expressed as a sum of components related to lifesteal*DPS, LoH*APS, and regen.

    I mentioned earlier that a logarithmic dependence on EHP above some point makes the most sense to me, but you can disagree on this point. However your expression as typed here has a "*1" that doesn't do anything. Should that 1 be associated with the second term?

    I understand that DPS is all important (having played this game at least once :P), but if you want (a) numbers to stay reasonable and (B) your character score to correlate directly to gameplay efficiency, it should not be more than linear in DPS as I outline above. However, I no longer think it should be sublinear. Instead, perhaps a line with nonzero intercept makes the most sense. I am happy to provide more rigorous explanation if you like. If you want numbers to remain focused on DPS, its easy to shrink all the other terms slightly to compensate for this change.

    Just a trivial note, your expressions for both regen and LoH have 100's in the numerator and denominator that cancel out. Its a bit silly to be to throw away flops, time is money. (Another reason to turn the loop for EHP into something Taylor expandable)
  • #6
    Some of your earlier feedback were particularly helpful and I've incorporated them into the site such as a smoother gradient for diminishing health and no cap for EHP (yea I agree, cappings bad). Adjustments are still being made while I examine how people are using the scoring system.


    Are you trying to a number that scales directly with how effective a player is, or do you just want to assign each character a number so you can compare them for the lulz? Either is fine, comparing characters with a single number is convenient, but its a much more interesting problem if you'd like a smooth mapping of your character score onto farming efficiency.

    There are many ways for people to play Diablo; be it experience farming, killing to maximise loot or just general carnage in killing and surviving the toughest MP monsters as quickly as possible.

    Realistily, to assign only a single number that represents your character means blending all these factors without bias in one single area of gameplay. It may not be representative of the hero exceling in one area but instead tries to factor everything that's important that can be read as a single figure which is then placed into a ladder.


    There's also a question of how big you want it to get for high end characters. Currently, DPS increases as approximately a 5th order polynomial, so the numbers become very large and IMO somewhat difficult to manage. You have the opportunity to avoid this if you desire.


    DPS was previously a linear multiplier on a much simplier equation. I thought a curve like increase for DPS was apporiate to highlight where the most gain can be achieved from, as well as actually directly impacting the final score itself.
    To be honest, I've not done any proper maths since I graduated from Uni 15 years ago so I'm a little rusty with using the apporiate mathematical functions to best achieve this. It's something for me to reassess and I appreciate you pointing this out.


    If you just want a number to associate with each character, your formula is as good as any other. If you want to be more quantitative, it still needs corrections. As I mentioned before, it should be linear in absolute movement speed, which is 1+(MS/100).
    In your expression, you have a +1 but I assume you've still expressed move speed as a percentage. Also I don't understand why you've divided by 2.

    There's a reason for each stage of the equation which I should have explained sooner.
    Max movement is 25%. So the maximum multiplier in this case is * 1.125. Why half?, I'm using a rough educated guess that you are running from A to B half of the time in the game. So the benefit from movement is halved.

    This applies to other parts of the equation where I reduce "Elites damage" by a third to indicate a third of the time is spent fighting elites. It's not ideal as these things are actually directly related to a chosen MP level but it's the next best thing I can come up with.

    Either that, or I pulled the numbers out of my ass :P


    Again as before, total life gain should be a sum because your survival doesn't depend on each individually, but rather on total healing/health pool, of which healing can in turn be expressed as a sum of components related to lifesteal*DPS, LoH*APS, and regen.


    Yes, that makes better sense - the common factor being time and DPS. I was thinking of on a per hit basis which didnt mesh as well into the overall equation.


    I mentioned earlier that a logarithmic dependence on EHP above some point makes the most sense to me, but you can disagree on this point. However your expression as typed here has a "*1" that doesn't do anything. Should that 1 be associated with the second term?

    Thats a loop so each point return in the above is essentially starts at 1 (to represent full points) then 0.9, 0.8, 0.7 ... to 0.
    I've removed the cap so now the point return end at 0.05, and it's looped at 1% intervals like 0.99, 0.98, 0.97 ... 0.07,0.06,0.05.


    I understand that DPS is all important (having played this game at least once :P), but if you want (a) numbers to stay reasonable and (B) your character score to correlate directly to gameplay efficiency, it should not be more than linear in DPS as I outline above. However, I no longer think it should be sublinear. Instead, perhaps a line with nonzero intercept makes the most sense. I am happy to provide more rigorous explanation if you like. If you want numbers to remain focused on DPS, its easy to shrink all the other terms slightly to compensate for this change.

    With inhouse simulations, I have determined the smallest numbered score to be around 1 in HC level 10.
    The maximum with 1,000,000 DPS and 10,000,000 EHP is approx 165,000,000 - with the latest equation (v6b). Currently the highest ranking player score is 34,137,444 which I think is reasonable.

    Shrinking numbers would likely give zero points to HC players at level 10. The min and max is something I determine to make sure we don't get run away figures.


    Just a trivial note, your expressions for both regen and LoH have 100's in the numerator and denominator that cancel out. Its a bit silly to be to throw away flops, time is money. (Another reason to turn the loop for EHP into something Taylor expandable)

    Yes, some wasted CPU cycles but it made it slightly easier for me to read the code and think abouut the equation in my head :)

    Thanks again! - attained some valuable insight on some things.
  • #7
    Glad you're finding the feedback helpful.

    Your explanation of move speed makes much more sense than how I was interpreting it. However, if you're running half the time, (1+MS) should both be multiplied by 1/2, but then the constant actually factors out, so it can safely be dropped. (Many builds are also running a lot more than half the time, but that's not actually relevant). The term should in fact simply be 1+MS like I mention above.

    For total healing, I would suggest removing all 3 current healing terms and replacing with an expression like (c1*LS*DPS*.2+c2*LoH*APS+regen) where c1 and c2 are constants that you can pick depend on how you want to weight the different healing types. LS is the strongest since it scales with AoE skills, LoH varies wildly depending on skills because of proc coefficients, and regen is a nice constant. I think c1=2, c2=1 is a reasonable starting point.

    DPS and EHP are tricky. I still recommend you make EHP simply logarithmic. Any constants will again drop out, so you can make it simply Log(EHP). Compare this with your current results and see what you think. This will maintain good scaling for lower end characters but provides strong diminishing returns for the endgame, where DPS will dominate. I still think your DPS scaling is questionable, but its obviously up to you. If you want to address everything, you should include reduced damage from melee and ranged, if they're not already in EHP.

    As a side note, besides ubers, grinding everything in D3 is basically identical, so I think its actually not so much of a stretch to reduce character strength to a single number.
  • #8
    Thanks for that. In regards to the life and movement related sections, it's enough for me to work with at this time and I have a good general idea where to go from here.

    I have simulated some test heros of various scores where the only changing parameters is DPS and EHP. There are other multipliers like movement as described in the original post but they should remain the same value in each case.

    First batch uses DPS * sqrt(sqrt(sqrt(DPS))) and second batch uses flat DPS. Both batches use log(EHP) which replaces the diminishing returns and I have also removed the * 0.000045 at the end as it's no longer required. :

    Batch One using DPS * sqrt(sqrt(sqrt(DPS))) * EHP :
    -----------

    DPS 150,000
    EHP 4,200,000
    = 11,914,729

    vs

    DPS 300,000
    EHP 1,000,000
    = 23,540,899

    vs

    DPS 120,000
    EHP 1,000,000
    = 8,397,317

    vs

    DPS : 20,000
    EHP : 10,000,000
    = 1,305,170

    vs

    DPS : 500,000
    EHP : 300,000
    Score : 38,177,193

    vs

    low level character
    DPS : 40
    EHP : 1000
    Score : 514


    --------------------
    2nd batch using DPS * log(EHP)

    DPS 150,000
    EHP 4,200,000
    = 2,685,794

    vs

    DPS 300,000
    EHP 1,000,000
    = 4,866,121

    vs

    DPS 120,000
    EHP 1,000,000
    = 1,946,448

    vs

    DPS : 20,000
    EHP : 10,000,000
    = 378,476

    vs

    DPS : 500,000
    EHP : 300,000
    = 7,403,426

    vs

    low level character
    DPS : 40
    EHP : 1000
    Score : 324


    Observation : The scaling is good however, I'm experiencing the same problem with log(EHP) as before where very low EHP wth high DPS yields a score amount that would not be optimum for an average player due to the higher probability of death (see 2nd last records in both batches) - it's the primary reason why I decided to use an artificial procedure with diminishing returns that I can adjust manually.

    Example with latest equation in use in the site :

    v6b equation :
    DPS : 500,000
    EHP : 300,000
    = 12,260,014

    vs
    DPS 300,000
    EHP 900,000
    = 16,493,356

    Which seems to better reflect the overall effectiveness of any general situation. This is a difficult one to assess as what it boils down to is determining the point at which death becomes a liability - and that's where I'm able to artificially set this by adjusting the diminishing returns section.
  • #9
    Hmm, so far #1 wizard score in the world O_O
    Blizzard Entertainment - Diablo III Community MVP
  • #10
    Quote from Jaetch

    Hmm, so far #1 wizard score in the world O_O


    Bandyto#2350
    EU
  • #11
    Quote from Bandyto

    Quote from Jaetch

    Hmm, so far #1 wizard score in the world O_O




    Blizzard Entertainment - Diablo III Community MVP
  • #12
    The sarcasm is strong in these ones.
  • #13
    Quote from Jaetch

    Hmm, so far #1 wizard score in the world O_O


    crazy gear u got there ^^ Gratz :)

    ( nevermind the haters... haters usually mean that you are doing something rigth... )
  • #15
    iam number one on CM wizz ladder, right before athene - seems about right . höhöhöhöh
  • #16
    Does this ladder actually include everyone or just the people who submitted their profiles? Cuz it's odd that i'm third in EU in EHP Wiz SC...


    Edit: Seems like it's only the people who submit since it says 866 b.net profiles to the left...

  • #17
    Probably the latter.
  • #18
    Quote from maka


    Maybe you're just a total dick.


    Your posts get better and better :) oh the comedy gold :)

    Keep it up good man.
  • #19
    Thanks.
    Just keep being, I'll keep calling it. Good synergy right there.
  • #20
    Calling your delusions ? Well that's the first step towards improvement. Good luck with that.
  • #21
    Excellent. Just one ambiguous picture and this thread has turned into something different. :D

    Bandyto#2350
    EU
  • To post a comment, please or register a new account.
Posts Quoted:
Reply
Clear All Quotes