Jump to content


Photo

DPS Simulator


  • This topic is locked This topic is locked
133 replies to this topic

#41 Guest_acx_*

Guest_acx_*
  • Guests

Posted 07 August 2008 - 11:57 PM

Event lists can be of arbitrary time precision. For a system with small number of events it may be faster to check all events in the list everytime. But if the system needs to scale larger you will need to make it a time ordered event list.

#42 Tyvi

Tyvi

    Never, Mags. Never!

  • • Guide Author
  • 1,884 posts

Posted 08 August 2008 - 10:15 AM

Maybe I am missing something important in this whole "modeling Flurry is hard" discussion. I have no doubts that it is not hard, but there already is a working Simulator that works with Flurry: The Enhancement Shaman DPS simulator. Wouldn't it be possible for you to contact Yo! (he also posts here) and ask for the Flurry calculations part of his sim to include it in yours? I don't know, maybe I am seeing this too simple and this isn't even possible (or maybe you want to do everything yourself), but hey, no harm in suggesting it, right? :P

#43 Gruntle

Gruntle

    King Hippo

  • Members
  • 509 posts

Posted 08 August 2008 - 11:53 AM

It's not flurry that's hard to model, it's the rage generation and what miss streaks will do to your dps that is tricky. Flurry uptime will be 98-99% anyway with TG, you might as well not model it at all.

#44 Whistles

Whistles

    Piston Honda

  • Members
  • 124 posts

Posted 08 August 2008 - 02:55 PM

Event lists can be of arbitrary time precision. For a system with small number of events it may be faster to check all events in the list everytime. But if the system needs to scale larger you will need to make it a time ordered event list.


I've got to agree with this. I don't understand your objections to having it event based (landsoul and Grim). If rounding errors are going to have an effect they're going to be more prevalent in a time slice based system, not less.

And things like mid-swing haste are pretty trivial to implement. Simply calculate a new end time for the current swing and change when the swing event is scheduled.

#45 Grim13

Grim13

    Piston Honda

  • Members
  • 105 posts

Posted 08 August 2008 - 05:32 PM

I've got to agree with this. I don't understand your objections to having it event based (landsoul and Grim). If rounding errors are going to have an effect they're going to be more prevalent in a time slice based system, not less.

And things like mid-swing haste are pretty trivial to implement. Simply calculate a new end time for the current swing and change when the swing event is scheduled.


Actually, you got me to look at it from a different angle wording it like this, and I don't know how i missed it in the first place. It'd be pretty easy; something like

onFlurry()
t = swingEnd - currentTime
t = t * (1 - flurryHaste)
swingEnd = currentTime + t
swingSpeed = swingSpeed * (1 - flurryHaste)
flurryEnd = currentTime + swingSpeed * 3
return(swingEnd, flurryEnd)

...or something like that anyways.


The thing that i was stuck on before, and this made me solve was for some reason I was thinking that there wasn't a time reference for a mid-swing flurry, since it would be triggered by an instant crit rather than a swing crit. But, of course, there would be a time stamp on instant hits as well as swings, so it works. I just forgot that the triggering instant will itself provide the necessary time reference to calculate the new swing end time. Doing it this way, i think, will provide the resources to operate with a significantly greater amount of precision. Though, I would REALLY like to know how many significant digits WoW uses internally. Too much precision is better than not enough though, as being over-precise is much more likely to average out to where it should be than is the case with not enough precision.

**EDIT**

As to flurry up-time, my current spreadsheet is telling me about 80% for dual-wield and 99% for a 2-hand slam warrior. That's with 33.17% crit, 2.8 mace MH, 2.6 axe OH vs. 34.71% crit, 3.6 sword 2H. I imagine this is why the sheet says crit is more valuable for a DW warrior than it is for a 2H warrior. The DW gains a lot more flurry up time from crit. Looking at this actually helped me come up with an improvement to the flurry model just now. My current spreadsheet flurry model is:

1-(1-critChance)^(3/(MHhitsPerSec+OHhitsPerSec))

1 - (chance to NOT proc) ^ (time it takes for 3 swings)

1 - (flurry down time)

(flurry up time)


Oh, to Liar, re: modeling flurry haste... The main difference between warrior and shaman models is that a shaman doesn't have to consider instants to the same degree a warrior does. They have what? Like one instant? And it's a 31 point talent. You could probably get away with not even considering mid-swing flurry in a shaman sim and not even feel guilty about it. For a 2-hand warrior, 7 out of every 11 attacks in your rotation are instants. As such, we need to be really anal about shit like mid-swing flurry.

