Forum Settings
       
Reply To Thread

Warrior DPS SimulationFollow

#1 Sep 19 2007 at 11:34 PM Rating: Excellent
I've been wishing for a Warrior DPS Simulation program for some time, and I figured I may as well go out and make one myself. I spent the afternoon teaching myself a bit about Python and wrote the program then. The code is... probably immensely inelegant since I'd never touched Python until literally the day I wrote most of this code, but it works and elegancy isn't the most enormous issue when the CPU requirements are so minor.

At the moment it's still privative, and many core functions need to be added, but it's quite modular and easily adjustable in its current state to model even extremely weird situations. I made special care to avoid build-in constants and instead import very nearly everything from an external text file, which makes fixing it rather easy.

More to come later as I further refine the model, but it's in (rather good) working condition now. It's got a fully functional counter, hit table, and all the architecture needed in order to incorporate later changes. I'll post a version of it later, once I can tinker with it a bit more and update it with some of the additions I plan on creating tomorrow.

Things to do (short-term)
  1. Correctly model damage. Yeah, yeah, yeah, it's kind of important but sue me. =p Actually a moderately trivial step at this point, as the architecture is all established.
  2. Windfury hasn't been modeled yet, but all I have to do is to add in three lines of code. I'll do it tommorow, it's actually pretty simple to model (especially now that it can only trigger off mainhand attacks).
  3. Model additional abilities - Mortal Strike, Slam and Heroic Strike.
  4. Model multi-target damage (Cleave, Whirlwind, Sweeping Strikes).
  5. Properly model weapon skill.
  6. Correctly model rage use/generation. Generation is intergral to the damage note above, and once that has been established a rage spending pattern can be written into the code.
  7. Correctly model threat - actually quite trivial, as it's a semi-simple matter of flat modifiers on the numbers given by damage plus bonus threat for certain abilities.
  8. Complete talent support.


Things to do (medium term)
  1. Replace the current method of entering stat/gear information with a more modular system - editing a text file, then running the program is clunky at best when you're trying to make minute changes. This will likely involve learning GUI elements, but it's something I can start working on once I've added in all the base information I want. Currently looking at a system where you can store default information in a text file and load it, then edit it and rewrite if you so choose. Hopefully will be combined with multiple 'save slots' for ease of use.
  2. Writing in different attack patterns is difficult, but far from impossible. What might be interesting is writing a module that would adjust the spending pattern (say, using Hamstring over Heroic Strike between certain rage thresholds on a high-hit, lower-crit set of gear in order to generate more Flurries).
  3. Correctly model threat versus rage efficiency versus overall damage - now this one is a bit more interesting. Comparing the differences between HS spam vs. Cleave spam vs. Hamstring spam vs. doing _nothing_ and the effect on your threat cap/threat generation? Something to consider
  4. Things to do (long term)
  5. Gear Database. At the moment you have to enter your stats in by hand (and the talent support is almost completely unfinished), although the base architecture is still there. This one is largely grunt work, and it's certainly possible to go without it, so I'm not going to sweat it quite yet.
  6. One of the biggest features I want to add (related to the gear database) is a system to determine the effects of gear upgrades and prioritize based upon that. Similar theory to the threat generation aspect, really. A simple test would be adding certain stats and seeing the effect, especially if they're semi-constant (gems, anyone?).
  7. Enchants, trinket procs, weapon procs. Far, far more complicated, and something I will have to tackle eventually, but this is where you start getting into real trouble and bogged down with details that you may or may not be able to verify without extensive testing yourself. As a practical matter this is the bit I'm least excited about, but I'll get to it.


Edited, Sep 20th 2007 8:16pm by RPZip
#2 Sep 20 2007 at 12:51 AM Rating: Good
****
8,779 posts
wow. that sounds like a monumental undertaking, at least the last few points (especially pertaining to trinkets).

i eagerly await the fruits of your labor.
#3 Sep 20 2007 at 2:46 AM Rating: Good
I'm pretty sure that I'll just do what all the smart people do... namely blatantly rip off the excellent Rogue spreadsheet from the EJ forums and use their numbers for PPM/proc-chances. We'll see, though.
#4 Sep 20 2007 at 8:36 AM Rating: Decent
***
1,331 posts
Have you seen the threatdown spreadsheet for tanking threat?

Here it is. It has windfury #'s and some other neat interesting things, I've been using it for alot of my model numbers.

