Elitist Jerks
Register
Blogs
Urban Rivals
Forums
New Posts


Go Back   Elitist Jerks > Theorycrafting Think Tank > Theorycrafting Think Tank
Elitist Jerks Login

gamerDNA Login

Welcome to Elitist Jerks
We're testing some new features on the site regarding OpenID registration and coordination with gamerDNA. If you experience any issues with registering an account, please take the time to fill out a report and send it to this e-mail address. We would appreciate any assistance you could provide in making sure everything is functioning as intended. Thanks!

If this is your first visit, please be sure to check out the FAQ and the forum rules. Users must register to post and new registrations are subject to a one day "mute" period to get acquainted with the community.

Reply
 
LinkBack (41) Article Tools
  #1  

Proc Mechanics

Proc Mechanics
 

Contents

[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.


Contributors: Nite_Moogle
Created by Aldriana, 02/18/08 at 6:53 PM
Last edited by Aldriana, 03/05/09 at 5:09 PM
25 Comments , 25961 Views
Old 02/18/08, 6:54 PM   #2
 Aldriana
Super Macho Man
 
Night Elf Rogue
 
Proudmoore
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.
 
User is offline.
Reply With Quote
Old 02/18/08, 7:56 PM   #3
 Binkenstein
I'm not crazy, no, really, I'm not.
 
Binkenstein's Avatar
 
Askledarea
Blood Elf Shaman
 
No WoW Account
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

Originally Posted by Nite_Moogle View Post
my surpriseometer isn't registering anything here
is it broken
 
User is offline.
Reply With Quote
Old 02/18/08, 8:09 PM   #4
 Aldriana
Super Macho Man
 
Night Elf Rogue
 
Proudmoore
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.
 
User is offline.
Reply With Quote
Old 02/18/08, 9:22 PM   #5
 Binkenstein
I'm not crazy, no, really, I'm not.
 
Binkenstein's Avatar
 
Askledarea
Blood Elf Shaman
 
No WoW Account
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?

Originally Posted by Nite_Moogle View Post
my surpriseometer isn't registering anything here
is it broken
 
User is offline.
Reply With Quote
Old 04/09/08, 8:57 PM   #6
Obellix
Von Kaiser
 
Draenei Hunter
 
Greymane
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?
 
User is offline.
Reply With Quote
Old 04/10/08, 3:57 PM   #7
 Aldriana
Super Macho Man
 
Night Elf Rogue
 
Proudmoore
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.
 
User is offline.
Reply With Quote
Old 04/10/08, 4:40 PM   #8
Thalshara
Bald Bull
 
Thalshara's Avatar
 
Blood Elf Paladin
 
Mal'Ganis
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?
 
User is offline.
Reply With Quote
Old 04/10/08, 5:23 PM   #9
 Aldriana
Super Macho Man
 
Night Elf Rogue
 
Proudmoore
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.
 
User is offline.
Reply With Quote
Old 04/13/08, 7:13 AM   #10
Troffel
Von Kaiser
 
Gnome Warlock
 
Der Rat von Dalaran (EU)
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.

Last edited by Troffel : 04/14/08 at 5:06 PM. Reason: Using the latex-commands. Nice formating of the formulas.
 
User is offline.
Reply With Quote
Old 04/14/08, 5:19 AM   #11
 Aldriana
Super Macho Man
 
Night Elf Rogue
 
Proudmoore
Originally Posted by Troffel View Post
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.
 
User is offline.
Reply With Quote
Old 04/14/08, 4:54 PM   #12
Troffel
Von Kaiser
 
Gnome Warlock
 
Der Rat von Dalaran (EU)
Originally Posted by Aldriana View Post
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...

Originally Posted by Aldriana View Post
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.
 
User is offline.
Reply With Quote
Old 04/14/08, 5:01 PM   #13
Dontmindme
King Hippo
 
Dwarf Rogue
 
Icecrown
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.

Last edited by Dontmindme : 04/14/08 at 5:05 PM. Reason: Clarification
 
User is offline.
Reply With Quote
Old 04/14/08, 6:21 PM   #14
 Aldriana
Super Macho Man
 
Night Elf Rogue
 
Proudmoore
Originally Posted by Troffel View Post
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:

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:

> 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:

Spread = 9:
Simulation:
1999124

Theory:
2000000

Spread = 99:
Simulation:
200303

Theory:
200000

Spread = 9999:
Simulation:
2003

Theory:
2000
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.
 
User is offline.
Reply With Quote
Old 04/14/08, 7:38 PM   #15
Oblvnxknight
Glass Joe
 
Human Mage
 
Mal'Ganis
Band of the Eternal Sage exhibits the same properties as the Band of the Eternal Champion , that is 1ppm and 60s internal Cool down
 
User is offline.
Reply With Quote
Old 04/17/08, 4:44 PM   #16
 Vulajin
Now with 100%* less failure.
 
Vulajin's Avatar
 
Troll Rogue
 
Mal'Ganis
Originally Posted by Dontmindme View Post
Correct formula should be:

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

where 1/2v = your average time until your next attack
I don't believe this is necessary because the 1/vp term already incorporates the average likelihood that swings do or not do not occur in the second immediately following the cooldown's expiry.

Originally Posted by Darkside View Post
No expansion is complete without trolls. I expect now we'll discover that Arthas has been raising hordes of zombie-trolls in the secret troll hovel of Zul'Crown.
 
User is offline.
Reply With Quote
Old 04/20/08, 6:30 AM   #17
Gilmoshar
Glass Joe
 
Gilmoshar's Avatar
 
Dwarf Priest
 
Draenor
I confirm the uptime formula as above, using Markov chains and Mathematica. (How dare you retroactively plagiarize my unpublished notes!) Only, as regards the input of Dontmindme, perhaps it's best to use, instead of the product cv, simply the number of missed proc opportunities in the internal cooldown? After all, any variance in the internal cooldown between proc opportunities is basically invisible. The difference is basically a floor function somewhere in the denominator.

Further, since what matters to the uptime is the number of times an attack sees it, perhaps it's best to modify the duration term as well -- so the number of attacks within the duration. Though that's mostly nitpicking on my part.

The formula as appears in my notes is

 \frac{np}{mp+1}

where p is the probability of proccing the buff on any given swing, m is the number of proc opportunities inside the given cooldown, and n is the number of proc opportunities in the duration of the buff. Strictly speaking this is the probability that any given proc opportunity will be made with the buff up, which is what I was gunning for. I'd give my derivation, but you seem to have things pretty well in hand. (And my exposition would suffer for lack of a chalkboard anyways. :P)

Further, for completeness, the analogous quantity for a theorized proc with a duration greater than its internal cooldown is

 1 - \frac{(1-p)^{n-m}}{mp+1}
 
User is offline.
Reply With Quote
Old 04/21/08, 1:50 AM   #18
Dontmindme
King Hippo
 
Dwarf Rogue
 
Icecrown
Originally Posted by Vulajin View Post
I don't believe this is necessary because the 1/vp term already incorporates the average likelihood that swings do or not do not occur in the second immediately following the cooldown's expiry.
Actually it does not. 1/vp is the correct average time until the next proc starting at time 0.

With uneven numbers, there is a gap until the next eligible attack. In essence, the cooldown is not actually 20 seconds but 20 seconds plus the time interval until you have another attack. And actually, looking at my notes, I see an error. It should be -1/2v not +1/2v. As the formula 1/vp is assuming a full interval until the next attack and what you are left with at the end of a cooldown is a partial interval.

In my example I'm representing that time interval as 1/2v which is the average time until another attack. In truth, if all attacks were perfectly clockwork, this factor would be something different (essentially whatever fraction of an attack that does not evenly fit into the cooldown period).

An easy way to test this is a simple example. You flip a coin 1 time per second. What is the average time until you get a heads? This can easily be calculated (and even charted) and the answer is 2 seconds. Now what happens if there is a 1.5 second cooldown until it "counts" a heads? The answer is 3 seconds not 3.5 seconds.
 
User is offline.
Reply With Quote
Old 04/21/08, 11:31 AM   #19
Borodin
Piston Honda
 
Dwarf Warrior
 
Argent Dawn (EU)
Shard of Contempt: 10%, 45 second internal cooldown
 
User is offline.
Reply With Quote
Old 04/23/08, 1:52 PM   #20
Gilmoshar
Glass Joe
 
Gilmoshar's Avatar
 
Dwarf Priest
 
Draenor
Originally Posted by Vulajin
I don't believe this is necessary because the 1/vp term already incorporates the average likelihood that swings do or not do not occur in the second immediately following the cooldown's expiry.
Originally Posted by Dontmindme View Post
Actually it does not. 1/vp is the correct average time until the next proc starting at time 0.
If I understand you properly, this would be important if the buff expired at a random time, and you needed to factor in the time it takes until the next proc opportunity. But the time at which the buff expires (in the approximation of constant uniform attack speed, which I assume we're considering since that's where our formulae are true) is never random; it's always the duration of the buff modulo the time between attacks. And the proper way to handle this is just to forget about any buff duration between attacks, and count the number of proc opportunities made with the buff up (or with the internal cooldown up).

Again if I understand you properly, the way to proceed consistent with your input would be to basically start over with a new model; either constant nonuniform attack speed (hard and complicated, but better) or with attacks falling randomly subject to certain rules (probably also hard, and I'm not certain it's better.)

(Do we have a derivation for the formula under one of those approximations? If so, can you direct me to it?)
 
User is offline.
Reply With Quote
Old 04/23/08, 4:30 PM   #21
 Aldriana
Super Macho Man
 
Night Elf Rogue
 
Proudmoore
I think the way that most of us (by which I mean certainly myself, and probably DMM and Vulajin as well) are thinking about it is as follows:

After the cooldown completes, you are somewhere between two attacks. If attacks were perfectly periodic, you could figure out exactly where you'd be between two. But, alas, attacks aren't perfectly periodic - not even close. For casting spells they may be somewhat close (modulo the player's ability to cast spells perfectly end-to-end), but for melee attacks, they're really not. Never mind the fact that even straight autoattacking with a single weapon you'll see more variance in the time between consecutive attacks than you might guess, there's also the fact that MH attacks are muddied by SS procs, WF procs, and instant attacks, plus the fact that various haste procs and activated abilities means the spacing between consecutive attacks is anything but constant in the long run.

At this point, there are two schools of thought:

1) For attacks that are roughly periodic - OH attacks, and probably spellcasting as well - one assumes they're periodic but that the proc cooldown comes up at a random point in time between two attacks. Thus, the time till first eligible proccing attack is, on average, 1/2v, and then there's another chance to proc every 1/v units of time thereafter. When you total this up, you find that the expected time from end-of-cooldown to first proc is 1/vp-1/2v (which I think is what DMM was going for). This is probably a reasonable approximation of the offhand/chaincasted spell case.

2) For MH attacks, however, it seems to me that attacks are just too irregular for the periodicity assumption to hold - this is why I've defined v the way I have. If things were always (roughly) periodic, it would make more sense to define f = average time between attacks and use that. But, with procs and instant attacks - or procs that affect both hands, such that you have all that plus 2 interweaving roughly periodic attacks - periodicity doesn't really apply. Thus, I operate off expected number of attacks in a given interval of time instead. Thus, when the cooldown is up... the following second is a second like any other, so there are an average of v attacks in that second, and thus a proc occurs with probability 1/pv in the first second, (1-1/pv)*1/pv in the second second, and so on; adding this up gives the expected time till first proc after the cooldown as 1/pv, as per my original equation.

