pyfa-org / Pyfa

Python fitting assistant, cross-platform fitting tool for EVE Online
GNU General Public License v3.0
1.6k stars 406 forks source link

Feature Request: Dynamic "Worst Case" Damage Profile #1892

Open alexanderdarino opened 5 years ago

alexanderdarino commented 5 years ago

Presently, the multiple damage profiles used to determine Ship EHP and EHP repaired (self or projected by logi) given our resistances use the same resistance for both shield and armor; I am proposing a new "dynamic" damage profile that maximizes damage against the weakest resist for shield and maximizes damage against the weakest resist for armor separately. (To my knowledge there is no way to have non-uniform hull resistances; if this were possible, then the dynamic damage profile would be extended to hull as well.)

For example: Suppose we have a ship with a 0% EM Shield resist and a 0% EX Armor resist; using this dynamic worst-case damage profile, Damage inflicted would be 100% and EHP repaired via shield boosters and armor repairers (self or from logi) would have no multiplier (ie. EHP = Raw HP). This would be true regardless of the values of the other resists because only the lowest is used in the computation.

Such a profile would be invaluable to helping determine the extent to which resist holes should or should not be addressed by considering the nightmare scenario in which the enemy is using 100% of the damage type you are weakest against at the time (ie. you do or do not have a shield). This is information is particularly important in large scale battle TiDi-ed battles where you have the time to determine which targets would be weakest against your available damage types and which targets pose the biggest threat given your resist holes (especially if they use damage type-changing ammo like missiles and projectiles). It is also helpful in PVE scenarios in which all damage types (in potentially different ratios) are inflicted on you from multiple sources).

In the case of multiple, identically-weighted resist holes, there may be multiple damage profiles that inflict maximum damage; any single one of them can be displayed, and the others would be unambiguously obvious to determine manually if need be. (Or perhaps a tool tip displaying all the combinations of worst case. Doesn't really matter - not terribly important.)

With regards to the Reactive Armor Hardener: If this module is used, then I believe it would be possible for the maximum damage inflicted on armor to be non-uniform in damage type. I don't know the exact mechanics of when-and-how the resists change over time (I could certainly help dissect the mathematics of this if help is required), but I'm sure some approximations or heuristics could be used for Version 1 implementation of this feature.

DarkFenX commented 5 years ago

Say, you have 100 armor 100 shield. Resists are all 50% except for 0 em on shield and 0 explosive on armor. How do you want it to behave in this case? Pick one damage type for both layers, or do EM to shield and explosive to armor?

If you want the latter - then can be thought of as "worst case ehp/tank" stat. Reactive would stay adapted to selected damage pattern then.

alexanderdarino commented 5 years ago

Say, you have 100 armor 100 shield. Resists are all 50% except for 0 em on shield and 0 explosive on armor. How do you want it to behave in this case? Pick one damage type for both layers, or do EM to shield and explosive to armor?

Second

If you want the latter - then can be thought of as "worst case ehp/tank" stat. Reactive would stay adapted to selected damage pattern then.

Let me give you an example as to why this isn't the case. Suppose right now the Reactive Armor Hardener is set to uniform (I believe the default), and currently the weakest and second weakest resists are 20% EM and 25% T respectively. If I inflict 100% EM damage, then after one or more iterations the reactive hardener will shift resists such that EM is no longer the hole, and the resist hole is now Thermal, meaning that my 100% EM damage is not, in fact, the worst case. The branch of mathematics known as Game Theory tells us that, given the shifting resist mechanics, there exists at least one static, possibly non-uniform damage profile that will minimize the effectiveness of the reactive armor hardener after an arbitrarily large number of iterations (ie. once the reactive hardener has basically finalized it's shifting). There are mathematical methods of figuring this out. For those who aren't mathematically inclined, there are also reliable approximations and heuristics that could be used to provide a reasonably accurate answer when it comes to implementing this feature.