-
Notifications
You must be signed in to change notification settings - Fork 408
Fit Calculation Notes
This is a generic guide on how pyfa fit calculations work. It is definitely not complete
(add some info here on how basic fitting calculations work)
With current EVE mechanics, these two things hold true AFAIK:
- There aren't any projected effects which affect other projected effects
- There aren't any command bursts which affect other command bursts
To expand, there isn't a projected module that you can add that will affect the performance of another projected module. For example, a projected Target Disruptor will not affect your Stasis Webifier. We exploit this property in pyfa fitting calculations to restrict projected calculations to the first degree. So, imagine this chain:
local fit A < projected fit B < projected fit C < projected fit D
If we change something in C or D, A will not be affected. A is only affected by changes in B. Thus, we do not have to traverse up the chain to properly calculate attributes for the fit in question. This allows us to be more efficient in our calculations and not calculate fits (pyfa used to calc up the chain, which could lead to projection loops. Not anymore!)
The same goes for Command Bursts. At this time, there isn't a command burst which affects another command burst. So, during calculations, we should only have to worry about the first degree of command fits, and ignore other command fits that may be attached to those.
Additionally, there is no projected effect that affect command bursts. Consider:
local fit A < command fit B < projected fit C
During our calculation of B with respect to A, we can safely ignore C as there aren't any projected affects that boost a command burst.
The opposite, however, is not true.
local fit A < projected fit B < command fit C < command fit D < projected fit E
In order to properly calculate A, we must calculate both B and C. There are command bursts which increase the effectiveness of projected modules (such as web distance, TD strength, etc), and thus those changes need to be included. However, calculation of D and E can be safely ignored as they will not affect A. This shows that 2 degrees is the furthest out that we go when it comes to fit calculations.
pyfa has the concept of self projection. We basically take a copy of the current fit object on memory, calculate it, and use that to project onto the actual fit as if it was part of it's projections. The copy is then deleted, without ever having been saved to the database.
Command bursts are special in that the local fit will only get the burst with the highest strength (unlike projections which apply all effects, usually penalized). Command fits are calculated, and their resulting effects are stored on the target fit. They must be stored rather than applied since we may calculate another command fit with a better bonus, which would overwrite previous ones. These command bursts are then applied during the fit calculations based on their runtime.
Runtime is when in the fitting calculation the effect is actually applied. Each effect has a specific runtime, and it's crucial that these are correct for proper calculations to be applied. Consider a web that is projected onto another fit. You want to ensure that the web has all bonuses that it can gather before being projected (if it's projected before it gets its bonus, it will not update with it).