Which is the better way of modeling stuff in general? Hard to say. I chose option 2 because it's a simpler expression, and, frankly, the difference between the two is unlikely to be relevant. But as it's still an approximation, I'm not averse to other options if people think they are superior.
 
User is offline.
Reply With Quote
Old 08/01/08, 4:15 PM   #22
Bashui
Von Kaiser
 
Tauren Druid
 
Thunderhorn
Feral Megathread

I would like some input from some of the people here regarding the comment linked above. The uptime formula referenced says that it is only true for procs with an internal cooldown longer than the proc. In this case, i am trying to model the uptime of mangle, based on hit(miss) chance. Mangle can be used every 6 seconds, has a 12 second duration and can be refreshed. The formula that seems to match the simulation results is U=1-(1-m)*(1-m) where U is uptime and m is total miss chance. I would like to be able to derive the answer, but I was never very good at coming up with proofs.
Can anyone help with the derivation, and if my formula is wrong let me know what is wrong with my simulator?
int printSteps=10000000;
void Simulation(int hit)
{
  
double uptime=0;
  
double total=0;
  
int misses=2;
  
int steps=printSteps;
  
srand((unsigned int)time(NULL));
  while(
true)
  {
    if(
rand()<=hit)
    {
      
misses=0;
    }
    else
    { 
      
misses++;
    }
    if(
misses <2)
    {
      
uptime++;
    }
    
total++;

    if(!
steps--)
    {
      
printf("\n%f",uptime/total);
      
steps=printSteps;
    }
  }
}