All those instants make for freakin' awesome proc up time though. On average, a 2-hand warrior probably has around 66% better up time than a shaman and about 33% better up time than a dual-wield warrior. Don't know much about rogues, i think they'd probably have a little better up time than a dual-wielding warrior, but not as much as a 2-hand warrior.

#46 Guest_acx_*

Guest_acx_*
  • Guests

Posted 08 August 2008 - 07:46 PM

Rogues don't have flurry, they have slice and dice which is a player triggered ability. Rogues can have 100% uptime on slice and dice if they wanted to.

#47 Feist-Mok

Feist-Mok

    Doesn't look like a Presbyterian.

  • Members
  • 4,835 posts

Posted 08 August 2008 - 10:05 PM

Rogues don't have flurry, they have slice and dice which is a player triggered ability. Rogues can have 100% uptime on slice and dice if they wanted to.


More accurately rogues SHOULD have 100% slice and dice uptime - a rogue that doesn't in a full DPS uptime position is usually a bad rogue.

#48 landsoul

landsoul

    Bald Bull

  • Members
  • 1,025 posts

Posted 09 August 2008 - 11:58 PM

flurry uptime model


80% for DW seems way low.

It seems that you are not including that special attacks can refresh flurry at all?


My model is severely complicated and is based off of more variables than yours. In summary, it counts for everything. It counts for if you do not land a swing, will not consume a charge. It counts for how many special attacks that can crit and do damage, etc.

1-((1-%WhiteMiss-%Dodge-%Crit)^HitsPerFlurry*(1-%Crit)^#SpecialsPerFlurryDuration)

#SpecialsPerFlurryDuration = SpecialsPerSecond*(1-%Dodge-%MissYellow)*HitsPerFlurry/FlurryChargesconsumedPerSecond

FlurryChargesconsumedPerSecond is the most complex variable. I had to calculate how many windfuries, sword specs, and white hits per second could consume the flurry charges while the flurry haste modifier was active. It was a very circular problem and I broke it way too many times than I would have liked before I got it right.

I imagine this is why the sheet says crit is more valuable for a DW warrior than it is for a 2H warrior.


Are you saying a single point of crit is worth more DPS to a DW than a 2h? well of course it is because DW does more DPS point per point of anything. I would imagine your example of a DW warrior doing at least 90% uptime in my sheet. Crit is more valuable to an arms warrior, say versus strength, due to other mechanics besides flurry.

#49 Grim13

Grim13

    Piston Honda

  • Members
  • 105 posts

Posted 10 August 2008 - 01:29 AM

actually, toy made me think on it, and the uptime equation i'm using is operating on swing, not hits, as I don't make that distinction until the summary for each hand. Addressing this issue shoud give DW a decent uptime boost. Won't be doing it till monday though. Oh, and I may be getting crazy busy if the union folks where i work go on strike monday. Might not have as muchg time for there projects till it;s trsolvrf. We'll see. I'm concentrating on how much money i might be making, working 72 hour per week. Btw, i'm medicated to the point of nearing incoherence right now, so i hope i;m making sense with this.

#50 Rezarel

Rezarel

    Piston Honda

  • Members
  • 199 posts

Posted 10 August 2008 - 04:11 PM

My model is severely complicated and is based off of more variables than yours. In summary, it counts for everything. It counts for if you do not land a swing, will not consume a charge.


Missed swings consume flurry charges.

From a combat log against the ghosts in Dire Maul North this morning:
8/10 10:52:04.718  SWING_MISSED,0x000000000022BF21,"Rezarel",0x511,0xF130002CB6003406,"Gordok Spirit",0x10a48,MISS
8/10 10:52:06.109  SWING_DAMAGE,0x000000000022BF21,"Rezarel",0x511,0xF130002CB6003406,"Gordok Spirit",0x10a48,377,1,0,0,0,1,nil,nil
8/10 10:52:07.093  SPELL_AURA_APPLIED,0x0000000000000000,nil,0x80000000,0x000000000022BF21,"Rezarel",0x511,12970,"Flurry",0x1,BUFF
8/10 10:52:07.250  SWING_DAMAGE,0x000000000022BF21,"Rezarel",0x511,0xF130002CB6003406,"Gordok Spirit",0x10a48,236,1,0,0,0,nil,nil,nil
8/10 10:52:08.203  SWING_MISSED,0x000000000022BF21,"Rezarel",0x511,0xF130002CB6003406,"Gordok Spirit",0x10a48,MISS
8/10 10:52:09.359  SWING_MISSED,0x000000000022BF21,"Rezarel",0x511,0xF130002CB6003406,"Gordok Spirit",0x10a48,MISS
8/10 10:52:10.078  SPELL_PERIODIC_DAMAGE,0x000000000022BF21,"Rezarel",0x511,0xF130002CB6003406,"Gordok Spirit",0x10a48,12721,"Deep Wound",0x1,54,1,0,0,0,nil,nil,nil
8/10 10:52:10.234  SWING_DAMAGE,0x000000000022BF21,"Rezarel",0x511,0xF130002CB6003406,"Gordok Spirit",0x10a48,148,1,0,0,0,nil,nil,nil
8/10 10:52:10.328  SPELL_AURA_REMOVED,0x0000000000000000,nil,0x80000000,0x000000000022BF21,"Rezarel",0x511,12970,"Flurry",0x1,BUFF
8/10 10:52:11.890  SWING_DAMAGE,0x000000000022BF21,"Rezarel",0x511,0xF130002CB6003406,"Gordok Spirit",0x10a48,321,1,0,0,0,nil,nil,nil

Translated to human readable form:

04.718: miss
06.109: crit
07.093: flurry up
07.250: hit
08.203: miss
09.359: miss
10.234: hit
10.328: flurry down
11.890: hit

There's only two hits between flurry going up and coming down (and in reality it probably faded before the second hit, but there's typically about a 1 second lag between the last hit and flurry fading).

