If anyone wants a framework to build a simulator on top of, I built most of one in Python about a year ago. It's intended for a pre-BC dual wielding Warrior, but it wouldn't be too hard to adapt. Things like Flurry and Windfury are already built in, though not the WF cooldown - that would be very simple to add however.
It's not well documented and for that I apologize, I got distracted by the last fall semester and never finished/polished it, but I'm fairly sure the main combat engine works. If it would be helpful for anyone else's sim projects, feel free to PM asking me how to tinker with it. The executable is fight.py, there aren't (I don't think) any command line params; most of the specifiable inputs are either in a text file or constants in fight.py.
If anyone wants a framework to build a simulator on top of, I built most of one in Python about a year ago. It's intended for a pre-BC dual wielding Warrior, but it wouldn't be too hard to adapt. Things like Flurry and Windfury are already built in, though not the WF cooldown - that would be very simple to add however.
It's not well documented and for that I apologize, I got distracted by the last fall semester and never finished/polished it, but I'm fairly sure the main combat engine works. If it would be helpful for anyone else's sim projects, feel free to PM asking me how to tinker with it. The executable is fight.py, there aren't (I don't think) any command line params; most of the specifiable inputs are either in a text file or constants in fight.py.
I'll take a look at that framework tomorrow, basicaly what I did was write the framework in C++ ( event dispatcher pattern) and then wrote a shaman on it, with his own list of talents (implemented only the flurry atm); may be I will get some ideas from your, I know python but I like more c++ if I have to do something for my amusement.
So...basically...a setup of crit and weapon that no one, EVER, are going to use to dps?
I'm not searching for the best combo of weapon speed, or %crit, I just doing some setups and see if the simulation confirms the reality (call WOW reality is an oxymoron )
This number is completely independent of weapon speed, as long as the speed is within the range of 1.5<S<3. In this simple scenario, Windfury dps is a linear function of weapon dps. Does this clear everything up?
First off, apologies for going over the top. There *was* some elementary misunderstanding of probability going on here, but not by you.
Now to turn to this result - well you don't need to go to that lengths to prove it. Part of the problem was I didn't realise how many words were being used on something (a) so simple and (b) already known.
Considering a case where you're autoattacking, no flurry, no specials, no parries.
WF is linear with weapon speeds above 3.0 , with a p[roc chance per hit of 1/5
WF is linear with weapon speeds between 1.5 and 3.0, with a proc chance per hit of 1/6. This is because there is exactly one ineligible swing after each WF proc
WF is linear with weapon speed between 1.0 and 1.5, with a proc chance per hit of 1/7. This is because there are exactly two ineligible swings after each WF proc.
So much is trivial - but it doesn't get us very far except as part of a more advanced simulation, and is already built into the existing sims. So I'm not quite sure what the purpose of this thread is.
I do however have a question about WF and cooldowns. I know that the cooldown only applies to the self-buff version of WF, and not to the totem. However, does the self-buff cooldown affect the totem proc chance?
That is, if a shaman casts the self-buff version on their offhand while using WF totem on the main hand - will WF procs from the (self-buffed) offhand trigger a cooldown and prevent the (totem-buffed) main hand from proccing?
If not, it seems to me that in raids, where the shaman will be dropping WF totem, a faster offhand might be workable, since you'd only have to worry about off-hand procs eating other off-hand procs. With DW miss rates, this wouldn't be a huge issue.
I do not believe that, I'm not an idiot. For big numbers (and that is what we are speaking here), you have a windfury each 5 swing (in average) of course having a weapon with speed > 0.6 ( otherwise you have to take in account the CD ).
Incorrect, for big numbers you will get a WF every five swing, but not like this:
PROC
-
-
-
-
PROC
etc
Out of 1000 swings you'll get 200 procs (if you ignore the 3s CD) but it will sometimes look like this
PROC
-
PROC
PROC
-
-
etc
You're twisting statistics, you're saying that you'll get a 6 every 6. throw of the dice, but you could stil get 5 6's in a row. It's not that big of a difference, but it matters. Especially when you have a "made up" situation.
Someone has probably stated this before, but I'll do it again:
3s swing -> Fever and bigger procs
1s swing -> More small procs
When you introduce the 3s CD, more then 3 times as many small procs will be nullified by the CD. And even if there was no CD, specials would tip the scale in favor of slow weapons.
That is, if a shaman casts the self-buff version on their offhand while using WF totem on the main hand - will WF procs from the (self-buffed) offhand trigger a cooldown and prevent the (totem-buffed) main hand from proccing?
If not, it seems to me that in raids, where the shaman will be dropping WF totem, a faster offhand might be workable, since you'd only have to worry about off-hand procs eating other off-hand procs. With DW miss rates, this wouldn't be a huge issue.
WF Totem doesn't have a cooldown at all, so it does not interact with WF Weapon in any way. However what you are proposing would result in a net loss of DPS for the shaman. Winfury Totem is strictly inferior to Windfury Weapon, even with the cooldown on the weapon enchant. We get 2 attacks instead of 1 with a much larger attack power bonus.
@dragkhar: Look, here's the issue. Regardless of whether your logic is correct, the argument you are making at this point in time is completely moot. To say that you are not considering crit (all your examples were for cases with 0% crit, and therefore no flurry either), and only considering a single-wield scenario (at weapon speeds that itemization does not exist for) makes this argument worthless to the public.
Worse though is that your posts now serve to confuse the windfury mechanic and present misinformation to shaman who come here seeking info on how to itemize and play their character At first glance through this thread a new shaman (and we're getting plenty of them visiting this particular forum lately) will come to the conclusion that he should just Dual Wield two daggers with windfury - which is a bad decision.
I spoke with Yes last night and he said that your source code is written extremely well. You might have a great model and sim there, but not right now. Right now it seems that you are struggling with some underlying assumptions of how to model things. You apparently came to some conclusions based on these flawed assumptions and you spent your time in this thread defending your conclusions soley based on your simulation. I would strongly encourage you to go pick apart Disquette, Pater or Tornhoof's simulators and examine their approach.
A crocodile is green on top and pale on the bottom.
It's long on the top, and the bottom.
Therefore a crocodile is longer than it is green.
Proven by logic or math does not mean correct, especially if you're working from false assumptions or imperfect information.
To be fair, this joke argument isn't math. It's argument by violation of lexical scope. It's the same kind of argument as:
God is love
Love is blind
Ray Charles is blind
Therefore Ray Charles is God
And the source of confusion comes from "is" meaning "equals" in some statements and "has the property of" in others. (In your example, the overloaded word is "longer".)
Incorrect, for big numbers you will get a WF every five swing, but not like this:
PROC
-
-
-
-
PROC
etc
Out of 1000 swings you'll get 200 procs (if you ignore the 3s CD) but it will sometimes look like this
PROC
-
PROC
PROC
-
-
etc
You're twisting statistics, you're saying that you'll get a 6 every 6. throw of the dice, but you could stil get 5 6's in a row. It's not that big of a difference, but it matters. Especially when you have a "made up" situation.
Someone has probably stated this before, but I'll do it again:
3s swing -> Fever and bigger procs
1s swing -> More small procs
When you introduce the 3s CD, more then 3 times as many small procs will be nullified by the CD. And even if there was no CD, specials would tip the scale in favor of slow weapons.
WF Totem doesn't have a cooldown at all, so it does not interact with WF Weapon in any way. However what you are proposing would result in a net loss of DPS for the shaman. Winfury Totem is strictly inferior to Windfury Weapon, even with the cooldown on the weapon enchant. We get 2 attacks instead of 1 with a much larger attack power bonus.
Ah right, so when they're dropping WF totem for the melee group, they're still putting the self-buff WF on their main hand? Good to know.
The thing about averages is that when you define an average, you have to define a range because averages are defined as occurances/range.
ex: "Average number of procs in 6 swings" or "Average number of procs in 20 minutes"
The problem with doing such when modelling Windfury is that the game doesnt use averages. It, in no way, defines a range and as such, an average can not be defined for modelling purposes.
I posted my result on my first page to have a feedback in order to validate the simulator, but it seems that
most of readers didn't catch my objective (my fault for sure). I'm not trying to demonstrate anything to anyone, I'm not suggesting that you have to use a slow weapon, or you have to use a 2H weapons instead of DWing.
So please do not give me feedbacks of a teenager like I already received, once for all:
"this is a stupid post and you are stupid for posting it."
So thanks to Lactose, Hell and even Yes, I refined the combat simulator framework fixing the glitch about WF not accounting the extra damage due the weapon speed ( 34 * speed), I'm also using the time resolution that blizzard seems to use, 15 ms. On my first post also the maths I shown was incorrect due to a misunderstanding, to have the right formulas refer the one Hell written after that post, btw my formula was
valid only for speed > 3.0.
I implemented on the framework a Shaman using a single weapon, WF and Flurry are considered.
The graph reports on X-axis the speed from 0.1 to 8.0, on Y-axis is reported the DPS obtained with the weapon. The weapon is a 100 DPS one. Bottom line to top: 0%, 10%, 15%, 20%, 25%, 30%, 33% crit.
I believe now the graph reports correctly the espected damage; next step to validate the simulator si to introduce another weapon as offhand in order to see the interaction the two swings have each other (I'll try to have a 3D graph).
If your end-state goal is the modeling of DW weapons, you should probably consider making your output graph more useful by limiting the x-axis to relevant weapon speeds. Showing what the damage is at speed 8.0 isn't useful to anyone.
If your end-state goal is the modeling of DW weapons, you should probably consider making your output graph more useful by limiting the x-axis to relevant weapon speeds. Showing what the damage is at speed 8.0 isn't useful to anyone.
I'll do it, do you believe a [0.1 ; 4.0] is a reasonable range ?
1.3 to 3.0 is a reasonable range. There are no relevant 1h weapons outside that range.
Sure but the simulator doesn't have a weapon wow database ( may be in the future ) so I will do the simulations with a larger range than actually available weapons and then I will cut the graph in a range that reflect the existing weapons (just for the one interested in use it as a guide to choose in game weapons combo).
Hmmm. My apologies to you also, I see now what you're aiming at. Some interesting results beginning to come out of it too.
To break that graph down somewhat:
The line for crit=0 shows us exactly what we expect - linear graph segments with jumps at 3s and 1.5s. This corresponds to WF procs followed by 0, 1 or 2 ineligible swings.
As you start adding in crit and therefore flurry, you gain additional "jumps" at slower weapon speeds. These two jumps should correspond to the points where your weapon speed while under the influence of Flurry is 3s or 1.5s. (To see why the peaks are at those values, consider what happens with a 100% crit rate, so flurry is always up). As your crit rate increases, moving from 10% to 33% crit, your flurry uptime increases, and these two new peaks become the dominant signal in the data.
However, I'm concerned there may be some problem with your code, as these new peaks are in the wrong place - they should be at 3.9s and 1.95s, since these correspond to 3s and 1.5s once you account for 30% haste from Flurry.
In your graphs, the two new peaks are at ~4.2s and 2.1s. This corresponds to 40% haste while flurried - are you sure you have this right?
The take-home lesson is that for normal in-game values of crit where flurry uptime is not 100%, you will have jumps in the function at 1.5s, 1.95s, 3s and 3.9s. This thus makes the function act less like a piecewise function, and more like a smooth dependence on weaon speed. Particularly because when dual wielding, your actual rate of hitting things will pretty much always be in the range of 0.5-1.5s, where the "jumps" are much closer together and thus more closely approximate a smooth dependence on weapon speed.
1.3 to 3.0 is a reasonable range. There are no relevant 1h weapons outside that range.
But if you want to use the simulator to estimate damage when you have certain haste effects on, you'll need speeds faster than 1.3. I think a lower bound of 0.5 would be sufficient for that.
To aid debugging your code, here's where you expect to see the discontinuities. I've listed all the "jumps" that fall within the range [0.5, 4]. Obviously you'd have to run the simulator for many hours to see them all clearly. As it stands, everything below about 1.5s is getting blurred out due to statistical fluctuations and/or the resolution of your ticker.
WITH NO CRIT/FLURRY
3s
1.5s
1s
0.75s
0.6s
0.5s
UNDER THE INFLUENCE OF FLURRY
3.9s
1.95s
1.3s
0.975s
0.78s
0.65s
0.557s
However, I'm concerned there may be some problem with your code, as these new peaks are in the wrong place - they should be at 3.9s and 1.95s, since these correspond to 3s and 1.5s once you account for 30% haste from Flurry.
In your graphs, the two new peaks are at ~4.2s and 2.1s. This corresponds to 40% haste while flurried - are you sure you have this right?
Taking this further, assuming you are using a 30% Haste, are you applying Haste correctly?
This is common error to do when calculating hastes, example with 3.9 speed weapon, 30% Haste:
3.9*(1-Haste%)
3.9*0.7 = 2.73 This is incorrect.
This is how to correctly calculate hastes, same setup as above:
3.9/(1+Haste%)
3.9/1.30 = 3
Again, this is the correct way.
Look, Lactose, we'd rather you didn't eradicate the whole human race.
- Sam & Max
Taking this further, assuming you are using a 30% Haste, are you applying Haste correctly?
This is common error to do when calculating hastes, example with 3.9 speed weapon, 30% Haste:
3.9*(1-Haste%)
3.9*0.7 = 2.73 This is incorrect.
This is how to correctly calculate hastes, same setup as above:
3.9/(1+Haste%)
3.9/1.30 = 3
Again, this is the correct way.
Lactose, thank you for this, I'm using the incorrect way indeed, reading the Flurry tooltip it say: "Increases your attack speed by 30%", so I just reduced by 30% the swing period, doing theWeaponSpeed * 0.7, I will replace it with theWeaponSpeed / 1.30.
As soon the framework is stable enough, I will put it on google code so errors like this will be spotted soon. I'm focusing at the moment on the framework and using a Shaman to see if the framework itself have all the features needed to simulate a character (I had to start from somewhere).
I introduced a second weapon (offhand) and now I have a problem I need to solve.
I roll the dice at each swing, what happens if the two weapons shall do a swing at same time,
and both have a WF proc? Wich one I have to consider, MH or OH?
As anyone studied already the probability density function of blizzard random numbers
generator ?