Simulation((int)(.8*RAND_MAX)); 
The code prints out the average uptime every 10000000 trials, with an 80% chance to hit and converges on (1-.2*.2) or .96


I also did another sim that would exhaustively search through every trial of N attacks and weight the uptime with the probability of that string occuring and it also converged to the same value, though the work done doubles with every attack, so much that looking at every combination of 32 attacks took about 5 minutes!
 
User is offline.
Reply With Quote
Old 08/01/08, 5:39 PM   #23
 Aldriana
Super Macho Man
 
Night Elf Rogue
 
Proudmoore
1-(1-m)^2 is correct; it's basically the same argument as for procs with no internal cooldown, because the frequency of application is constant throughout; the reason why internal cooldowns are usually different is because you have one probability for the first c seconds and a different one thereafter. However, that's not what you have here; here, the probability of success on every check is the same, it's just the checks are made somewhat infrequently. The more generalized form of the formula in the first post is this:

If you have an effect that is applied, on average, once every t seconds, hits with probability p, and lasts for D seconds, then uptime is given by 1-(1-p)^{\frac{D}{t}}.

In your case, D/t = 2, so you simply get 1-(1-p)^2, as you deduced.
 
User is offline.
Reply With Quote
Old 01/20/09, 4:47 AM   #24
 landsoul