Parries and Dodges also consume charges, but I don't have a log to show that at the moment.

#51 landsoul

landsoul

    Bald Bull

  • Members
  • 1,025 posts

Posted 10 August 2008 - 05:24 PM

Your combat log parse translation shows 4 swings between flurries and an entire second between a crit and flurry up. I never really trusted combat log. Do you use matching speed weps?

#52 Rezarel

Rezarel

    Piston Honda

  • Members
  • 199 posts

Posted 10 August 2008 - 05:36 PM

No, I used and . I tried to be careful and make sure there was >1.5 seconds before and after the events of interest.

At any rate, I think the log clearly shows that misses consume flurry charges, which was all I wanted to prove. If they did not consume charges, flurry would have stayed up until another hit, which didn't occur till 1.5 seconds later. Lag shenanigans don't change that logic.

Edit: I guess I actually do have a log of a dodge eating flurry. To make sure lag's less of an issue, it's with the nice slow (with Fiery Weapon enchant, hah):

8/9 23:35:56.703  SWING_DAMAGE,0x000000000022BF21,"Rezarel",0x511,0xF130002CB6003406,"Gordok Spirit",0x10a48,996,1,0,0,0,1,nil,nil
8/9 23:35:59.515  SWING_DAMAGE,0x000000000022BF21,"Rezarel",0x511,0xF130002CB6003406,"Gordok Spirit",0x10a48,528,1,0,0,0,nil,nil,nil
8/9 23:35:59.812  SPELL_DAMAGE,0x000000000022BF21,"Rezarel",0x511,0xF130002CB6003406,"Gordok Spirit",0x10a48,13897,"Fiery Weapon",0x4,40,4,0,0,0,nil,nil,nil
8/9 23:36:00.875  SPELL_PERIODIC_DAMAGE,0x000000000022BF21,"Rezarel",0x511,0xF130002CB6003406,"Gordok Spirit",0x10a48,12721,"Deep Wound",0x1,105,1,0,0,0,nil,nil,nil
8/9 23:36:02.390  SWING_DAMAGE,0x000000000022BF21,"Rezarel",0x511,0xF130002CB6003406,"Gordok Spirit",0x10a48,526,1,0,0,0,nil,nil,nil
8/9 23:36:02.703  SPELL_DAMAGE,0x000000000022BF21,"Rezarel",0x511,0xF130002CB6003406,"Gordok Spirit",0x10a48,13897,"Fiery Weapon",0x4,40,4,0,0,0,nil,nil,nil
8/9 23:36:03.812  SPELL_PERIODIC_DAMAGE,0x000000000022BF21,"Rezarel",0x511,0xF130002CB6003406,"Gordok Spirit",0x10a48,12721,"Deep Wound",0x1,105,1,0,0,0,nil,nil,nil
8/9 23:36:05.109  SWING_MISSED,0x000000000022BF21,"Rezarel",0x511,0xF130002CB6003406,"Gordok Spirit",0x10a48,DODGE
8/9 23:36:06.234  SPELL_AURA_REMOVED,0x0000000000000000,nil,0x80000000,0x000000000022BF21,"Rezarel",0x511,12970,"Flurry",0x1,BUFF
8/9 23:36:06.796  SPELL_PERIODIC_DAMAGE,0x000000000022BF21,"Rezarel",0x511,0xF130002CB6003406,"Gordok Spirit",0x10a48,12721,"Deep Wound",0x1,104,1,0,0,0,nil,nil,nil
8/9 23:36:08.437  SWING_DAMAGE,0x000000000022BF21,"Rezarel",0x511,0xF130002CB6003406,"Gordok Spirit",0x10a48,480,1,0,0,0,nil,1,nil