#5 Sep 20 2007 at 9:38 AM Rating: Decent
**
339 posts
Im sure someone here can help you do all that Zip? Not me, but someone.

Btw, I think its great that you'd even spend your time working on something like that.
#6 Sep 20 2007 at 4:32 PM Rating: Good
Updated the To Do list. Looking for a place to host this, and people who'd be interested in helping me refine the code. Right now it's a bit of a mess as I convert long variable declarations into a single, compact list (something I just figured out how to do - thank you, google!) but the basics are all there. Anyone with a vaguely computational mind can take a quick glance at it and try to follow along and see if I've seriously boned anything up.

Unfortunately, in order to create it as a stand-alone executable I have to be on a windows machine... which isn't impossible or anything, just inconvenient and annoying. As a practical matter, this means that you might have to download Python tools in order to run it; as Python tools are an extremely small download and are useful regardless, I'm not sure how bad I feel about that.

Current sample output:
AP = 3000  
Crit = 0.3  
13.1 % increased hit chance with an overall miss/dodge/parry chance of 20.5 %. 
Duration of the simulated fight is 600 seconds repeated 500 times. 
The mainhand weapon deals 311.89 DPS at 2.7 speed with an average damage of 263.52  
The offhand weapon deals 196.62 DPS at 1.5 speed. 
 
 
Final Results 
Parried 0 times 
Dodged 26858 times 
Missed 59604 times 
Glanced 99993 times 
Hit 151006 times 
Crit 145259 times 
Mainhand swung 129022 times with Flurry active for 98913 swings, dealing a total of 108648320 damage and generating 1848658 rage. 
Offhand swung 249980 times with Flurry active for 173888 swings, dealing a total of 73725128 damage and generating 1160270 rage. 
Bloodthirst used 47480 times and dealt a total of 64098000 damage ( 1350.0 average ). 
Whirlwind used 35670 times and dealt a total of 9630900 damage ( 471.41 average ). 
Windfury procced 20576 times for a total of 19622493 damage ( 953.66 average ) and generating 317784 rage. 
Overall damage dealt equals 280099109 
Overall Rage generated equals 3326713 
Overall Rage spent equals 2187470 
Overall Flurry uptime of 71.979 %.


Edited, Sep 20th 2007 8:35pm by RPZip
#7 Sep 20 2007 at 6:04 PM Rating: Decent
***
1,331 posts
I noticed that MH swings where more flurry active than OH swings, which is counter to my intuition.

Quote:
Mainhand swung 129022 times with Flurry active for 98913 swings, dealing a total of 108648320 damage and generating 1848658 rage.
Offhand swung 249980 times with Flurry active for 173888 swings, dealing a total of 73725128 damage and generating 1160270 rage.


MH = 76.6% uptime
OH = 69.5% uptime

I had always assumed OH attacks ate flurry ticks, maybe a slower offhand might yield better results. 2.0 or 2.6. I know shamans want 2.6 speed MH and OH weapons or slower, since windfury (weapon spell, not totem) will (supposedly, not yet implemented, but 'will be' according to bliz) be on a ghost cooldown of 2.5 seconds. The way they get around it is by using different ranks of windfury spell on MH and OH.

Edited, Sep 20th 2007 7:06pm by devioususer
#8 Sep 20 2007 at 8:11 PM Rating: Good
It's 3.0 seconds, and it's been that way for months now. They broke downranking WF a long time ago.

As for the uptime, that seems to be consistant no matter what I do to my weapon speeds. I'll take a look and see why.

EDIT: Appears to be an artifact of how I do the Flurry calculations and in what order. If the mainhand/offhand swing are within .1s of each other and there's only one charge, it'll go to the mainhand and not the offhand. I'll tinker with it a bit.

Edited, Sep 21st 2007 2:01am by RPZip
#9 Sep 22 2007 at 10:36 AM Rating: Good
Heroic Strike properly modeled!