Didn't reroll DK
 
landsoul's Avatar
 
Night Elf Warrior
 
Alterac Mountains
Getting some data on Berserking. Ran a test of 1977 connects with a rogue holding a 1.4 dagger. No haste, no increased attack speeds. 34 procs. I know the size of the data is small, but it took over an hour sitting there and counting procs. This data yields anywhere between .65 and .8 PPM. Can anyone else do a larger test?

Visit my Youtube Channel for an increasing selection of warrior videos, including Undermanning, PvP, and LK Raids:
http://www.youtube.com/user/LandsoulWoW
 
User is offline.
Reply With Quote
Old 02/25/09, 10:30 PM   #25
Dragon-CR
Von Kaiser
 
Draenei Shaman
 
Crushridge
Frankly it appears most of the assumed mechanics on Mongoose/Berserking I've seen posted around here are, well, wrong. From what I've seen from several threads the 1.2ppm is assumed to be unaffected by haste. Copied and pasted from my post in the Enh Shammy thread. Somebody please feel free to double check my work, I will be testing more as I have time.

If you want the quick version, from the test I did I'm thinking both Mongoose and Berserking are 1ppm, however they are affected by haste. This was determined over 4 test runs of 1+ hour each (limited by weapon durability)

I did ~9000 swings on test dummy (that connected), along with another ~1000 WF attacks and had 568 LS procs, with ~4% spell miss (as shown by FT), and none of the LS show as missed or fully resisted. This was on the heroic dummy. Also in this run I had ~49% berserker uptime, and Procodile showed 176 procs and 1.76ppm for dual berserker but that doesn't count refreshes. This run had ~71% flurry uptime as well.

I downloaded Proculas and did a second test run on the L60 dummies, and did 9857 attacks on them with no weapon imbues or LS this time. Procodile reported 155 Berserker buffs and 1.72ppm without refreshes, however Proculas reported 303 procs including refreshes for a total of 3.36ppm over 90 minutes. Neither mod shows the uptime for dual berserker buffs unfortunately. This run had ~79% flurry uptime, no weapon imbues, and no special attacks, only WF and SoE totem for max haste and crit.

I did a few tests effectively naked wearing just weapons and a few items with the most hit and least crit on them. For this run I pulled [Pride] out of the bank that had mongoose on it to seperate out the mongoose and berserker procs. This run had no imbues, no totems, no specials, and ~41% flurry uptime. I observed a somewhat large gap between mongoose and berserking PPM rates, mongoose with 1.36ppm and berserking with 1.02ppm over 5000 seconds and ~6000 attacks, assuming thats just due to luck with mongoose and bad luck with berserking over a small set they could both still be in the 1.2ppm range, and they both average out there.

I had done another test prior to the above test with the wrong Procula version installed which only tracked mongoose and for that run it had mongoose at 1.11ppm with a 1hr test.