56.703: crit (flurry was up before I started logging)
59.515: hit
02.390: hit
05.109: dodge
06.234: flurry down
08.437: glancing hit

The SPELL_AURA_REMOVED event occurs pretty consistently 0.9-1.2 seconds after the last charge is consumed.

#53 dedmonwakeen

dedmonwakeen

    Bald Bull

  • Members
  • 1,302 posts

Posted 12 August 2008 - 03:09 PM

So if proc'ing Flurry on one hand will speed up the other hand in mid-swing..... What happens when Flurry drops mid-swing? Does the swing in progress slow down?

Rezarel, looking at your "dodge log" it seems that the Glancing Hit came too fast. The weapon speed is listed at 3.5sec, yet the time between the Dodge and the Glancing Hit is ~3.3sec.

Did that swing benefit from Flurry from time-05.109 to time-06.234 when it fell off?

Assuming the swing that resulted in a Glancing Hit benefited from the Flurry Aura, it would have been initially scheduled at:
05.109 + 3.5 / ( 1.0 + 0.25 ) = 7.909

If Flurry Aura went down at 06.234, then the swing was 40% complete when Flurry dropped.

06.234 + ( 100% - 40% ) * ( 3.50 Weapon Speed ) = 8.334

This is reasonably close to the 8.437 time in which the Glancing Hit occurred.

If Flurry did not partially affect the Glancing Hit, then it would have occurred at 8.609.

IT IS HARD TO TELL FOR SURE DUE TO LAG BUT IT iS POSSIBLE THAT REZ GOT THREE-AND-A-HALF SWINGS WORTH OF FLURRY GIVEN THAT THERE IS DELAY BETWEEN CONSUMING THE LAST CHARGE AND THE REMOVAL OF THE BUFF.


Given the following lag effects: (should be 2.8)
Time between crit and first hit: 2.812
Time between first hit and second hit: 2.875
Time between second hit and dodge: 2.719
Time between dodge and glancing hit (with flurry going down mid-swing): 3.328

EDIT: Massive edit due to bug in the haste expression and Rez's explanation of lag.

#54 Rezarel

Rezarel

    Piston Honda

  • Members
  • 199 posts

Posted 12 August 2008 - 03:35 PM

Bah.... I'm even more confused now.
Time between crit and first hit: 2.812
Time between first hit and second hit: 2.875
Time between second hit and dodge: 2.719
Time between dodge and glancing hit (with flurry going down mid-swing): 3.328

I had no idea that lag could affect the auto-attack so severely. Since it is not like chain-casting spells where you need a human to initiate each cast I thought more of this was done server-side.


I'd guess that the attacks do occur exactly at 2.8 speed on the server, but the time stamps in the combat log are when my computer received that information. If you average the three hits you get 2.802 seconds per swing. I'd guess the packet telling me about the second swing just got delayed, which is why it looks like the third swing occurred too soon.

Basically, with my lag it'll be hard to see the effects of partially flurried swings. You'd have to find someone closer to their server.

#55 landsoul

landsoul

    Bald Bull

  • Members
  • 1,025 posts

Posted 12 August 2008 - 05:17 PM

I can make a video swinging a torch of the danmned partially naked (to subtract some expertise and hit rating) on a ~72 mob and post it here. I'll edit it into this post today. Maybe it will be more clear off of visual cues instead of a laggy combat log.

