1. New to the forums? Check out our Mentorship Program!
    Our mentors will answer your questions and help you become a part of the community!
  2. Welcome to Smogon Forums! Please take a minute to read the rules.

Stats Ratings

Discussion in 'CAP Policy Review' started by X-Act, Apr 18, 2008.

Thread Status:
Not open for further replies.
  1. X-Act

    X-Act np: Biffy Clyro - Shock Shock
    is a Site Staff Alumnusis a Programmer Alumnusis a Smogon IRC SOp Alumnusis a Researcher Alumnusis a CAP Contributor Alumnusis a Tiering Contributor Alumnusis a Contributor Alumnusis an Administrator Alumnus

    Joined:
    Feb 17, 2006
    Messages:
    4,675
    Today I've had a very busy day, so I hadn't had the time to sit down on my laptop and type everything I did yesterday, until now.

    The formulae that will be written here would be better suited in a kind of little program that would produce the numbers for us, by the way. They become rather hairy quite quickly, so be warned.

    So hereunder are a collection of ratings of a Pokemon, in particular:
    • Physical Tankiness (PT) and Special Tankiness (ST) of a Pokemon, which provide the physical and special defensive prowess of a Pokemon
    • Physical Sweepiness (PS) and Special Sweepiness (SS) of a Pokemon, which provide the physical and special offensive capabilities of a Pokemon
    • Offense/Defense Balance (ODB) of a Pokemon, providing whether or not a Pokemon's stats are geared towards offense (Atk/SpA/Spe), defense (HP/Def/SpD), or neither.
    • Physical/Special Balance (PSB) of a Pokemon, providing whether or not a Pokemon's stats are geared towards physical stats (Atk/Def), special stats (SpA/SpD), or neither.
    • Overall Rating of a Pokemon, providing a rating from each of the Pokemon's stats.
    Before I continue, I wish to note that a Pokemon having high attacking stats but low defense and speed stats is NOT deemed to be offensive, as it can't do enough damage before it is KOed. An example of such a Pokemon is Camerupt.

    Physical Tankiness, Special Tankiness, Physical Sweepiness, Special Sweepiness

    Code:
    Physical Tankiness (PT) = HP × Def ÷ 35
     
    Special Tankiness (ST) = HP × SpD ÷ 35
     
    Physical Sweepiness (PS) = Atk × (Atk × SF + 315) ÷ (Atk × (1-SF) + 315)
     
    Special Sweepiness (SS) = SpA × (SpA × SF + 315) ÷ (SpA × (1-SF) + 315)
     
    where HP is the normalized Base HP
          Atk is the normalized Base Attack
          Def is the normalized Base Defense
          SpA is the normalized Base Special Attack
          SpD is the normalized Base Special Defense
          SF is the Speed Factor of the Base Speed
    PT and ST are divided by 35 to normalize their values.

    A tankiness (physical or special) of 100 means that the Pokemon has average (physical or special) defense. A tankiness of more than 100 means it's pretty defensive (the more the better), while a tankiness of less than 100 means that it can't take hits well.

    A sweepiness (physical or special) of 100 means that the Pokemon has average (physical or special) offense. A sweepiness of more than 100 means it's pretty offensive (the more the better), while a sweepiness of less than 100 means it cannot attack well.

    Offense/Defense Balance

    Code:
    ODB = 55 × ln(max(PS,SS) ÷ max(PT,ST)), rounded to one decimal place.
     
    where max([I]a[/I],[I]b[/I]) returns the larger of [I]a[/I] and [I]b[/I]
          ln([I]x[/I]) is the natural logarithm of [I]x[/I]
    If the ODB is negative, then the Pokemon's stats are geared towards defense. If the ODB is positive, then the Pokemon's stats are geared towards offense. If it is near zero, then the stats are balanced, having roughly the same amount of tankiness as it has sweepiness.

    A small chart can give us the degree of offense/defense:

    Code:
    ODB is               Pokemon's Stats are geared      Pokemon with this ODB
    ---------------------------------------------------------------------------------
    More than 40         Absolutely towards offense      Shedinja, Deoxys-A, Deoxys, Sharpedo, Alakazam, Gengar, Ninjask, Azelf, Absol, Syclant
    Between 30 and 40    Strongly towards offense        Manectric, Darkrai, Floatzel, Chatot, Zangoose, Dodrio, Mewtwo, Dugtrio, Espeon, Weavile, Swellow, Staraptor, Honchkrow, Porygon-Z, Rampardos, Lucario, Ambipom, Primeape, Salamence, Infernape
    Between 20 and 30    Towards offense                 Scyther, Beautifly, Mothim, Aerodactyl, Delibird, Breloom, Rotom, Fearow, Electivire, Banette, Deoxys-S, Starmie, Rayquaza, Blaziken, Rapidash, Sceptile, Jolteon, Xatu, Toxicroak, Houndoom, Cacturne, Purugly, Raticate, Zapdos, Roserade, Jynx, Hitmonlee, Latios, Stantler, Regigigas, Charizard, Typhlosion, Raichu, Girafarig, Seviper, Pinsir, Palkia, Shiftry
    Between 10 and 20    Moderately towards offense      Unown, Yanmega, Kricketune, Victreebel, Qwilfish, Magmortar, Plusle, Garchomp, Arcanine, Flygon, Moltres, Mismagius, Froslass, Electrode, Heracross, Luxray, Persian, Kingler, Venomoth, Raikou, Slaking, Tauros, Bibarel, Crobat, Mamoswine, Kabutops, Mr. Mime, Crawdaunt, Entei, Dialga, Ursaring, Mightyena, Linoone, Dragonite, Scizor, Arbok, Hitmonchan, Cherrim, Golduck, Gallade, Gardevoir, Nidoking
    Between 5 and 10     Slightly towards offense        Gyarados, Skuntank, Furret, Glaceon, Flareon, Chimecho, Heatran, Pidgeot, Minun, Farfetch'd, Machamp, Solrock, Lunatone, Volbeat, Illumise, Exploud, Carnivine, Leafeon
    Between -5 and 5     Equally in offense and defense  Butterfree, Beedrill, Groudon, Kyogre, Kingdra, Gorebyss, Ditto, Latias, Kangaskhan, Seaking, Exeggutor, Octillery, Granbull, Camerupt, Lopunny, Hitmontop, Drifblim, Togekiss, Magnezone, Mew, Celebi, Jirachi, Manaphy, Shaymin, Sableye, Arceus, Feraligatr, Mawile, Mesprit, Venusaur, Castform, Delcatty, Huntail, Drapion, Glalie, Phione, Ariados, Metagross, Ninetales, Hariyama, Ampharos, Lumineon, Luvdisc, Tyranitar, Medicham, Wailord, Armaldo, Parasect, Masquerain, Empoleon, Pelipper, Gliscor, Swampert
    Between -10 and -5   Slightly towards defense        Vileplume, Nidoqueen, Abomasnow, Sandslash, Ludicolo, Meganium, Sunflora, Grumpig, Blastoise, Omastar
    Between -20 and -10  Moderately towards defense      Ho-oh, Revenankh, Torterra, Miltank, Politoed, Jumpluff, Poliwrath, Walrein, Tentacruel, Spiritomb, Milotic, Wigglytuff, Vaporeon, Dusknoir, Whiscash, Articuno, Bellossom, Clefable, Weezing, Suicune, Donphan, Corsola, Altaria, Lanturn, Muk, Claydol, Dunsparce, Uxie, Wormadam-G, Wormadam, Marowak, Wormadam-S, Pachirisu
    Between -30 and -20  Towards defense                 Gastrodon, Dewgong, Noctowl, Swalot, Ledian, Kecleon, Smeargle, Quagsire, Cloyster, Vespiquen, Dustox, Golem, Sudowoodo, Tropius, Skarmory, Mantine, Deoxys-D, Hippowdon, Bronzong, Magcargo, Giratina, Lugia, Tangrowth, Hypno, Lickilicky, Rhyperior, Cradily, Lapras, Slowbro, Slowking
    Between -40 and -30  Strongly towards defense        Aggron, Relicanth, Forretress, Azumarill, Cresselia, Probopass, Torkoal
    Less than -40        Absolutely towards defense      Umbreon, Registeel, Snorlax, Regirock, Regice, Steelix, Bastiodon, Wobbuffet, Blissey, Shuckle
    Physical/Special Balance

    Code:
    PSB = 55 × ln((PT × PS) ÷ (ST × SS)), rounded to one decimal place
     
    where ln([I]x[/I]) is the natural logarithm of [I]x[/I]
    If the PSB is negative, then the Pokemon's stats are geared towards the special stats. If the PSB is positive, the Pokemon's stats are geared towards the physical stats.

    A small chart can give us the degree of physical/special disparity:

    Code:
    PSB is               Pokemon's Stats are geared       Pokemon with this PSB
    ---------------------------------------------------------------------------------
    More than 40         Absolutely towards physical      Kingler, Aggron, Rhyperior, Steelix, Cloyster, Sudowoodo, Sandslash, Leafeon, Skarmory, Regirock, Gliscor, Tauros, Staraptor, Relicanth, Donphan, Golem, Pinsir, Forretress, Shedinja, Miltank, Slaking, Rampardos, Scizor, Breloom, Kabutops, Heracross, Groudon, Mamoswine, Hariyama, Hippowdon, Weavile, Kangaskhan
    Between 30 and 40    Strongly towards physical        Regigigas, Qwilfish, Dodrio, Drapion, Scyther, Granbull, Tangrowth, Solrock, Mawile, Hitmontop, Swellow, Metagross, Hitmonchan, Zangoose, Armaldo, Garchomp, Marowak, Torkoal, Crawdaunt, Furret
    Between 20 and 30    Towards physical                 Ambipom, Weezing, Absol, Machamp, Ninjask, Hitmonlee, Torterra, Gyarados, Mightyena, Aerodactyl, Ursaring, Fearow, Feraligatr, Primeape, Ariados, Quagsire, Tyranitar, Wormadam-G
    Between 10 and 20    Moderately towards physical      Bibarel, Huntail, Entei, Kricketune, Skuntank, Raticate, Dusknoir, Purugly, Banette, Parasect, Linoone, Floatzel, Delcatty, Crobat, Bastiodon, Sharpedo, Dragonite, Revenankh, Flygon, Salamence, Sableye, Swampert, Luxray, Poliwrath, Lopunny, Toxicroak
    Between 5 and 10     Slightly towards physical        Dugtrio, Pidgeot, Honchkrow, Arbok, Volbeat, Seaking, Rapidash, Muk, Gallade, Dunsparce, Victreebel, Arcanine, Nidoqueen, Shiftry, Nidoking
    Between -5 and 5     Equally in physical and special  Syclant, Blaziken, Slowbro, Bronzong, Carnivine, Electivire, Stantler, Lickilicky, Magcargo, Whiscash, Gorebyss, Persian, Deoxys-A, Deoxys, Azelf, Infernape, Mothim, Deoxys-S, Rayquaza, Cacturne, Seviper, Unown, Froslass, Exploud, Kingdra, Ditto, Octillery, Mew, Celebi, Jirachi, Manaphy, Shaymin, Arceus, Spinda, Mesprit, Castform, Glalie, Phione, Medicham, Wailord, Spiritomb, Uxie, Wormadam-S, Swalot, Vespiquen, Deoxys-D, Giratina, Azumarill, Registeel, Wobbuffet, Shuckle, Exeggutor, Farfetch'd, Meganium, Omastar, Lucario, Beedrill, Blastoise, Yanmega, Dialga, Tropius, Cradily, Umbreon, Camerupt
    Between -10 and -5   Slightly towards special         Snorlax, Lumineon, Abomasnow, Girafarig, Corsola, Claydol, Pelipper, Wigglytuff, Altaria, Cresselia, Delibird, Walrein, Dewgong, Lapras, Lugia, Golduck, Jumpluff, Suicune, Kecleon, Smeargle, Moltres
    Between -20 and -10  Moderately towards special       Beautifly, Pachirisu, Dustox, Vileplume, Gastrodon, Bellossom, Xatu, Flareon, Probopass, Drifblim, Chatot, Magnezone, Starmie, Raichu, Articuno, Ho-oh, Ninetales, Empoleon, Clefable, Charizard, Typhlosion, Venusaur, Manectric, Luvdisc, Heatran
    Between -30 and -20  Towards special                  Wormadam-G, Mewtwo, Zapdos, Politoed, Palkia, Cherrim, Hypno, Lanturn, Sceptile, Masquerain, Darkrai, Slowking, Venomoth, Ampharos, Ludicolo, Glaceon
    Between -40 and -30  Strongly towards special         Magmortar, Electrode, Raikou, Sunflora, Houndoom, Porygon-Z, Rotom, Illumise, Chimecho, Tentacruel, Latias, Latios, Lunatone
    Less than -40        Absolutely towards special       Kyogre, Vaporeon, Butterfree, Milotic, Noctowl, Gengar, Jolteon, Togekiss, Plusle, Minun, Ledian, Mismagius, Grumpig, Gardevoir, Roserade, Espeon, Regice, Mantine, Mr. Mime, Alakazam, Jynx, Blissey
    Overall Rating

    Part 1: The Rating Modifier

    The Rating Modifier (M) is used in the Overall Rating of a Pokemon, to reward Pokemon having outstanding PT, PS, ST, and/or SS. Each modifier increases slowly from 1 for a rating (tankiness or sweepiness) of 100, to 1.375 for a rating of 180 (about 2 standard deviations from the mean), to 2.5 for a rating of 260 (about 4 standard deviations from the mean).

    Code:
    Modifier for PT (MPT) = (3 × PT^2 - 600 × PT + 81200) ÷ 51200, if PT > 100
                          = 1, otherwise
     
    Modifier for PS (MPS) = (3 × PS^2 - 600 × PS + 81200) ÷ 51200, if PS > 100
                          = 1, otherwise
     
    Modifier for ST (MST) = (3 × ST^2 - 600 × ST + 81200) ÷ 51200, if ST > 100
                          = 1, otherwise
     
    Modifier for SS (MSS) = (3 × SS^2 - 600 × SS + 81200) ÷ 51200, if SS > 100
                          = 1, otherwise
     
    M = MPT × MPS × MST × MSS
    Part 2: The Overall Rating Formula

    Code:
    Overall Rating = PT × ST × (PS + SS) × M ÷ (56 × (PT + ST)), rounded to the nearest whole number.
    The rating can be used as follows:

    Code:
    Rating is       Pokemon's Stats are  Pokemon with this rating
    ---------------------------------------------------------------------------------
    More than 1400  Exaggerated          Arceus, Deoxys-A, Giratina, Mewtwo, Rayquaza, Slaking, Regigigas, Palkia, Dialga, Ho-oh, Lugia, Deoxys, Groudon, Kyogre
    900 to 1399     Too Good             None
    580 to 899      Fantastic            Cresselia, Azelf, Salamence, Garchomp, Darkrai, Latios, Mew, Celebi, Jirachi, Manaphy, Shaymin, Latias, Syclant, Heatran, Zapdos
    420 to 579      Excellent            Dragonite, Entei, Blissey, Tyranitar, Raikou, Regirock, Regice, Registeel, Moltres, Suicune, Metagross, Articuno, Snorlax, Uxie, Mesprit, Arcanine, Espeon
    300 to 419      Very Good            Infernape, Electivire, Porygon-Z, Gyarados, Deoxys-D, Togekiss, Milotic, Gengar, Umbreon, Magmortar, Lapras, Alakazam, Lucario, Charizard, Typhlosion, Deoxys-S, Weavile, Rhyperior, Mamoswine, Sceptile, Blaziken, Vaporeon, Hippowdon, Walrein, Yanmega, Steelix, Leafeon, Kingdra, Jolteon, Feraligatr, Swampert, Revenankh, Flygon
    250 to 299      Quite Good           Lickilicky, Torterra, Aggron, Heracross, Scyther, Tangrowth, Gallade, Gardevoir, Blastoise, Aerodactyl, Starmie, Roserade, Magnezone, Crobat, Floatzel, Honchkrow, Pinsir, Venusaur, Probopass, Glaceon, Houndoom, Luxray, Meganium, Empoleon, Staraptor, Gliscor, Rapidash, Tentacruel, Relicanth, Flareon, Magmar, Mismagius, Porygon2, Rampardos, Tauros, Muk 
    210 to 249      Good                 Exeggutor, Kangaskhan, Scizor, Bastiodon, Poliwrath, Manectric, Electabuzz, Machamp, Politoed, Donphan, Ninetales, Golduck, Toxicroak, Drapion, Cradily, Nidoqueen, Ambipom, Kabutops, Miltank, Sharpedo, Nidoking, Ampharos, Ursaring, Slowbro, Slowking, Hypno, Rhydon, Dodrio, Bronzong, Omastar, Cloyster, Claydol, Drifblim, Zangoose, Absol, Abomasnow, Altaria, Golem, Dusknoir, Raichu, Kingler, Skuntank, Shiftry
    175 to 209      Average              Froslass, Dewgong, Victreebel, Exploud, Ludicolo, Xatu, Armaldo, Hitmonlee, Glalie, Phione, Weezing, Clefable, Wailord, Primeape, Swalot, Tropius, Gastrodon, Breloom, Pidgeot, Grumpig, Hariyama, Whiscash, Stantler, Bellossom, Lanturn, Torkoal, Lopunny, Jynx, Forretress, Vileplume, Gorebyss, Magneton, Huntail, Vespiquen, Skarmory, Mantine, Cacturne, Lumineon, Octillery, Girafarig, Hitmonchan, Golbat, Venomoth, Banette, Seaking, Seviper
    143 to 174      Below Average        Purugly, Spiritomb, Cherrim, Crawdaunt, Fearow, Sandslash, Electrode, Rotom, Mr. Mime, Piloswine, Noctowl, Chansey, Carnivine, Granbull, Hitmontop, Solrock, Lunatone, Vigoroth, Camerupt, Kadabra, Sneasel, Arbok, Jumpluff, Qwilfish, Haunter, Quagsire, Misdreavus, Seadra, Persian, Kecleon, Dusclops, Chimecho, Mothim, Pelipper, Mightyena, Castform, Munchlax
    127 to 142      Poor                 Gligar, Swellow, Wormadam-G, Dragonair, Wormadam-S, Chatot, Wormadam, Ninjask, Bibarel, Dunsparce, Azumarill, Wobbuffet, Gabite, Marowak, Wigglytuff, Linoone, Furret, Pupitar, Tangela, Raticate, Metang, Sealeo, Masquerain, Lairon, Sunflora, Murkrow, Ponyta, Grotle, Monferno, Sudowoodo, Shelgon, Croconaw, Medicham, Marshtomp, Machoke, Wartortle, Bayleef, Prinplup, Charmeleon, Quilava, Ivysaur
    100 to 126      Bad                  Combusken, Grovyle, Parasect, Plusle, Magcargo, Volbeat, Illumise, Togetic, Lickitung, Porygon, Minun, Gloom, Roselia, Ariados, Wailmer, Pachirisu, Shuckle, Yanma, Kricketune, Dugtrio, Delcatty, Weepinbell, Beautifly, Poliwhirl, Dustox, Butterfree, Corsola, Beedrill, Sableye, Mawile, Nidorina, Graveler, Flaaffy, Nidorino, Lileep
    99 or less      Horrible             Everything else
    An Example

    I think you deserve one. :)

    Let's say we are considering creating a hypothetical Pokemon having the following Base Stats:

    52/117/93/80/67/101

    First we find the normalized stats and the Speed Factor:

    HP: 52/4 + 18 = 31
    Atk: 117 + 18 = 135
    Def: 93 + 18 = 111
    SpA: 80 + 18 = 98
    SpD: 67 + 18 = 85
    SF: 0.92

    Now we find PT, ST, PS, SS:

    Physical Tankiness = 31 x 111 / 35 = 98.31 (average defense)
    Special Tankiness = 31 x 85 / 35 = 75.29 (below average special defense)
    Physical Sweepiness = 135 x (135 x 0.92 + 315) / (135 x 0.08 + 315) = 135 x 439.2 / 325.8 = 181.99 (very high physical offense)
    Special Sweepiness = 98 x (98 x 0.92 + 315) / (98 x 0.08 + 315) = 98 x 405.16 / 322.84 = 122.99 (above average special offense)

    Offense/Defense Balance:

    The higher from PT and ST is 98.31; that from PS and SS is 181.99.

    ODB = 55 x ln(181.99 / 98.31) = 55 x ln(1.851) = 55 x 0.616 = 33.9

    Looking at the chart, this translates to a Pokemon that is geared strongly towards offense.

    Physical/Special Balance:

    PSB = 55 x ln((98.31 x 181.99) / (75.29 x 122.99)) = 55 x ln(17891.44 / 9259.92) = 55 x ln(1.932) = 55 x 0.659 = 36.2

    Looking at the chart, this means that the Pokemon is geared strongly towards the physical stats.

    Now, for the overall rating, we first need to find the rating modifier M, which is made up of four mini modifiers, one each for PT, PS, ST and SS.

    PT and ST are both not greater than 100, so MPT and MST are both 1.

    For PS, MPS = (3 x 181.99^2 - 600x181.99 + 81200) / 51200 = (3 x 33120.36 - 109194 + 81200) / 51200 = (99361.08 - 109194 + 81200) / 51200 = 71367.08 / 51200 = 1.394

    For SS, MSS = (3 x 122.99^2 - 600x122.99 + 81200) / 51200 = (3 x 15126.54 - 73794 + 81200) / 51200 = (45379.62 - 73794 + 81200) / 51200 = 52785.62 / 51200 = 1.031

    Hence M = 1 x 1 x 1.394 x 1.031 = 1.437

    Finally, the overall rating! Note that ODB and PSB are not needed for the evaluation of the overall rating.

    Overall Rating = 98.31 x 75.29 x (181.99 + 122.99) x 1.437 / (56 x (98.31 + 75.29)) = 98.31 x 75.29 x 304.98 x 1.437 / (56 x 173.6) = 3243867.61 / 9721.6 = 334

    From the chart, a rating of 334 means that the stats are very good.
  2. tennisace

    tennisace
    is a member of the Site Staffis a Contributor to Smogon Social Mediais a Super Moderatoris a Community Contributoris a Pokemon Researcheris a Tiering Contributoris a Contributor to Smogonis a CAP Contributor Alumnusis a Smogon Media Contributor Alumnus
    Twitter Head

    Joined:
    Dec 16, 2007
    Messages:
    6,811
    looks great! the problem is that i haven't gotten to natural logs in my algebra class, so i have no clue how to calculate this myself. is there any chance of a program to calculate this automatically?
  3. Aldaron

    Aldaron All da lil birdies chirpin
    is a Tournament Directoris a Battle Server Administratoris a Smogon IRC SOPis a Tiering Contributoris a Contributor to Smogonis an Administrator
    OU and IRC Leader

    Joined:
    Aug 5, 2007
    Messages:
    4,432
    Great job, X-Act.

    I just holistically checked out the overall ratings, and I really can't see any problems.

    I'll give it a more detailed look later, but great job again :D
  4. Time Mage

    Time Mage

    Joined:
    Jul 27, 2007
    Messages:
    1,007
    I haven't analyzed this thoroughly, but, from a first impression, it seems that you just hit the nail, X-Act. Congratulations, this is a really, really great feat. As proved countless times before (and often against your previous proposals), measuring the base stats of a pokémon so that a number accurately represents the power of the stats is not easy at all, and I can't really find anything wrong about this (well, just a really tiny thing, but I'll have to read this more carefully before saying anything).

    Great, amazing. No complaints. Awesome.

    You can't really calculate logarithms manually. Use a scientific calculator to calculate them.
  5. Lord Gloom

    Lord Gloom

    Joined:
    Jun 10, 2007
    Messages:
    1,000
    ln approximates to log base 2.7.

    Though, I would love an app myself.
  6. Dane

    Dane

    Joined:
    Feb 20, 2006
    Messages:
    942
    Well, you can, but it's so unrealistically complicated and long that it isn't worth it. I agree, just get a TI-83 or something, you'll end up needing one eventually anyway.
  7. X-Act

    X-Act np: Biffy Clyro - Shock Shock
    is a Site Staff Alumnusis a Programmer Alumnusis a Smogon IRC SOp Alumnusis a Researcher Alumnusis a CAP Contributor Alumnusis a Tiering Contributor Alumnusis a Contributor Alumnusis an Administrator Alumnus

    Joined:
    Feb 17, 2006
    Messages:
    4,675
    Hehe, the first Pokemon in CAP has Fantastic stats. :)

    But that's not a surprise, as everyone knew this.

    As I said in the original post, I think a small app would be better, so as not to calculate this by hand. Or else even a small Excel sheet would do.
  8. Aki

    Aki

    Joined:
    Nov 2, 2007
    Messages:
    670
    Oh wow. Much better then the last one. Major props to you X-Act.
  9. sbc

    sbc

    Joined:
    Apr 8, 2005
    Messages:
    2,061
    The one dodgy rating would be Snorlax absolutely towards defence seeing how he has 110 base attack and a pretty poor defence.
  10. X-Act

    X-Act np: Biffy Clyro - Shock Shock
    is a Site Staff Alumnusis a Programmer Alumnusis a Smogon IRC SOp Alumnusis a Researcher Alumnusis a CAP Contributor Alumnusis a Tiering Contributor Alumnusis a Contributor Alumnusis an Administrator Alumnus

    Joined:
    Feb 17, 2006
    Messages:
    4,675
    It needs to be mentioned that PT, PS, ST, and SS can also be rated separately via a similar logarithmic scale used in ODB and PSB.

    Code:
    Rank for PT = 11 x ln(PT/100), with its fractional part removed.
    and the same for PS, ST and SS.

    This rank translates to the following:

    Code:
    Rank less than -5: Abysimal (the less the worse)
    Rank -5: Extremely Bad
    Rank -4: Very Bad
    Rank -3: Bad
    Rank -2: Moderately Bad
    Rank -1: Below Average
    Rank 0: Average
    Rank 1: Above Average
    Rank 2: Moderately Good
    Rank 3: Good
    Rank 4: Very Good
    Rank 5: Extremely Good
    Rank more than 5: Amazing (the more the better)
    For example, let's take a Pokemon as an example: Hitmonchan with 50/105/79/35/110/76 base stats.

    NormHP: 50/4 + 18 = 30.5
    NormAtk: 105 + 18 = 123
    NormDef: 79 + 18 = 97
    NormSpA: 35 + 18 = 53
    NormSpD: 110 + 18 = 128
    Speed Factor: 0.65

    PT = 30.5 x 97 / 35 = 84.53
    ST = 30.5 x 128 / 35 = 111.54
    PS = 123 x (123 x 0.65 + 315) / (123 x 0.35 + 315) = 135.68
    SS = 53 x (53 x 0.65 + 315) / (53 x 0.35 + 315) = 55.53

    Rank for PT: 11 x ln(84.53 / 100) = 11 x -0.168 = -1.85 = -1 (Below Average)
    Rank for ST: 11 x ln(111.54 / 100) = 11 x 0.109 = 1.20 = 1 (Above Average)
    Rank for PS: 11 x ln(135.68 / 100) = 11 x 0.305 = 3.36 = 3 (Good)
    Rank for SS: 11 x ln(55.53 / 100) = 11 x -0.588 = -6.47 = -6 (Abysimal)

    We can also write the PT, PS, ST and SS as kind of 'stats' (Sweeptank stats, maybe? lol) in their own right. I suggest to write them in this order: Physical Sweepiness, Physical Tankiness, Special Sweepiness, Special Tankiness and to round them to the nearest whole number when writing them in this way.

    For example, Hitmonchan has 'Sweeptank' stats 136 / 85 / 56 / 112.

    (136 is good, 85 is below average, 56 is abysimal and 112 is above average.)

    EDIT: SkarmBlissCounter, when it says 'defense', it could mean either defenses. In the case of Snorlax, 160 HP coupled with 110 SpD makes him extremely defensive. Also, because of Snorlax's bad speed, it can't be called offensive, unless it somehow increases its speed or its defense. I wouldn't underestimate Snorlax's physical defense too, actually: its physical tankiness is 138, which is 'Good' on the scale. 160 base HP makes a hell of a lot of difference.
  11. Dekzeh

    Dekzeh It's the sound of the world ending.
    is a Pre-Contributoris a World Cup of Pokemon defending champion

    Joined:
    Jul 13, 2007
    Messages:
    676
    That's actually awesome :)
  12. chaos

    chaos
    is a member of the Site Staffis a Battle Server Administratoris a Programmeris a Smogon IRC SOPis a Contributor to Smogonis an Administratoris a Tournament Director Alumnusis a Researcher Alumnus
    Owner

    Joined:
    Dec 18, 2004
    Messages:
    9,629
    ok i dont have time to finish this right now but here are the relevant functions coded in python

    Code:
    import math
     
    def normalize_hp(hp):
     return hp / 4 + 18
     
    def normalize_stat(stat):
     return stat + 18
     
    def calc_sf(spe):
     chart = [(151,1),
      (131, 0.99),
      (121, 0.98),
      (116, 0.97),
      (111, 0.95),
      (106, 0.94),
      (101, 0.92),
      (96, 0.87),
      (91, 0.82),
      (86, 0.77),
      (81, 0.71),
      (76, 0.65),
      (71, 0.62),
      (66, 0.55),
      (61, 0.49),
      (56, 0.42),
      (51, 0.37),
      (46, 0.29),
      (41, 0.23),
      (36, 0.17),
      (31, 0.12),
      (26, 0.06),
      (21, 0.04),
      (16, 0.02),
      (11, 0.01)]
     
     for stat, r in chart:
      if spe >= stat:
       return r
     
     return 0
     
    def calc_pt(HP, Def):
     return HP * Def / 35
     
    def calc_st(HP, SpD):
     return HP * SpD / 35
     
    def calc_ps(Atk, SF):
     return Atk * (Atk * SF + 315) / (Atk * (1-SF) + 315)
     
    def calc_ss(SpA, SF):
     return SpA * (SpA * SF + 315) / (SpA * (1-SF) + 315)
     
    def calc_odb(PS, SS, PT, ST):
     return 55 * round(math.ln(max(PS, SS) / max(PT, ST)), 1)
     
    def calc_psb(PS, SS, PT, ST):
     return 55 * round(math.ln((PT * PS) / (ST * SS)), 1)
     
    def calc_modifier(V):
     return (3 * V**2 - 600 * V + 81200) / 51200 if V > 100 else 1
     
    def calc_m(MPS, MSS, MPT, MST):
     return MPS * MSS * MPT * MST
     
    def calc_rating(PS, SS, PT, ST, M):
     return round(PT * ST * (PS + SS) * M / (56 * (PT + ST)))
     
     
     
     
     
     
    
  13. Dekzeh

    Dekzeh It's the sound of the world ending.
    is a Pre-Contributoris a World Cup of Pokemon defending champion

    Joined:
    Jul 13, 2007
    Messages:
    676
    Just something I wonder, if you apply the SDef Sandstorm boost to Tyranitar stats, does it change its tier?
    Same for Soul Dew Latias, Thick Club Marowak, and everything that can modify the stats based on items..
    Could you give those pokemons two ranks, one with their normal stats, and one with the stats boosted from items and Sandstorm? (Sandstorm only for TTar, not other rock types :P)
  14. Brain

    Brain
    is a Programmer Alumnusis a Smogon IRC SOp Alumnusis an Administrator Alumnus

    Joined:
    Dec 18, 2005
    Messages:
    614
    How exactly did you derive these functions? Where do all those constants come from? I'm curious and it's pretty difficult to infer from the final result...

    Also, from toying around with parameters, I find that:
    tanh(speed/30 - 2)/2 + 0.5
    is a reasonable approximation of SF. Not really simpler, I know, but it's nice to know ;)
  15. Time Mage

    Time Mage

    Joined:
    Jul 27, 2007
    Messages:
    1,007
    Now that I've looked at it more carefully, I still find it amazing, but I have one question: Why choosing 35 as the normalization factor for Tankiness? The ratio between Tankiness and Sweepiness of a 50/50/50/50/50/50 is about 33, and the ratio in the case of a 100/100/100/100/100/100 pokémon is only 23. The ratios doesn't have to be exactly the same, because speed is not spread uniformly, but a 50% difference might underestimate the defenses of high BST pokémon. Have you tried with an intermediate number?

    In any case, the results match nearly flawlessly with the reality, so this isn't an important issue at all.


    Also, I've noticed that this is really flexible. Not only you can rate PT, PS, ST, and SS individually, as X-Act mentioned in his last post, but you can also do the Physical/Special balance comparing only PT with PS, or even PT with SS, etc. thanks to the way the balance is calculated. I'm going to propose this as the new method of deciding style and build, in fact.
  16. Dane

    Dane

    Joined:
    Feb 20, 2006
    Messages:
    942
    It's a good idea, but we should probably get some sort of applet or program to calculate it out. Remember, people were confused as hell by something as simple as "20% more". They're heads will freaking explode from this.

    BTW, I love it and if I get time I might just program it into my TI-83.
  17. Time Mage

    Time Mage

    Joined:
    Jul 27, 2007
    Messages:
    1,007
    We can just show a chart of how the current pokémon are rated with this method, for people to have a reference. The ones X-Act has posted, plus a few more for other comparisons should be sufficient. That way, if we say a pokémon is balanced if its ODB is between 10 an -10, people can see what pokémon currently fall into that category, and vote accordingly.
  18. X-Act

    X-Act np: Biffy Clyro - Shock Shock
    is a Site Staff Alumnusis a Programmer Alumnusis a Smogon IRC SOp Alumnusis a Researcher Alumnusis a CAP Contributor Alumnusis a Tiering Contributor Alumnusis a Contributor Alumnusis an Administrator Alumnus

    Joined:
    Feb 17, 2006
    Messages:
    4,675
    return round(55 * math.ln(...),1) would produce a much more accurate number for each of those.

    The other functions are spot-on.

    To people who asked me questions about the constants:

    For HP, the division by 35 is done because 35 is the normalized HP stat for 68 base HP, and 68 base HP happens to be the average base HP (hello Gallade and Gardevoir).

    For the logarithmic things, the logarithmic scale is excellent for deciding how much fluctuation you have from the middle, so I used that. The '55' and the '11' are just things I used so that the rating is a number that makes sense and is not too small or too large. I just toyed with various numbers until I found those that made sense. Excel does this really quickly and you can see at a glance the ratings of each Pokemon sorted whichever way you like.

    For the modifiers, I wanted a modifier that barely did anything to Pokemon with just above average stats, but boosted those that are very far from the average. However, I also wanted the function to be relatively simple. When I calculated the standard deviations for PT, PS, ST and SS, they all were near 40 and their average all were near 100. So I decided that, of course, a rating of 100 gets a multiplier of 1 (to stay the same), a rating of 180 gets 1.375, and 260 gets 2.5. I then assumed that the function is quadratic ax^2 + bx + c so that it's relatively simple. Plugging in those three points in the quadratic yields a simultaneous equation in three unknowns a,b,c, from which a = 3/51200, b = -3/256 and c = 203/128 followed. When I applied it to the formula, it seemed to work. I tried other numbers just to be sure, but none worked better than this, so I stuck with it.

    Finally, the Overall Rating formula is just the one I posted in the other thread but multiplied also by M, so there's not much to be said about it.

    I assume that chaos is working on implementing this with Python (otherwise he wouldn't have posted his code). I'm also separately implementing this in Java (which sucks when compared to Python, I know) but at least we could use my applet for comparison purposes. It should be up in a couple of hours.
  19. X-Act

    X-Act np: Biffy Clyro - Shock Shock
    is a Site Staff Alumnusis a Programmer Alumnusis a Smogon IRC SOp Alumnusis a Researcher Alumnusis a CAP Contributor Alumnusis a Tiering Contributor Alumnusis a Contributor Alumnusis an Administrator Alumnus

    Joined:
    Feb 17, 2006
    Messages:
    4,675
    I made a temporary Base Stats Ratings applet in sucky Java. Here's a screenshot where I was checking out Rampardos' ratings:

    [​IMG]

    Please tell me of any bugs you encounter.

    EDIT: I request the "A Much Better Rating Of A Pokemon Than BST" thread to be locked. Thanks.
  20. chaos

    chaos
    is a member of the Site Staffis a Battle Server Administratoris a Programmeris a Smogon IRC SOPis a Contributor to Smogonis an Administratoris a Tournament Director Alumnusis a Researcher Alumnus
    Owner

    Joined:
    Dec 18, 2004
    Messages:
    9,629
    locked the thread. Yeah, I was going to make a quick python program for testing but I guess it's not necessary since you beat me to the punch with the java applet. I whipped up the functions in a few minutes when I saw the thread but had to step out (and ended up stepping out for 3 days... so yeah).

    I haven't had time to really analyze this yet but from my skimming the results of the algorithm seem to make sense. Thanks for putting in the effort to fix it up (and for hopefully not taking my criticism of the previous algorithm too hard!)

    Assuming everyone in time agrees this is the best method, maybe we could integrate it with the site?
  21. X-Act

    X-Act np: Biffy Clyro - Shock Shock
    is a Site Staff Alumnusis a Programmer Alumnusis a Smogon IRC SOp Alumnusis a Researcher Alumnusis a CAP Contributor Alumnusis a Tiering Contributor Alumnusis a Contributor Alumnusis an Administrator Alumnus

    Joined:
    Feb 17, 2006
    Messages:
    4,675
    That would be a good idea, but I'd prefer your Python implementation to be in the site, for the reasons you give me about Java applets not being compatible with all browsers/computers.

    Oh, and there are no hard feelings. I can take constructive criticism. :) If anything, I learned from it.
Thread Status:
Not open for further replies.

Users Viewing Thread (Users: 0, Guests: 0)