That doesn't change the fact that the full gear/haste version had ~1.7ppm x2 which is much harder to explain by a 90 minute lucky streak on both weapons, as it's ~41% higher than expected. Total average haste with 4pc T7 and flurry compensated for uptime, WF totem, item haste, and my [Meteorite Whetstone] averaged out with its uptime for the fight was ~67.4%, however if you take WF totem out of the equation then flurry + haste rating is ~39.5% haste. My naked haste including flurry was ~12%.

So this testing begs the following questions:
  1. Are we sure the ppm for mongoose and berserking is 1.2? From my mostly naked tests it seems in that area but possibly slightly lower.
  2. Are we sure haste effects don't affect weapon proc rate? 3.36ppm over 90 minutes with dual berserking seems to fall fairly far outside the probability of a lucky streak.
  3. If some haste does affect it, do all haste effects affect it? If so then 41% more procs for 67% more haste was an unlucky streak, if only some effects do, and WF totem isn't one of them, then 39% more more haste matches the observed proc rate. If #1 is right about the lower proc rate, and the proc rate is actually 1ppm, then the 67% haste matches fairly well with 1.7ppm.

I know it would have been much better to spec out of flurry to eliminate that factor from the naked tests but I frankly didn't feel like it and I don't think it affected the results too much, esp since I dumped as much crit as I could for those tests.

I have fairly extensive screenshots of the above test results if anybody cares to see them, both recount, procodile, and proculas data. If you really want to see them let me know and I can post them.

If anybody else cares to repeat these tests I recommend both proc monitoring addons since Procodile shows total uptime and Proculas counts refreshes for a more accurate proc count.
And later...

More berserker proc rate testing.

L60 dummy, 1hr duration, self buffed with SoE, WF, and mana spring totem.

6918 melee attacks, 802 WF attacks, 702 storm strikes, 385 lava lashes.

Berserker uptime 54.5%, not a lot higher than auto attack, however the PPM changed considerably. I had 256 procs in 3605 seconds for

4.26ppm over the hour, or 0.9ppm higher than my auto attack test. I also had more haste due to my hyperspeed accelerators and totem of hex. Meteorite Whetstone uptime/ppm seemed about the same, Mirror uptime/ppm was a tiny bit higher.

The higher proc rate with the not much higher total uptime means there was a lot more refreshes obviously but I also have a feeling it affected the dual berserking uptime a good bit more than is represented. Unfortunately as I said before the mod doesn't track that.

I'd say this test with the other I did leans strongly toward a 1ppm rate on the enchant, however it is affected by haste.

I might do the test again sometime with my Pride again and test the overall uptimes for berserker and mongoose over an hour or so.

Assuming no server bugs and all SS's and LL's and OH melee attacks gave 1 FT attack, there were 2845 MH attacks and 4073 OH auto attacks. This gives 4809 OH attacks total and 3998 MH attacks. assuming the 1ppm rate I gave above and 2.6MH and 1.4OH that's 4.33% MH chance and 2.33% OH chance. That's 173MH procs and 112OH procs, for a total of 285 theoretical procs. So if my assumtions are right there's still 29 missing procs, but is within ~10% of the value. A number of procs could have been lost to same time procs from insta attacks or WF procs, and the server may have a cache and only send updates every few msec and if say an auto attack and SS both proc one maybe it only sends the one update, not sure there.

Assuming the 1.2ppm rate unaffected by haste then over 60 mins with dual berserking you're looking at 144, assuming 1.2ppm for specials is based off of base speed still that's 2.8% chance on OH specials and 5.2% for MH specials. That gives 60 MH procs and 21 OH procs on specials. This puts us off at -31ppm for the assumed 1.2 rate, and also assumes no dual procs that may have only shown as one in the log. being over 10% low with no way to count for the discrepancy doesn't sound right either.
 
User is offline.
Reply With Quote
Reply

Go Back   Elitist Jerks > Theorycrafting Think Tank > Theorycrafting Think Tank

Article Tools


Similar Threads
Thread Thread Starter Forum Replies Last Post
Proc Per Minute Mechanics & Haste Rezarel Class Mechanics 132 07/30/08 12:59 AM
Proc Rate Determination Machinator Class Mechanics 36 04/04/08 8:43 PM
Proc Watch Alternative? UnholY_Prince User Interface and AddOns 2 12/31/07 11:46 AM
Looking for Mod: Proc Tracker? Christifori User Interface and AddOns 11 06/29/07 6:00 AM
Request-DS8 Proc rate Curly Public Discussion 7 09/01/06 4:01 AM