Simulationcraft - Feral rotation discussion and script
Moderator: Forum Administrators
Re: Simulationcraft - Feral rotation discussion and script
Unfortunately I'm still working on my Brawl stuff so I wasn't able to use my new code, but I was able to hack into Catus simc-support for /run_action_list and /swap_action_list which let me support your latest action list (from above).
For my first test, I replaced the 1.12 coeff with a variable that I can modify in my sim, and then iterated 10k-sample sims from [0.9, 1.3] step 0.005.
To my surprise, there exists a nice structure to the data:
http://raffy.antistupid.com/wow/catsim/ ... iplier.png
I computed everything relative to "clip if better"
/rake,if=target.time_to_die-dot.rake.remains>3&tick_multiplier%dot.rake.multiplier>1
Note: this simulation is specific to the gear in the profile above (T14 Heroic, no upgrade, DoC spec, etc...)
As the plot shows, as long as new Rake ticks harder than the current Rake, it is a DPS gain to clip Rake.
Caution: this is just my first attempt -- there might be bugs. I'll generate some more results with larger sample sizes soon. I also want to record the Total Rake damage to see if that is changing with aggressive Rake clipping. I also want to play with Rip too.
Edit:
Here is another plot relative to the existence of the clip statement:
http://raffy.antistupid.com/wow/catsim/ ... plier2.png
(blue = multipler > 1 ie. dps gain; red = multiplier <= 1 ie. dps neutral or negative)
Edit:
Increased the sim count and removed the 7.5 minute hard combat stop (that I forgot to remove).
I also recorded the Rake Damage Percent. Same trend as above:
http://raffy.antistupid.com/wow/catsim/ ... plier4.png
Edit:
The fact that negative coeff Rake clipping actually is DPS increase, is basically due to staggered buff fades and no lookahead-style damage modifier support. If instead, the damage modifier was computed twice: relative to the current time and relative to a future time, we could squeeze out more DPS. Catus has support for this.
The situation arises when the current Rake is a DPS loss, but the Rake you'd apply 2-5 seconds now is an even bigger DPS loss. Examples of this happening are things like Potion (25sec) overlapping Springs (10sec), Dancing Steel (12sec), and Bottle (20sec)
For my first test, I replaced the 1.12 coeff with a variable that I can modify in my sim, and then iterated 10k-sample sims from [0.9, 1.3] step 0.005.
To my surprise, there exists a nice structure to the data:
http://raffy.antistupid.com/wow/catsim/ ... iplier.png
I computed everything relative to "clip if better"
/rake,if=target.time_to_die-dot.rake.remains>3&tick_multiplier%dot.rake.multiplier>1
Note: this simulation is specific to the gear in the profile above (T14 Heroic, no upgrade, DoC spec, etc...)
As the plot shows, as long as new Rake ticks harder than the current Rake, it is a DPS gain to clip Rake.
Caution: this is just my first attempt -- there might be bugs. I'll generate some more results with larger sample sizes soon. I also want to record the Total Rake damage to see if that is changing with aggressive Rake clipping. I also want to play with Rip too.
Edit:
Here is another plot relative to the existence of the clip statement:
http://raffy.antistupid.com/wow/catsim/ ... plier2.png
(blue = multipler > 1 ie. dps gain; red = multiplier <= 1 ie. dps neutral or negative)
Edit:
Increased the sim count and removed the 7.5 minute hard combat stop (that I forgot to remove).
I also recorded the Rake Damage Percent. Same trend as above:
http://raffy.antistupid.com/wow/catsim/ ... plier4.png
Edit:
The fact that negative coeff Rake clipping actually is DPS increase, is basically due to staggered buff fades and no lookahead-style damage modifier support. If instead, the damage modifier was computed twice: relative to the current time and relative to a future time, we could squeeze out more DPS. Catus has support for this.
The situation arises when the current Rake is a DPS loss, but the Rake you'd apply 2-5 seconds now is an even bigger DPS loss. Examples of this happening are things like Potion (25sec) overlapping Springs (10sec), Dancing Steel (12sec), and Bottle (20sec)
Edgy (Suramar) / Catus: Feral Simulator / Apparatus: Paper Doll / Focus: Hearthstone Simulator / Hearthstone Calculator
GitHub: WarBase / WarDBC / WarKit / Catus 2
GitHub: WarBase / WarDBC / WarKit / Catus 2
Re: Simulationcraft - Feral rotation discussion and script
Very interesting, I honestly did not expect for it to be gain to essentially clip as aggressively as possible for the most miniscule of damage gains. It definitely feels weird how much clipping there already is in the Ovale script and having that go up more just seems crazy.
Is there a (reasonable) way to refine the data at all? I'm tempted to think that the DPS drop off is just very very slow until you get up to roughly the 1.15ish range and that 1 is the optimal value, but I really shouldn't make that assumption. The data is too indeterminate to find an actual peak.
That's not something that I think is really worth worrying about though, I would just leave that for the player to figure out.
PS: I'm jelly of your graphs.
Edit: Oh, well no wonder refreshing rake so aggressively is a gain.
Mangle direct damage: 67056
Shred direct damage: 84081
Rake average tick: 75581 (the direct damage is a tick)
Oddly enough, I'm still having trouble using more accurate damage comparisons and getting a gain out of it. I tried a couple things, one of which was essentially trying to calculate the damage of the rake:
((99+(0.3*attack_power))*multiplier)%((99+(0.3*dot.rake.attack_power))*dot.rake.multiplier)>1
and it lost about 1250 DPS.
Is there a (reasonable) way to refine the data at all? I'm tempted to think that the DPS drop off is just very very slow until you get up to roughly the 1.15ish range and that 1 is the optimal value, but I really shouldn't make that assumption. The data is too indeterminate to find an actual peak.
Yeah, this is very noticeable in practice in your opener, where you Rake tends to need refreshing just after all of your cooldowns start falling off. It's much better to refresh it a little earlier if you can get it with pot + both trinkets vs. refreshing later and none at all.raffy wrote:The situation arises when the current Rake is a DPS loss, but the Rake you'd apply 2-5 seconds now is an even bigger DPS loss. Examples of this happening are things like Potion (25sec) overlapping Springs (10sec), Dancing Steel (12sec), and Bottle (20sec)
That's not something that I think is really worth worrying about though, I would just leave that for the player to figure out.
PS: I'm jelly of your graphs.
Edit: Oh, well no wonder refreshing rake so aggressively is a gain.
Mangle direct damage: 67056
Shred direct damage: 84081
Rake average tick: 75581 (the direct damage is a tick)
Oddly enough, I'm still having trouble using more accurate damage comparisons and getting a gain out of it. I tried a couple things, one of which was essentially trying to calculate the damage of the rake:
((99+(0.3*attack_power))*multiplier)%((99+(0.3*dot.rake.attack_power))*dot.rake.multiplier)>1
and it lost about 1250 DPS.
Re: Simulationcraft - Feral rotation discussion and script
Can you confirm that this prevents back to back Rake via combat log? Or can you reveal the Rake damage percentage?Oddly enough, I'm still having trouble using more accurate damage comparisons and getting a gain out of it. I tried a couple things, one of which was essentially trying to calculate the damage of the rake:
((99+(0.3*attack_power))*multiplier)%((99+(0.3*dot.rake.attack_power))*dot.rake.multiplier)>1
and it lost about 1250 DPS.
I can focus on this when I get home to make sure I didn't goof something. Before I left work, I glanced at a few combat logs and didn't see anything odd when I forced the tick ratio to be >1.
Edgy (Suramar) / Catus: Feral Simulator / Apparatus: Paper Doll / Focus: Hearthstone Simulator / Hearthstone Calculator
GitHub: WarBase / WarDBC / WarKit / Catus 2
GitHub: WarBase / WarDBC / WarKit / Catus 2
Re: Simulationcraft - Feral rotation discussion and script
Well, the line doesn't cast at all. Every solution I've tried to have a more accurate damage calculation it always fails and is either true almost all of the time or never so the damage goes to the shitter.
Re: Simulationcraft - Feral rotation discussion and script
Does the naked "attack_power" expression exist? I can't find it via google code search.
Edgy (Suramar) / Catus: Feral Simulator / Apparatus: Paper Doll / Focus: Hearthstone Simulator / Hearthstone Calculator
GitHub: WarBase / WarDBC / WarKit / Catus 2
GitHub: WarBase / WarDBC / WarKit / Catus 2
Re: Simulationcraft - Feral rotation discussion and script
Talked to some people on IRC and apparently "attack_power" actually refers to the same thing as dot.rake.attack_power. The line I'm using right now is:
actions.doc+=/rake,if=target.time_to_die-dot.rake.remains>3&((99+(0.3*stat.attack_power))*multiplier)%((99+(0.3*attack_power))*dot.rake.multiplier)>1
Will post a report in a little bit.
Edit: This expression is obviously not working either. 1 is a big DPS loss and anything above 1 is literally identical and is still a DPS loss.
actions.doc+=/rake,if=target.time_to_die-dot.rake.remains>3&((99+(0.3*stat.attack_power))*multiplier)%((99+(0.3*attack_power))*dot.rake.multiplier)>1
Will post a report in a little bit.
Edit: This expression is obviously not working either. 1 is a big DPS loss and anything above 1 is literally identical and is still a DPS loss.
Re: Simulationcraft - Feral rotation discussion and script
Just checked in a change to init_actions for feral. The action list generated by SimC is now that same as the current action list being developed in this thread with the exception that I removed any lines involving dot damage calculation, as well removed a couple things here and there that were needlessly complex for negligible or zero DPS gain. During working on this I did find some changes to the main action list so I'll post the most current version here:
If you're interested in using the "simple" action list, you'll need to download and compile the most recent build of SimulationCraft, or wait til a new precompiled release.
Spoiler: show
Re: Simulationcraft - Feral rotation discussion and script
So, I've been thinking if using Mangle would be a dps up in a situation where you're basically energy starved and Rip has fell off the target. The plus side would be getting Rip back up faster, and the downside obviously that Mangle does less damage than Shred. (Of course you would still use any OCC procs on Thrash or Shred...) But as Mangle seems to be a dps-up for 2-target-dps, I'm fairly curious to see if this showed up to be one as well. I've tried it in action an it feels nicer to get Rip back up faster but I've got no idea if it really is a dps-up or not.
Would it be possible to sim this? Although, the dps difference probably won't be that big if there's any at all(?) I just thought it'd be interesting to see the results if someone has the time, knowledge and interest to do this kind of a sim study. (I personally am not that familiar with SimC that I could be trying this, or at least it'd take me unreasonably long to first learn the coding part and then try to figure out how to get the "if energystarved&&riphasfelloff --> use mangle instead of shred, but if OCC procs, use shred" in there.)
Would it be possible to sim this? Although, the dps difference probably won't be that big if there's any at all(?) I just thought it'd be interesting to see the results if someone has the time, knowledge and interest to do this kind of a sim study. (I personally am not that familiar with SimC that I could be trying this, or at least it'd take me unreasonably long to first learn the coding part and then try to figure out how to get the "if energystarved&&riphasfelloff --> use mangle instead of shred, but if OCC procs, use shred" in there.)
Re: Simulationcraft - Feral rotation discussion and script
Vami wrote:So, I've been thinking if using Mangle would be a dps up in a situation where you're basically energy starved and Rip has fell off the target. The plus side would be getting Rip back up faster, and the downside obviously that Mangle does less damage than Shred.
Hey Vami!
I think your issue has allready been adresse in the latest simc action list that aggixx has posted.
Code: Select all
actions.filler+=/mangle_cat,if=((combo_points<5&dot.rip.remains<3.0)|(combo_points=0&buff.savage_roar.remains<2))&buff.king_of_the_jungle.down
Re: Simulationcraft - Feral rotation discussion and script
Ah, cool, looks like I've totally missed it if someone mentioned it here somewhere. Thanks! (Looks like it is a dps-up then, which is also nice.)
Re: Simulationcraft - Feral rotation discussion and script
Yup, it's not a huge gain, but it's also safe to assume that anytime you're really tight on CPs you can switch to mangle and pick up a little DPS (like trying to keep your bleeds up with the highest possible uptime on two targets at the same time).
Re: Simulationcraft - Feral rotation discussion and script
I'm looking at r15408 of sc_druid.cpp and I see this line in the DoC action list:
What is that action statement trying to express? The documentation for "line_cd=30" says only run this action every 30 seconds, but that seems a bit artificial to me. From what I understand of taking DoC, the goal is to sustain the strongest Rip possible throughout the execute phase by extending it via Ferocious Bite. Is that statement trying to express the following?
Code: Select all
rip,line_cd=30,if=combo_points>=5&buff.virmens_bite_potion.up&buff.dream_of_cenarius_damage.up&target.health.pct<=25&target.time_to_die>30
If that's the case, then in Ovale, I would try to calculate:Put up Rip if it doesn't already exist, or if we would overwrite it with a much stronger Rip (because of Agi/Mastery/Crit procs).
- Total damage a Rip in the current conditions would do in the remaining time.
- Total damage the existing Rip would do in the remaining time.
- Damage from a Ferocious Bite in the current conditions.
Re: Simulationcraft - Feral rotation discussion and script
The line_cd is because we don't have true damage calculation in SimC so it's generally a safe assumption that applying Rip one time after you potion will allow you to have a stronger rip. Ovale doesn't need to worry about such a thing because we have true damage calculation as well as potion usage being something that's typically left in the user's hands.Jeshu wrote:What is that action statement trying to express? The documentation for "line_cd=30" says only run this action every 30 seconds, but that seems a bit artificial to me. From what I understand of taking DoC, the goal is to sustain the strongest Rip possible throughout the execute phase by extending it via Ferocious Bite. Is that statement trying to express the following?Code: Select all
rip,line_cd=30,if=combo_points>=5&buff.virmens_bite_potion.up&buff.dream_of_cenarius_damage.up&target.health.pct<=25&target.time_to_die>30
You can actually see this quite clearly in the HTML report if you go to the rip section of the damage breakdown, expand it, and look at the DPS graph. The DPS jumps to above average in the last quarter of the fight and then stays there.
And yes, if you wanted to do the "perfect" calculation of when it is or isn't worth using rip vs FB in BitW range that would be what I would do as well. Potential problems are that:
- In a realistic scenario you can't assume that the rip will be on the target all the way until it dies.
- You have to account for that rip potentially getting overwritten by an even stronger rip in the damage calculation somehow.
Re: Simulationcraft - Feral rotation discussion and script
I have another question with regards to the energy pooling in these two lines in the DoC rotation.
The tooltip for Ferocious Bite says that it costs 25 energy and it uses up to 25 additional energy to gain up to 100% increased damage.
I understand why we want to pool to 50 energy if Berserk is down -- a 5CP + 50 energy FB will do 200% damage. But why pool to 25 energy if Berserk is up? That only nets 150% damage.
Code: Select all
/pool_resource,wait=0.25,if=combo_points>=5&dot.rip.ticking&target.health.pct<=25&\
((energy<50&buff.berserk.down)|(energy<25&buff.berserk.remains>1))
/ferocious_bite,if=combo_points>=5&dot.rip.ticking&target.health.pct<=25
I understand why we want to pool to 50 energy if Berserk is down -- a 5CP + 50 energy FB will do 200% damage. But why pool to 25 energy if Berserk is up? That only nets 150% damage.
Re: Simulationcraft - Feral rotation discussion and script
Pre-MoP Berserk used to 1/2 the energy cost of FB (25) but leave the extra energy consumption untouched (for ~37.5 energy FB's during Berserk, which sucked). However in MoP, both are modified by Berserk, so 25 energy cost (12.5+12.5) for +100% damage (which is worth it on bleeder targets due to crit chance bonus).
Edgy (Suramar) / Catus: Feral Simulator / Apparatus: Paper Doll / Focus: Hearthstone Simulator / Hearthstone Calculator
GitHub: WarBase / WarDBC / WarKit / Catus 2
GitHub: WarBase / WarDBC / WarKit / Catus 2
Re: Simulationcraft - Feral rotation discussion and script
What Raffy said, the max extra cost is halved and the extra damage is still calculated by extra cost divided by max extra cost. On a side note, the reason why I have .remains>1 instead of .up is so that it stops pooling early enough to get the FB off during the Berserk (since naturally it saves you energy to get as many casts off during the berserk as possible).
Re: Simulationcraft - Feral rotation discussion and script
I've released version 2.1.14 of Nerien's Ovale Scripts that has my own feral script based on the latest SimC:sc_druid.cpp code. I've only tested the non-DoC rotation (my druid is not level 90 yet). It's probably not 100% right, but it's a start.
Re: Simulationcraft - Feral rotation discussion and script
So I ran about 20 or 30 different sims with varying levels of gear and stat distributions to see if maintaining Thrash outside of OoC and pooling energy for DoC FBs was a DPS gain at all levels of gear, and I actually could not find a combination where it was a DPS loss. The difference in damage starts to get really negligible when you have a 461 item level set of gear stacked with haste rating, but it's still not a loss.
Re: Simulationcraft - Feral rotation discussion and script
I assume the dot itself does not surpass rake in priority, does it? That would make the rotation extremely tedious.aggixx wrote:So I ran about 20 or 30 different sims with varying levels of gear and stat distributions to see if maintaining Thrash outside of OoC and pooling energy for DoC FBs was a DPS gain at all levels of gear, and I actually could not find a combination where it was a DPS loss. The difference in damage starts to get really negligible when you have a 461 item level set of gear stacked with haste rating, but it's still not a loss.

Re: Simulationcraft - Feral rotation discussion and script
Right, it's the last thing in the last before fillers (Shred/Mangle/Ravage).
Re: Simulationcraft - Feral rotation discussion and script
About to commit the 1 sec GCD spell change, seems like around a 500 DPS gain, not too shabby.
- Tinderhoof
- Exalted
- Posts: 2234
- Joined: Mon May 24, 2010 10:21 pm
Re: Simulationcraft - Feral rotation discussion and script
Simwise it's better, but it will be even better for just the flow of the rotation.
Re: Simulationcraft - Feral rotation discussion and script
Here's the most recent action list I'm using for testing, including support for rune of reorigination. Unfortunately if you're not using Rune of Reorigination you'll have to manually comment out any line that contains "rune_of_reorigination" (put a # sign before the respective line). The whole profile is included for the sake of inclusiveness, but everything (especially the gear) is highly subject to change.
Spoiler: show
Re: Simulationcraft - Feral rotation discussion and script
aggixx, just amazing work! Thank you for all the contribution to feral community. Only if I can buy you a beer.
Some questions about last rotation. Don't know much about simulationcraft internal workings, so sorry if I'm mistaken.If Rip isn't up then this formula should always return 8? Asking because some lines don't contain dot.rip.ticking
About DoC vs w/o Doc rotation has some inconsistencies. Following linesIs this right?
$(rip_remains) - potential remaining Rip length
dot.rip.remains - current remaining Rip length
Also some point filler with dot.rip.ticks_added < 3 condition disappeared. Is this dps neutral condition or replaced with (combo_points<5&dot.rip.remains<3.0)?
Some questions about last rotation. Don't know much about simulationcraft internal workings, so sorry if I'm mistaken.
Spoiler: show
About DoC vs w/o Doc rotation has some inconsistencies. Following lines
Spoiler: show
$(rip_remains) - potential remaining Rip length
dot.rip.remains - current remaining Rip length
Also some point filler with dot.rip.ticks_added < 3 condition disappeared. Is this dps neutral condition or replaced with (combo_points<5&dot.rip.remains<3.0)?
Re: Simulationcraft - Feral rotation discussion and script
- That would be a mistake on my part. I have caught some of these before and they made no significant change to the DPS. It's possible ticks_added does not return a value when the dot is not active causing it to automatically evaluate to false. I'll have to look into this one.
- Just a small inconsistency, the inclusion of calculating the full potential time remaining of a Rip is fairly negligible in DPS. I'll look into it again and see if there's something worth doing with it.
- Right, it was DPS neutral to remove it. SotF and DoC incentivize very efficient use of energy to generate combo points, and casting a filler to extend rip regardless of CP does not mesh with that. The rotation already includes almost no pooling due to the buff.predatory_swiftness.up filler line, and that will force most of the extends for the rip by itself. After using this priority on live and PTR I can say you definitely do miss out on some extends, but the reality is that if you didn't have 5 CP ready to put a new rip up then you would be pushing to get to 5 CP and it will extend it 3 times anyway.

Last edited by aggixx on Sat Mar 02, 2013 5:44 am, edited 2 times in total.