Elitist Jerks (http://elitistjerks.com/forums.php)
-   Theorycrafting Think Tank (http://elitistjerks.com/f47/)
-   -   Proc Mechanics (http://elitistjerks.com/f47/t21822-proc_mechanics/)

 Aldriana 02/18/08 5:53 PM

Proc Mechanics

Proc Mechanics

## [top]Proc Basics

Procs are effects that have a chance of occurring under a certain triggering condition. Typically this is used to mean effects that trigger off physical attacks or spellcasts; however, the term also can be used to apply to events that are triggered by being hit, such as the effect on [Bulwark of Azzinoth] or [Band of the Eternal Defender]. For purposes of this article I will be using the terminology of on-attack procs, but the principals here apply equally to procs of other sorts.

Fundamentally, there are two important things to know about a proc: its proc chance, and it's internal cooldown.

### [top]Proc Chance

Procs generally fall under one of two categories. The first catagory are fixed-percent procs. No matter what weapon is used to trigger these, the chance that they will proc is the same. For instance, a Rogue's Combat Potency ability has a 20% chance to proc on all off-hand hits, regardless of the speed of the weapon used. If you attack once a second or once every 5 seconds, you will still proc on 20% of attacks. Similarly, [Sextant of Unstable Currents] has a 20% chance to proc on any spell critical strike, regardless of what spell is used.

The second category is referred to as Proc Per Minute or "PPM" effects. These are normalized such that if you autoattack with a single weapon, the average number of procs you get in a minute does not depend on the speed of the weapon you use. So, as a simple example: Mongoose is thought to be a 1.2 PPM effect. Hence, if I autoattack with a 2.0 speed weapon, it will proc on 4% of attacks, such that over the course of a minute (during which I will make 60/2.0 = 30 attacks) it will on average proc 30 * .04 = 1.2 times. If, on the other hand, I autoattack with Mongoose on a 3.0 speed weapon, it will instead proc on 6% of attacks, such that it will still proc an average of 1.2 times per minute (60/3.0 = 20; 20 * .06 = 1.2).

It should be noted that for any proc effect implemented in the Burning Crusade era (post-60), any haste effects in play are counted against your weapon speed for purposes of autoattacking. For instance, if I have 25% haste on, I will attack 25% more times in a minute, so each proc will be correspondingly less likely to proc such that I still average the same number of procs in a minute. Note that this is *not* true of pre-TBC proc effects such as Crusader - on these older effects, the chance of a proc going off is purely a function of your base weapon speed.

Note, however, that this applies only to autoattacks. If one is additionally launching instant attacks - Sinister Strike, Mortal Strike, or whatever else - these have a chance to proc as well, and can thus increase the number of observed procs. Unlike autoattacks, haste effects do not reduce the proc rate of instant attacks; if you are using mongoose on a 3.0 speed weapon, you will have a 6% chance to proc no matter how much haste you have on.

At this point an example would probably be helpful. Consider, for instance, [Madness of the Betrayer]. This is a trinket with a 1 PPM armor penetration proc. Let us assume for the moment that I am attacking with a 2.5 speed MH and a 1.5 speed OH. Let us further assume that I have 50% haste from various sources, and that I use Sinister Strike once every 4 seconds, and have WF totem. Then my MH autoattack occurs 36 times a minute, so each MH autoattack has a 2.78% chance to proc Madness of the Betrayer. However, those 36 attacks also proc an average of 7.2 WF procs per minute, which are considered autoattacks, so also proc at this rate. Thus, in reality I will generate (36 + 7.2) * 2.78 = 1.2 procs each minute from autoattack and Windfury. Now, my OH attacks can *also* proc Madness of the Betrayer, but since I average 60 attacks per minute with that weapon, each only has a 1.67% chance to proc. Thus, my OH generates 1 proc each minute on average as well. Finally, I make 15 instant attacks with Sinister Strike, each of which procs with a 4.17% chance (as the proc rate is note reduced by the haste effect in play). Thus, I get an additional 4.17 * 15 = .625 procs each minute from instant attacks. Thus, in the average minute, Madness of the Betrayer will proc 1.2 + 1 + .625 = 2.825 times each minute.

### [top]Internal Cooldowns

Some trinkets additionally have an internal cooldown - that is, after a proc occurs, there is some duration that must elapse before the trinket can proc again. For instance, when [Band of the Eternal Champion] procs, it cannot do so again for 60 seconds. No two procs can ever occur less than 60 seconds apart. This is also an important aspect in determining the utility of a proc. It should be noted that all known procs either have an internal cooldown of 0 (that is, no cooldown at all) or an internal cooldown longer than the length of the buff. This fact will be important later.

## [top]Uptime

What's really important in figuring out the usefulness of a typical buff is the uptime of the buff - that is, what portion of the time that buff is in effect.

The easy case is addressing what happens when there is an internal cooldown longer than the length of the buff. If we define

D = Duration of the buff
p = Chance the the buff procs on any given attack
v = Number of attacks that can trigger the proc that occur in a given second, and
c = Internal cooldown of the trinket
U = uptime, then

$U=\frac{D}{c+\frac{1}{vp}}$

The harder case is what happens when the proc does not have an internal cooldown. One might expect that if one had, say, a 1 PPM effect with a 15 second duration, the uptime would be 25% (15 seconds uptime per proc, one proc per 60 seconds, 15/60 = 25%). One would, alas, be incorrect. Because there is no internal cooldown, the procs can overlap, which reduces the actual uptime observed. The correct formula (using the same variables as above) is:

$U=1-(1-p)^{Dv}$

## [top]Known proc rates

A brief listing of procs rates of commonly-used effects:
• Mongoose: 1.2 PPM (Note: this is at level 70. At level 80 the proc rate appears to be lower; current testing indicates it's probably around 1.0 PPM)
• Executioner: 1.2 PPM
• Hourglass of the Unraveler: 10%, 45 second internal cooldown
• Dragonspine Trophy 1 PPM: 20 second internal cooldown.
• Tsunami Talisman: 10%, 45 second internal cooldown
• Warp-Spring Coil: 25%, 30 second internal cooldown
• Madness of the Betrayer: 1 PPM
• Band of the Eternal Champion: 1 PPM, 60 second internal cooldown.

 Aldriana 02/18/08 5:54 PM

If people would like to provide the proc rate for other commonly used items, I will include them. Please only add the ones that you're pretty confident the proc rate has been determined accurately; for instance, I have some idea what the proc rate on Rod of the Sun King and the Blacksmithing maces are, but it hasn't been conclusively proven so I am omitting them.

 Binkenstein 02/18/08 6:56 PM

Did you come up with the first formula independent of what I did?

Also, may want to expand out V in a separate area covering spellcasts, single & dual weapons.

1/c, 1/s, 1/a + 1/b

 Aldriana 02/18/08 7:09 PM

I've been using all these formulas in the Rogue Gear sheet for almost a year. I think they've been independently derived by at least a dozen different people - myself included - since we started to see procs with internal cooldowns.

 Binkenstein 02/18/08 8:22 PM

Ah, that's good. Not sure where the formula came from that popped up in the ele thread a few weeks ago, but it's probably the same source.

Was there any math behind V, or was it just an arbitrary figure that you enter in?

 Obellix 04/09/08 7:57 PM

so if i get this right, having the Hourglass of the Unraveler and the Tsunami Talisman equiped, i would have 20% chance of one of them to process every 45 sec? or are they on the same internal cooldown?

 Aldriana 04/10/08 2:57 PM

They should proc independently of one another; that is, each has a 10% chance to proc when the cooldown is up, but their proc chance and cooldowns are not shared or linked in any way.

Also note that it's not a 10% chance to proc every 45 seconds; it's a 10% chance to proc on any crit as long as it's not on cooldown, meaning that, depending on your crit rate, it probably procs in 10 or 15 seconds; once it does, there is then 45 seconds where it can't proc at all, at which point it's back to a 10% chance on any crit until it procs again.

 Thalshara 04/10/08 3:40 PM

Can you explain more about proc mechanics in relation to dual-weilding weapons? More specifically:

- What are the proc mechanics at work if you are using 2 weapons with the same proc enchant, e.g. Mongoose?
- Does 1.2 PPM then essentially become 2.4 PPM?
- Can the uptime of the procs potentially overlap (not stacking, but an overlapping duration)?

- If dual-weilding weapons with different proc enchants, are there any known interactions, or do they simply perform as an independent function?

 Aldriana 04/10/08 4:23 PM

The thing that makes that challenging is that not all procs work the same way - for an obvious example, Double Mongoose and Double Executioner do not act the same way. Now, it's certainly the case that such matters want to be discussed somewhere - what's not clear to me is whether or not those should fit in this article, or whether there should be separate articles drilling down into particulars of, for instance, Mongoose versus Executioner.

 Troffel 04/13/08 6:13 AM

Formula wrong

I think the formula for true fixed-percent procs is wrong.

Calculating the average time to proc ist like flipping a coin and compute how long the average sequence of portraits are.

I assume that the attack is as single attack, which occurres after equal time-periods 1/v.

To have a sequence S(n) with n non-procs and one proc, the probability of occuring this sequence is:
$p(S(n))= p(1 - p)^n$
The time needed for such a sequence is: $t(S(n))= \frac{n}{v}$. (Hit 1 at t=0.)

So the mean of "time to next proc" is
$E(proc)= c + \sum_{i=0}^{\infinity} t(S(i)) p(S(i)) = c + \sum_{i=0}^{\infinity} \frac{i}{v} p (1 - p)^i = c + \frac{1 - p} {v p}$

The main difference is, that you have, if v=1 and p=1, 100% prolongation of the buff and not a gap from 1 sec after the internal cd.

The average uptime U, when c>=D, is
$E(U)= \sum_{i=0}^{\infinity} \frac{D}{c+\frac{i}{v}} p (1-p)^i$

The difference is, that you can not calculate the average as the quotient of the averages.

 Aldriana 04/14/08 4:19 AM

Quote:
 Originally Posted by Troffel (Post 709574) The average uptime U, when c>=D, is E(U) = sum_{i=0}^{\infinity} D/(c+i/v) * p * (1-p)^i The difference is, that you can not calculate the average as the quotient of the averages.
I disagree. That attempts to answer the question "if I pick an interval between two procs at random, on average what is the expected uptime of buff during that interval" - which is related to, but not identical to, the question we actually want to know the answer to, namely "If I pick a random instant of time, what is the probability that the buff is up". The relevant distinction is that when we choose an instant of time at random, we are not equally likely to wind up in any interval; we are slightly more likely to pick one of the longer ones, and slightly less likely to pick one of the shorter ones.

Thus, my logic is as follows:

Let the average interval between procs be $I$. Thus, by definition over the course of some long segment of time $T$, there will be, on average, $\frac{T}{I}$ procs, and thus $\frac{DT}{I}$ total uptime. Hence, if we pick a time at random during this period of time, the probability that the buff is active is the total amount of time when the buff is active divided by the length of our interval, that is, $\frac{\frac{DT}{I}}{T}=\frac{D}{I}$.

Besides which, even if there is a flaw in my logic (and I'm not going to say for certain that there isn't): it's a far more useful formula than the one you present; even if it is slightly off (and I don't think it is), it's certainly close enough to give good approximations in real world cases, and has the distinct advantage of not requiring the evaluation of infinite sums, which is going to make it much more useful to most members of this community in practice, as my suspicion is that most people here don't necessarily remember how to evaluate an infinite sum.

 Troffel 04/14/08 3:54 PM

Quote:
 Originally Posted by Aldriana (Post 710160) I disagree. That attempts to answer the question "if I pick an interval between two procs at random, on average what is the expected uptime of buff during that interval" - which is related to, but not identical to, the question we actually want to know the answer to, namely "If I pick a random instant of time, what is the probability that the buff is up". The relevant distinction is that when we choose an instant of time at random, we are not equally likely to wind up in any interval; we are slightly more likely to pick one of the longer ones, and slightly less likely to pick one of the shorter ones. Thus, my logic is as follows: Let the average interval between procs be $I$. Thus, by definition over the course of some long segment of time $T$, there will be, on average, $\frac{T}{I}$ procs, and thus $\frac{DT}{I}$ total uptime. Hence, if we pick a time at random during this period of time, the probability that the buff is active is the total amount of time when the buff is active divided by the length of our interval, that is, $\frac{\frac{DT}{I}}{T}=\frac{D}{I}$.
But the same problem remains. The expected value of the number of procs in a long time segment is not the quotient of the the time segment divided by the expected value of the time between procs. But i think the approximation can be used, if the proc chance is high enough. Try it for yourself, generate a large enough sequence $(I_i)_{i=1..n}$ and calculate $\frac{T}{n}\sum^n_{i=1} \frac{1}{I_i}$ as the expected value of the number of procs and $\frac{T}{\frac{1}{n}\sum^n_i I_i}$. You will find a hugh difference depending of the generation (distibution) of the sequence...

Quote:
 Originally Posted by Aldriana (Post 710160) Besides which, even if there is a flaw in my logic (and I'm not going to say for certain that there isn't): it's a far more useful formula than the one you present; even if it is slightly off (and I don't think it is), it's certainly close enough to give good approximations in real world cases, and has the distinct advantage of not requiring the evaluation of infinite sums, which is going to make it much more useful to most members of this community in practice, as my suspicion is that most people here don't necessarily remember how to evaluate an infinite sum.
The question is, what we do practice or want we do theorycrafting. For practice are simple rules of thumb sufficient and often used for raiding. But my understanding is, that this is elitist jerks and the elite are not afraid of infinity sums nor Illidan either. So my target is to discuss how far the model reach and when/what approximations are useful.

The problem with theorycrafting is, that, if it is often too inexactly, it is not worth to do it for raiding, since equiment and skill makes a lot of more difference. 10% calculation error in dps means much and my experience is, that the carefully and precise calculation is worth the time. So lets discuss the approximations later and try to achive a model, which fits best. The usefulness of a formula is: How exact it covers the "reality" and not how easy it is to calculate. By the way i think that the infinite sum has closed analyical form, but i was to lazy to calculate it yesterday.

 Dontmindme 04/14/08 4:01 PM

I think I've found an error in the formula for cooldown proc rates. One factor has been left out. That formula is true if at the instant the cooldown ends, you have your next attack. You are missing a factor.

Correct formula should be:

U = D / (c + 1/2v + 1/vp)

where 1/2v = your average time until your next attack

Technically, if one were to assume all attacks come exactly as clockwork (including haste rates being constant), this factor would be different, but given we are taking into account averages (and your attack times shift somewhat with Haste and variability of instant procs), 1/2v is probably more accurate for what we are looking for.

 Aldriana 04/14/08 5:21 PM

Quote:
 Originally Posted by Troffel (Post 710901) But the same problem remains. The expected value of the number of procs in a long time segment is not the quotient of the the time segment divided by the expected value of the time between procs. But i think the approximation can be used, if the proc chance is high enough. Try it for yourself, generate a large enough sequence $(I_i)_{i=1..n}$ and calculate $\frac{T}{n}\sum^n_{i=1} \frac{1}{I_i}$ as the expected value of the number of procs and $\frac{T}{\frac{1}{n}\sum^n_i I_i}$. You will find a hugh difference depending of the generation (distibution) of the sequence...
Wrote a little code to do it for me:

Code:

max = 10000000 segs = 0 sum = 0 spread = 999 from random import random while sum < max:     # Each step, add a random number between 1 and spread, inclusive.     # Count how many segments it takes to get to max.     sum = sum + 1 + int(spread * random())     segs = segs + 1 print "Simulation: " print segs print "" print "Theory: " print max * 2 / (1+spread)
Output of a few runs:

Code:

> python segs.py Simulation: 19993 Theory: 20000 > python segs.py Simulation: 19950 Theory: 20000 > python segs.py Simulation: 20062 Theory: 20000 > python segs.py Simulation: 20022 Theory: 20000 > python segs.py Simulation: 20047 Theory: 20000
I don't know about you, but that seems to me to be running pretty close to $\frac{T}{I}$. And trying it with different parameters doesn't seem to change that:

Code:

Spread = 9: Simulation: 1999124 Theory: 2000000 Spread = 99: Simulation: 200303 Theory: 200000 Spread = 9999: Simulation: 2003 Theory: 2000
Quote:
 The question is, what we do practice or want we do theorycrafting. For practice are simple rules of thumb sufficient and often used for raiding. But my understanding is, that this is elitist jerks and the elite are not afraid of infinity sums nor Illidan either. So my target is to discuss how far the model reach and when/what approximations are useful.
Well, I agree that the problems are to some extent interesting in their own right; but I'd also argue that, particularly when writing a quick reference document, something that can be incorporated into a class modeling spreadsheet is more useful than something that can't. If we do come up with an exact solution, I'll happily throw in a mention of it and mark what I have as the easy-to-use approximation. But I think we're an extremely long way from having an exact solution, as we haven't even touched on the notion of attack distribution yet; most of these assume that they're either perfectly periodic or totally random (and sometimes, both in the same derivation) - when, in truth, they're not. So even assuming you're correct about the summation (which I don't think you are), and that you come up with a closed form approximation of it (which I expect to be hard)... it'll *still* just be an approximation. Which doesn't make it useless by any means - it's just not immediately clear to me that it's necessarily more useful than the stated one.

 Oblvnxknight 04/14/08 6:38 PM

Band of the Eternal Sage exhibits the same properties as the Band of the Eternal Champion , that is 1ppm and 60s internal Cool down

All times are GMT -4. The time now is 8:44 AM.