flurrytest.avi - FileFront.com

....and yeah avoided swings definately do eat flurry charges. I better spend some time modding my sheet down then.

#56 tukez

tukez

    Don Flamenco

  • Members
  • 253 posts

Posted 21 August 2008 - 07:28 AM

Nice..warrior dps simulator, my friend is gonna like this. I am the author of this new enhancement shaman simulator enhsim - Google Code . I can give you some tips how to do this.

Do it event based for sure. I have done that and that is what makes my sim so fast. It runs on my computer(core2duo 7700, 2.4ghz dual core) at ~4000000 times normal speed. So 150000h of simulation takes about 2min 15s to complete. (/w multithreading, 2 threads)

I know, I know, if you look at the code..it's a bit of a mess. I have sacrificed a lot to speed but a big reason is also that I'm not patient enough to design it well. So try to design more! It's very hard though, because there is always something that you forgot to think about.

Event based does not sacrifice precision. What I have done is, that I use 0.01 precision with ints and doubles. I just multiply necessary values with 100 and floor doubles. I use doubles for example to record damages, time variables etc. That is because with long simulations, otherwise you will end up with overflow. By the way, 64 bit int is slower than double.

I think my simulator is quite good when looking at the variance. Thanks goes to SFMT, short of SIMD-oriented Fast Mersenne Twister SIMD-oriented Fast Mersenne Twister (SFMT) . It is Mersenne Twister random number generator. I greatly recommend to use Mersenne Twister with random numbers, because I tried with the default rand and it sucked balls, big time. SFMT is for C++, but I bet you can Mersenne Twister for other languages as well.

Then about flurry. In my sim, haste change during mid-swing does not change the speed. Maybe that is not corrent but I haven't seen any proof otherwise. I have a strong feeling that my sim's model is right. Why? Because I bet my ass that the real WoW is event based and that Blizzard have done it the easy way. It uses less CPU power and that's what they want with MMORPG. Well...who knows, I might be wrong.

My sim is with BC mechanics and I don't think I have too much problems to change it to WotLK. So in my opinion you can start to design it anytime.

#57 dr_AllCOM3

dr_AllCOM3

    Great Tiger

  • Members
  • 985 posts

Posted 22 August 2008 - 02:18 PM

Then about flurry. In my sim, haste change during mid-swing does not change the speed. Maybe that is not corrent but I haven't seen any proof otherwise. I have a strong feeling that my sim's model is right. Why? Because I bet my ass that the real WoW is event based and that Blizzard have done it the easy way. It uses less CPU power and that's what they want with MMORPG. Well...who knows, I might be wrong.


It does change mid-swing (do a search, I tested it). Flurry is simply a haste aura, most people confuse that with "charges". So it kinda is the easy way :).

I'll definitly have a look into your simulator. Maybe I can borrow stuff :P.

#58 tukez

tukez

    Don Flamenco

  • Members
  • 253 posts

Posted 22 August 2008 - 04:51 PM

It does change mid-swing (do a search, I tested it). Flurry is simply a haste aura, most people confuse that with "charges". So it kinda is the easy way :).

I'll definitly have a look into your simulator. Maybe I can borrow stuff :P.


Could you just give a link, as I can't seem to be able to find it? I'm very interested in this stuff, because I think it might have a noticeable effect with the sim. Also in my sim, same speed weapons do not stay in sync with flurry...might be wrong?

#59 dr_AllCOM3

dr_AllCOM3

    Great Tiger

  • Members
  • 985 posts

Posted 22 August 2008 - 10:20 PM

http://elitistjerks....p21/#post621366 I think.
Two weapons of the same speed stay in sync forever, but you have to start attacking when you are in melee range or the offhand starts slightly slower (maybe that's intended?).

#60 Machinator

Machinator

    Don Flamenco

  • Members
  • 498 posts

Posted 31 August 2008 - 09:30 PM

I was thinking about the event driven system, which I assume is some sort of linked list. How would you handle the searching, add/delete, and reordering of the event queue possibly more than once for each event? For example if you crit and gain flurry, you have to add an event at the correct time for flurry to fade, possibly delete an old flurry fade time, and adjust the swing time of both weapons plus any procs that happened on the hit.




0 user(s) are reading this topic

0 members, 0 guests, 0 anonymous users