Final Results
Parried 0 times
Dodged 552 times
Missed 1055 times
Glanced 1832 times
Hit 2770 times
Crit 3652 times
Mainhand swung 2743 times with Flurry active for 2298 swings, dealing a total of 2584298 damage and generating 25826 rage.
Heroic Strike used 996 times, dealing a total of 1070318 damage and consuming 31266 rage. Active for 36.31 % of mainhand attacks.
Offhand swung 4999 times with Flurry active for 3884 swings, dealing a total of 1574751 damage and generating 24767 rage.
Bloodthirst used 942 times and dealt a total of 1398870 damage ( 1485.0 average ).
Whirlwind used 709 times and dealt a total of 184340 damage ( 196.94 average ).
Windfury procced 936 times for a total of 455856 damage ( 487.03 average ) and generating 7451 rage.
Overall damage dealt equals 7043573
Overall Rage generated equals 58045
Overall Rage spent equals 57595
Overall Flurry uptime of 79.85 %.


Threat to come next.
#10 Sep 22 2007 at 11:43 AM Rating: Decent
***
1,331 posts
Are you using a 40+% crit rate?

with 30% crit like the previous post, wouldn't you get more like... ~30% crits?

I'm just gonna try and figure this out;

Quote:
Dodged 552 times
Missed 1055 times
Glanced 1832 times
Hit 2770 times
Crit 3652 times


So total swings; 9309
=~39-40% crit rate. (3652/9309)


But if you add MH and OH together;

Quote:
Mainhand swung 2743 times...
Offhand swung 4999 times...

= 7742 swings...
add in;
Quote:
Bloodthirst used 942...
Windfury procced 936 times...
Whirlwind used 709 times...

10329 swings.

So is the program adding HS's to the MH swing total for a total of 996+2743, or is it just a sublet of MH swings, letting you know how many are HS's applied to your MH swing total?

If HS is in addition to;
Quote:
Heroic Strike used 996 times...

11325 swings...

So if 11325 swings occured, and 3652 of them where crits, (3652/11325) = ~32% crit rate. Which seems to be more in line with your beginning numbers.

Are the first set of glance/hit/miss/etc #'s your white damage alone? Or do we need to add in specials to the total?

I'm just confused by the read out of the information...
#11 Sep 22 2007 at 12:06 PM Rating: Excellent
Ah, right. I copied over my character's (semi-buffed) stats to try to get more accurate numbers. I'm currently using a 37% crit rate, which is about where I am with buffs and LotP. I'll adjust the numbers to something a bit more normal for ease of comparison.

Quote:


So is the program adding HS's to the MH swing total for a total of 996+2743, or is it just a sublet of MH swings, letting you know how many are HS's applied to your MH swing total?


Sublet.

Quote:

Are the first set of glance/hit/miss/etc #'s your white damage alone? Or do we need to add in specials to the total?


Should be for everything. Let me see...

Values loaded from EditMe.txt! Please edit this file to change the simulation parameters!
AP = 3000
Crit = 0.3
12.66 % increased hit chance with an overall miss/dodge/parry chance of 20.94 %.
Duration of the simulated fight is 600 seconds repeated 10 times.
The mainhand weapon deals 311.89 DPS at 2.6 speed with an average damage of 253.76
The offhand weapon deals 194.99 DPS at 1.5 speed.


Final Results
Parried 0 times ( 0.0 % )
Dodged 559 times ( 5.71 % )
Missed 1180 times ( 12.05 % )
Glanced 1782 times ( 18.19 % )
Hit 3343 times ( 34.13 % )
Crit 2932 times ( 29.93 % )
Mainhand swung 2692 times with Flurry active for 2068 swings, dealing a total of 2348726 damage and generating 25307 rage. Heroic Strike used 797 times, dealing 812065 damage and consuming 23921 potential rage. Active for 29.61 % of mainhand attacks.
Offhand swung 5000 times with Flurry active for 3389 swings, dealing a total of 1462433 damage and generating 23022 rage.
Bloodthirst used 937 times and dealt a total of 1264950 damage ( 1350.0 average ).
Whirlwind used 707 times and dealt a total of 183820 damage ( 199.8 average ).
Windfury procced 920 times for a total of 422435 damage ( 459.17 average ) and generating 6350 rage.
Overall damage dealt equals 5950571
Overall Rage generated equals 54680
Overall Rage spent equals 54270
Overall Flurry uptime of 70.944 %.

Edited, Sep 22nd 2007 4:07pm by RPZip
#12 Nov 17 2007 at 4:38 PM Rating: Decent
***
1,331 posts
Hows this thing turning out RPZ?

I know it's a zombie, but I'm still curious as to how this is working out for you.
Reply To Thread

Colors Smileys Quote OriginalQuote Checked Help

 

Recent Visitors: 417 All times are in CST
Anonymous Guests (417)