This thread contains a variety of calculations relevant to paladin tanking, primarily focused on threat and damage output. The first 10 posts or so are summaries of the results of these calculations, which you can access via the table of contents below.

This thread is for discussion of the Mists of Pandaria (5.x) version of the code base. For information on the older versions that modeled Cataclysm or Wrath of the Lich King mechanics, please see the Cataclysm/4.x thread or WotLK/3.x thread.

The code is hosted on Google Code, and is available for public review/consumption. If you're interested in contributing to the project, please see the Code section for more information.

I'm keeping an evolving list of gear sets this expansion. I'm going to group them by ilvl this time around rather than category (i.e. "pre-raid," "T14," "T15"). Obviously certain ilvl sets will correlate to tier values, but this way I don't have to keep updating the "pre-raid" set with newly available BoE's. You can just search through the thread and find results corresponding to something near your ilvl.

Rather than list every item in each gear set, I'm going to provide wowhead links to the entire gear set.(wowhead links to come once their main site is updated, I've had trouble using the profiler on their ptr site)ilvl 450ilvl 463ilvl 483ilvl 496ilvl 509ilvl 522ilvl 535

For the first four sets I chose to go with a more conservative STR/parry/mastery strategy. Since control/haste strategies have become predominant, I decided to start using an expertise/haste gem strategy for T15H onwards. I also started reforging for haste and hit/exp caps in the T15H set.

This sim just calculates the damage of each ability under certain circumstances. This is mostly for sanity-checking, as these are the numbers that end up going into the simulations that matter.

In the tables below, "Raw" is the raw (i.e. tooltip) damage done by the ability. For most abilities, this is for a single cast, but for a few of them I've used tick values (Sacred Shield, EF, Censure). The logic behind this is rooted in the code - things that I track by uptime are modeled per tick, things that I track by casts are modeled per cast. Consecration and Light's Hammer are both tracked by cast rather than uptime, so their "Raw" values are the total damage done by the spell over all ticks.

"Dmg" is the net damage one expects to deal with the ability after hit/miss and crit considerations.

"AoE" is the average amount of "splash" damage one expects to deal to a secondary target with the ability in a 4-target scenario. For Consecration and Light's Hammer, this is the same as the single-target damage (up to the 20-target AoE cap). For Avenger's Shield, it hits 2 additional targets, so the average splash damage it does is twice its dmg value (because it hits 2 additional targets) divided by 3 (the number of additional targets), or 2/3 of the single-target value.

"Heal" is the amount of healing one expects to do with the spell. Holy Prism assumes you're targeting an enemy (thus you're getting the radiated healing), Holy Prism Self-Cast (HPrSC) assumes you're targeting yourself. Eternal Flame also assumes self-targeting, thus its effect is doubled in 5.2.

Since some people see things better graphically, here's the "Raw" values plotted. First, the "base" abilities:There are a few things to note here.1) CS and Hammer hit like wet noodles. They're really a very small part of our damage compared to our "filler" abilities. That said, they power SotR, which is a decent chunk of damage. If you added 1/3 of a SotR to each CS cast, it's not all that bad. Note that this excludes Alabaster Shield effects, which make SotR stronger yet.

2) Avenger's Shield is our hardest hitter under most circumstances, and note that this is an unglyphed AS. Glyphed AS will be really beastly.

3) Holy Wrath does more damage per cast than Cons on a single target. However, due to the meteor effect, Cons will take over for two or more targets. We can expect HW>Cons for the single-target rotation and Cons>HW for the aoe rotation. Note that the Final Wrath glyph will double Holy Wrath's already high damage during execute range.

3) Hammer of Wrath is incredibly strong now, which will shake up filler priorities during execute range.

Now, let's look at our L90 talents:This plot is a little misleading, in that it's damage and not DPS. Execution Sentence obviously has a huge lead, but you can get 3 Holy Prisms off in a minute compared to one Execution Sentence. That said, the damage of 3 Holy Prisms is still less than one ES, and costs 2 fewer GCDs. If you're going for raw DPS, we'd expect ES to win on a single target. HPr is kind of neat in that we can cast it on a friendly target (i.e. ourselves) to do AoE damage, making it an interesting choice for an AoE rotation. Light's Hammer also fills the AoE role, but does less overall damage per minute than Holy Prism. However, it's not target-capped at 5 like Holy Prism is, and only costs one GCD instead of three. We'll see how that shakes out in the AoE rotation simulation.

Next, a plot of the seals:This plot is a little screwy, because SoI is so large compared to SoT/SoR. The heal here is misleading: SoI's proc is that large, but it's a 20 PPM effect, so you don't get a proc on every swing. Censure and SoT combine for more damage against a single target than SoR, but they're both pretty weak. It's clear that SoI is our go-to seal if survivability matters, because the DPS gain from using SoT is going to be paltry.

Finally, our healing abilities:I wrote this sim back when WoG and EF had different formulas, so it's a bit redundant to have them both on the plot now that they're identical. Even after being doubled, the EF tick is still pretty small, but you can see that ten ticks of it is more than the base cast. Note that this is without any Bastion of Glory interaction either, and EF gets extra ticks with haste.

That said.... that Sacred Shield bar is one tick, i.e. one absorb bubble. We get 5 of them, 6 if we have enough haste (and note that if you're tanking with SoI, you get an extra tick as long as you have at least 1 haste rating thanks to the free 10% spell haste). We get 2 EF ticks for every one of SS, but each SS tick is about twice as large. At least now that it's been buffed, EF will come out ahead if Bastion of Glory stacks are involved, but you're still comparing a 30-second HoT to an absorb. Getting a sizable absorb in 6-second chunks is just generally more useful.

But at least now, after several patches worth of buffs (first a straight-up buff, then BoG interaction, finally a doubling of self-healing ticks) EF is on the playing field, even if it's still a few yards behind.

Light's Hammer is kind of interesting here as well. That's a huge amount of healing, and even though it's over 14 seconds, it's sort of like having a mini-Tranquility. My guild regularly uses Light's Hammer as a semi-raid-cooldown on encounters. It has the standard 20-target aoe cap on offense, but it's not clear whether the heal portion does as well. Now that the cap is 20 players though, it's not a terribly significant consideration.

This simulation uses the FSM code to calculate DPS values for a variety of different priority queues. For information on how the FSM code works, see this post. The simulation has extremely tight error tolerances, giving us accuracy down to ~1 DPS. So any difference in the output of two queues can be considered statistically significant from a purely mathematical point of view. However, keep in mind that the results are only as good as the model, and the model is a perfect player killing Patchwerk with no latency. So talking about differences smaller than 10-25 DPS is probably still meaningless, even if our numerical accuracy is better than that.

Most of the abbreviations found in the following tables can be found in the glossary, but there are a few that are specific to this sim:

The + suffix represents "only if this will grant Holy Power." For the moment, it's only relevant to AS. "AS+" thus means "AS if it will grant holy power" (i.e. Grand Crusader is active).

SotR# stands for a SotR cast at # holy power. If the number is omitted, it's assumed to be a 3-pointer. The same goes for EF and WoG.

We can add more complicated conditionals for each spell in brackets. The formalism is [<property><ability><relation><value>]. As an example, if we want to only use an ability if the cooldown on AS is 10 seconds or longer we'd write the conditional [cdAS>10], and if we want to use something only if Sacred Shield is active we'd write [buffSS>0]. If we only wanted to cast EF if we had 5 stacks of BoG, we might write EF[#BoG=5].

Damage, self-healing, DPS, and TPS are calculated in post-processing. The tables below show two columns for DPS, and two columns for Self-Healing Per Second (SHPS); the first in each case is for 150k Vengeance and the second is for 75k Vengeance. I've gotten rid of the low-hit/exp configurations, since it seems it isn't that relevant anymore. I'm using the Focused Shield glyph so that we have a good estimate for our maximum single-target DPS rotations.

I've also included some informational fields. "Empty GCD%" is the percentage of empty GCDs in a queue, while "SS/EF Up%" is the uptime on Sacred Shield or Eternal Flame. Holy power generation rate is also shown in the last column. Note that your SotR uptime is equal to your HPG as long as you're not using any of it on WoG or EF.

I've added section headings to try and separate the queues into logical groups based on what we're varying or considering. It seems that Maintankadin posts are capped at 60000 characters, so I've had to truncate the Seal of Righteousness list to just a few queues. There wasn't much interesting there anyway, it was primarily for comparing SoT and SoR.

There's a lot of data there, so let me summarize some of the more important features.

CS>HotR against a single target, no surprise there. The DPS cost is around 5k @ 150k Veng. However, keeping up Weakened Blows is a much smaller cost, around 700 DPS.

The standard order for HP generator priority is CS>J>AS+. The one exception is during Sanctified Wrath (if talented), where J>CS, but that's not covered here (see talent sim).

Cons falls behind in single-target priority due to the strength of AS and HW. So our ideal filler order is AS>HW>Cons, which when paired with the ideal generator priority gives CS>J>AS>HW>Cons. Nice and simple. Except...

Glyphed AS hits really damn hard, so much so that it's actually about a 4k DPS increase to put it at the top of the queue. Note that this is with the Focused Shield glyph, without the glyph it's a smaller benefit (about 1-2k).

Execution Sentence is the high-DPS talent option, with Holy Prism trailing it and Light's Hammer pulling up the rear in single-target DPS. All of them get prioritized after all of our regular fillers though.

Hammer of Wrath hits like a truck. It hits harder than everything but AS and HW, and it's got a very short cooldown. Maximum DPS puts this at the top of our priority queue, but costs us ~4% absolute (10% relative) SotR uptime. If you're not willing to sacrifice HPG, the next best place for it in the priority queue is between HW and Cons.

During execute range, your L90 talent will go ahead of HoW and HW. So either CS>J>AS>L90>HW>HoW>Cons, or L90>HoW>AS>CS>J>HW>Cons depending on whether you're sacrificing survivability or not. L90>AS>HoW will be a slight increase if Focused Shield is glyphed.

Sacred Shield has a minimal impact on DPS. As in, basically nothing. This is an improvement over previous sims, but not for any reason related to game mechanics. I just got smarter. I realized earlier that by using "^SS" or "SS[buffSS<5]", I was artificially limiting refreshes. If we had an empty GCD halfway through SS's duration, those priority entries won't use the empty to refresh SS. So I added queue #46, which puts SS behind Cons in the priority with no stipulations (except for the inherent 6-second cooldown, of course), and that gives us 100% uptime on the Sacred Shield buff at no cost to HPG or DPS. This is by far the best way to do it. Note that once L90 talents are included (i.e. ES), that drops to about 86% uptime, which is still pretty respectable for zero cost. If you really want that last 2% of uptime, adding "SS[buffSS<5]" above Cons and/or Holy Wrath will get you there for a very small amount of DPS.

Using EF as a maintenance buff costs around 6k DPS (and of course, some SotR uptime), and now grants about 50k HPS. Spamming it is only about 20k more healing per second than WoG is. Thus, the buff itself is around 30k healing per second. Compare to Sacred Shield's 21k absorption per second, which doesn't cost holy power (i.e. SotR uptime) or DPS. Also note that this assumes no overheal for either ability, but does include BoG stack consumption.

SoI is about 42k healing per second at the cost of ~6k DPS from (super-nerfed) SoT. It also buffs WoG/EF's base heal by 5% and EF's HoT and SS by about 10% due to haste. As much as I would prefer to tank with SoT, they've sweetened the deal so much that it's hard to pass up SoI. That's a lot of passive survivability (and raid survivability if you include Glyph of the Battle Healer) for a measly DPS cost.

SoT is still the top single-target DPS seal by about 1.5k DPS even after the SoR buff. Whoopee.

TLDR Summary

CS>J>AS>HW>Cons>L90>SS is the "base" rotation which gives near-max survivability and near-max DPS. "L90" refers to whichever level 90 talent you choose. Note that you should be replacing CS with HotR every so often to keep up Weakened Blows.

For those seeking to optimize DPS by sacrificing HPG, AS>CS>J>HW>Cons>L90>SS will be a slight DPS increase.

For those looking for more defensive options, about the only thing you can do is bump SS refreshes up the list a little bit. I'd recommend putting a "SS[buffSS<5]" in-between AS and HW if you absolutely want that last 2% of SS uptime.

I finally got around to fixing the AoE rotation simulation, so these are our first results of the expansion. I calculate the DPS done to the primary target as well as the "splash" damage done to each secondary target for a variety of queues and a variety of group sizes (N=2 mobs to N=8 mobs).

In the data tables below, the first column lists the queue. The next column lists primary target damage for a situation with N=3 mobs. Each subsequent column tells you how much splash damage each additional mob will take if there are N mobs.

There are two sets of tables, the first is for 75k Vengeance with each seal, the second is for 150k Vengeance.

When there's only 2-3 targets, HotR>AS>Cons>J>HW and HotR>Cons>AS>J>HW are in a dead heat. However, once you get to 4+ targets, Cons uniformly pulls ahead and HotR>Cons>AS>J>HW takes over. Note that dropping J further down in the queue like this will cost you HP generation. If you're concerned about that, just bump J back up to where it was in the queue to begin with to recover that survivability.

As far as the L90 talents, Self-cast Holy Prism and Light's Hammer are both quite good. Light's Hammer tends to win in the steady-state, but it's pretty close. In both cases, you slip the L90 talent in just ahead of Judgment in the queue.

Comparing SoT and SoR: it looks like you lose about 1.5k DPS on the primary target with SoR, but you gain 5k DPS on each secondary target. So the break-even point is 2 targets if you're lazy. If you're tabbing and keeping Censure stacks on multiple targets, then the break point will probably be around 3-4 targets depending on how effective you are.

TLDR Summary

HotR>Cons>AS>J>HW is the highest-DPS AoE queue for any number of targets. The advantage of prioritizing AS ahead of Cons for 3 targets isn't large enough to make it worth bothering with.

Light's Hammer is slightly ahead of Holy Prism in terms of total DPS. Both talents go between J and HW (...>J>L90>HW).

SoR does more damage than SoT+Censure if there are 2+ targets, or 3-4 if you're spreading Censure around to multiple targets.

This sim has obviously changed fairly drastically with the revamp of the talent system. It's a little more involved now, but the premise is similar. We start with a L90 human paladin with no talent (heh), and then apply each talent we care about one at a time to calculate our output with that talent. In some cases, we have to tweak the rotation some to properly evaluate the talent. The rotations used are:

CS>J>AS>HW>Cons>SotR (default)

EF[buffEF<2.5]>CS>J>AS>HW>Cons>SotR5 (Eternal Flame)

CS>J>AS>HW>Cons>SS>SotR (Sacred Shield)

SotR>J>CS>AS>HW>Cons (Sanctified Wrath)

SotR>CS>J>AS>HW>Cons>HPr (Holy Prism)

SotR>CS>J>AS>HW>Cons>LH (Light's Hammer)

SotR>CS>J>AS>HW>Cons>ES (Execution Sentence)

We calculate all of the usual values - DPS, HPS, HPG - as well as explicitly tracking Shield of the Righteous uptime. I've reported this uptime two ways. The first, "SBU%" is "instantaneous" uptime, or the uptime during the effect. The second, "AvgU%" is time-averaged uptime. So for example, Holy Avenger will give you 100% uptime during the effect, but only about 50% uptime in the steady state (i.e. over a two-minute period, or an even multiple of two minutes).

Level 45 talentsFirst of all, using Eternal Flame as a HoT sacrifices ~6k DPS for ~50k HPS, though there's also a huge opportunity cost: a whopping 12% drop in SotR uptime (and note that's absolute percent; it's a ~25% reduction in SotR damage mitigation). Sacred Shield, on the other hand, incurs no DPS or SotR uptime loss for 28k Absorption Per Second.

In summary, SS is still better than EF. The healing/absorb amounts are finally equal thanks to the 5.2 EF buff, but the opportunity cost is still a problem. EF really needs to heal for significantly more than it currently does to make up for the HP cost.

Level 75 talentsThe L75 talents are a bit more interesting. You might remember that Sanctified Wrath was ahead of Holy Avenger in the 5.0.5a sims, which were performed below the expertise cap. Now that we've capped both hit and expertise, the buff to HP generators that Holy Avenger grants is enough to push it ahead in raw DPS. Divine Purpose has improved considerably now that we have a decent level of haste in our gear set, leaving Sanctified Wrath as the odd man out.

The SBU% numbers show that Divine Purpose gives the highest average SotR uptime, again thanks to all that haste. The downside is that it isn't controllable. Holy Avenger is a close second in SotR uptime, though the gap has widened a bit, but it has the benefit of being a controllable extra cooldown. Also note that the actual uptime observed will be slightly lower than this estimate unless you use HA on cooldown. Sanctified Wrath comes in at a respectable third place in uptime, but also grants the 20% healing taken buff, which offsets that slightly.

I think that HA is the better choice for control reasons, but DP isn't bad either if you have some haste. Without haste (i.e. if you gear for control/mastery) it lags a little more, and I wouldn't recommend it. SW just isn't attractive enough to compete, honestly - if I want control, HA just does it better.

Level 90 talentsThe L90 talents aren't anywhere near as interesting. Execution Sentence wins by a good margin, as we already expected from the single-target sims. Holy Prism is in second for single targets. Light's hammer performs the weakest in single-target situations.

However, Light's Hammer pulls ahead in the AoE configuration, edging out Holy Prism by a hair. This is primarily due to the GCD cost. Light's Hammer is also a mini-Tranquility, so we might take it for use as a raid cooldown rather than for a DPS benefit. So far I like it better than the other two from personal experience, but mostly for the healing utility.

TLDR summary

EF is still bad, take SS.

Divine Purpose and Holy Avenger are both good, but HA gives you the most DPS and another strong cooldown. SW is the weakest of the three.

ES is your single-target DPS choice, LH is better for AoE damage and/or as a mini-Tranquility, HPr is only a little weaker in AoE and a little stronger in single-target than LH.

There's a few interesting points here. For single targets, Focused Shield and Alabaster Shield are both decent DPS gains, with FS holding a slim lead. Final Wrath's value is calculated as if you spent the entire fight in execute range, so the true benefit over an entire fight is only 20% of the given value. Note that when we're in execute range, the Final Wrath glyph makes Holy Wrath our highest-DPCT ability; if we prioritize it highly (as in set #3) the DPS gain is even larger.

Battle Healer performs surprisingly well, cranking out over 10k HPS on the raid post-nerf. Note that this output is going to be relatively low for single-targets, as it only triggers from CS, melees, and SotR. However, it also triggers off of HotR, both the physical portion and everything that the nova hits. So in heavy AoE situations, GoBH can be many times more powerful. In our 3-target case, we gain about 1.3k HPS from the extra 2 targets.

HotR is only a very weak DPS gain, basically because both CS and HotR hit like a wet noodle, making it a convenience glyph rather than a DPS glyph.

Glyph of Word of Glory isn't a DPS increase if you're just spamming WoG (111.8+8.2=120.0, still less than the baseline 134.7k DPS of cfg #1). Even if you tried to alternate WoG with SotR, it's not likely to be a big gain. SotR just hits too hard to give up that damage. There may be a slight gain to be had by trying to line up an Alabaster-Shield-buffed SotR with the GoWoG buff, but I doubt it. It's over 10k behind the baseline SotR rotation, and I don't think that interaction is going to be a 15% DPS increase. You could view it as a slight DPS increase to make up for when you have to use WoG, which is fair, but in that situation you'll also be casting it less than in the sim, so the DPS gain will be smaller than Alabaster Shield and Focused Shield. It might be a decent third choice if you run 3 DPS glyphs.

The WoG rotation with Harsh Words does ~141k DPS, which is ahead of the baseline SotR rotation (cfg #1) but behind if you factor in Focused Shield and Alabaster Shield. So Harsh Words is no longer a consideration for us, because even GoHW+GoWoG falls behind the baseline+AS+FS.

This sim calculates DPS for a range of strength values (we'll call this the "independent" stat). It then adds the equivalent of 10 itemization points of one "dependent" stat (i.e. 10 strength, agility, intellect, 20 AP, or 10 of any rating) and recalculates DPS. The difference between the two values is the improvement that those 10 itemization points granted us. By doing this for all of the relevant stats on our gear, we can construct a plot showing how those stats scale with the independent stat. We then repeat the calculation three more times with hit, expertise, and haste as the independent stat.

Under the hood, I'm cheating a bit - I actually use 100 of each stat to do the calculations, because it smooths out some of the fluctuations in Strength and haste (you may notice some "wiggle" on the strength plots - that's due to in-game rounding effects). But then I divide by 10 afterwards to normalize everything appropriately, so the plots and tables show the effect of 10 itemization points.

I've artificially set the hit and expertise of the gear set to 5% and 7.5% respectively to ensure that we get the full valuation of hit and expertise on the plots. I'm also calculating the results at 75k and 150k Vengeance AP so that we can see how things change with boss damage. This might give us an idea whether our stat priorities change depending on whether we run 10-man or 25-man.

First, let's look at the strength plots. The armory strength value of this gear set is 14140.

At 150k Vengeance, each attack is doing so much damage that hit, expertise, and haste become our top DPS stats. Making sure that those attacks land (hit, exp) and getting more of them (haste) simply dwarfs any effect the other stats could have. Crit has actually pulled ahead of strength to take fourth place. Crit, strength, and AP all cluster in a second tier of mediocre stats. Agility and intellect grant less crit than crit rating, and thus fall considerably lower on the totem pole.

Parry and dodge are new additions to this round because the new version of Grand Crusader gives them a DPS value. Unfortunately, it's a very low DPS value - they fall behind even Intellect in terms of effectiveness. Parry is ahead of dodge primarily because it's being hit harder by diminishing returns than parry is, as our gear set isn't optimized for that. In fact, I had to turn off the Alabaster Shield glyph for these sims because dodge's value was coming out negative - it caused a larger DPS loss in the form of fewer blocks to power Alabaster Shield than it could make up for with Grand Crusader procs. In short, neither dodge or parry are very useful DPS stats, but at least parry is net DPS-positive in all situations.

The plot looks pretty much the same at 75k Vengeance:

You can see here that the vengeance-scaling stats (hit, expertise, haste, and crit/agi) drop while the "static" stats (STR, AP, INT) don't change. However, hit and expertise stay at the top, with haste dropping down to around the level of strength and AP, and crit falling behind them. If we continued down to 50k vengeance or lower, exp would drop to about the level of STR and haste would drop below AP.

The interesting point to take home here is that your max-DPS gear set will vary from boss to boss. On some bosses, you'll want 7.5% hit and 15% expertise followed by as much haste as you can muster. On other bosses, you might hit-cap and spell-hit-cap and then gem/reforge for haste or strength. If we extrapolate to weaker bosses (which may be most 10-mans), expertise may fall behind strength. This makes gear choice tricky, because we'll have to get accurate estimates of our own damage intake and Vengeance levels for the raid category we care about.

Note that on 10-man content, we're likely to be in the 75k or lower regime, so hit and exp might lag strength slightly in terms of raw DPS.

For now, I've calculated DPS stat weights for both 150k and 75k Vengeance levels. I've included Shield of the Righteous uptime coefficients as well to give you an idea how the stats impact survivability. Note that these values are the change in SotR uptime percent that you get per 1000 points of the stat, whereas the DPS values are per one point. The third column gives DPS benefit in terms of itemization points (which just bumps AP up slightly, since everything else is 1:1).

These two tell a similar story. Hit, expertise, and haste dominate as long as Vengeance is high enough. On both graphs you can clearly see when we cross the melee and spell hit caps at 7.5%. Hit has no value past the spell hit cap, while expertise continues to improve our melee attacks.

Perhaps it's worth noting that it isn't worth stacking hit above 7.5% just to reach spell hit cap - we're much better off using expertise to get the rest of that spell hit, since we get the added benefit of dodge/parry suppression. That's probably common sense, but this gives us the numbers we need to quantify that thought.

It's also worth noting that even at 150k vengeance, expertise above 7.5% isn't optimal for DPS. In theory, the max DPS configuration is:

At lower levels, haste will slip behind STR/AP as well. Note that haste will always be ahead of expertise in excess of the spell hit cap, though, as both stats scale with Vengeance. Most of us are likely gearing for 15% expertise for survivability reasons, so it's not likely to matter much. However, if you're trying for a #1 WoL parse, you might consider stopping at 7.5% expertise and converting the excess into more haste.

Next up, the expertise plots:

Not much new here. At 10% expertise we reach the spell hit cap (because of our 5% hit), and both hit and expertise see a drop in value. Hit maintains a pretty high value after that point, while expertise drops below haste. Once we hit 15% expertise, expertise drops to zero as expected. The ordering of stats on this plot is pretty similar to those we've already seen.

Finally, let's look at the haste plots:

There's not much new to tell from this plot. Improving haste makes everything better, but the stat priorities don't change significantly. At the 150k Vengeance level, we still want hit>exp>haste; at 75k we still have hit and expertise dominating with haste and strength vying for third place, AP right behind them in fifth, and crit a distant sixth.

A note on gems:In MoP, the stat budget on gems has changed slightly. Instead of the itemization ratio seen here, we get twice as much of a secondary stat as we should (example: Bold Primordial Ruby vs. Precise Primordial Ruby). This analysis has used the usual itemization budgeting that you'll get on gear pieces, which means that for gemming, you need to double the value of any secondary stats. In a practical sense, this means that expertise, hit, haste, and even crit will almost always be the high-DPS choice for gems. Strength simply can't compete with the factor of 2 itemization benefit on gems. Since we're not likely to get enough haste to reach any sort of serious cap, we can always stuff a haste gem into a slot for more DPS than a STR gem (socket bonuses nonwithstanding, but even there, a STR/Haste or pure haste gem will be superior to pure STR).

TLDR summary:

Hit (to 7.5%) and Expertise (to 7.5%) are generally our best DPS stats (in that order) at reasonable Vengeance levels. At very low Vengeance, they will fall behind Strength and AP.

At high Vengeance levels (~150k), haste is our third best stat, followed by expertise (from 7.5% to 15%), crit, strength, and AP.

At lower Vengeance levels (~75k), haste, strength and AP are about equal, with expertise (from 7.5% to 15%) trailing them slightly, crit falling to sixth place and crit trailing it significantly.

Agility and intellect are both very weak DPS stats at all Vengeance levels. Avoid them.

Dodge and parry are both very weak DPS stats. Avoid them. Dodge is actually a DPS loss (albeit a negligible one) if you're using Alabaster Shield.

Remember that since secondary stats on gems are doubled, secondary stats are always the right DPS choice on gems.

This sim has changed somewhat since Cataclysm. The guts are pretty much the same, but the weapons we consider are now fairly different. For starters, spellpower weapons have been omitted. We get no benefit from the spellpower on the weapon anymore thanks to Guarded by the Light, and the Intellect on it is nigh-worthless to us as well. It's not even likely that a higher-ilvl spellpower weapon will hold a candle to a significantly lower-ilvl weapon now, because CS is such a weak part of our arsenal. So we're not even going to consider them anymore.

Instead, we'll divide weapons into three categories we care about: "Tank," "DPS," and "Agility." Defining what makes a "tank weapon" nowadays is a bit ambiguous in the era of active mitigation, but to be as inclusive as possible I've categorized it as follows. A tank weapon has:

strength and stamina

Any combination of dodge, parry, hit, expertise, or haste

No crit rating

A DPS weapon is basically any strength weapon that has crit on it. An agility weapon is pretty self-explanatory.

For this sim, I run three configurations. The first is a Blood Elf paladin with 2.5% hit and 7.5% expertise, so that a weapon with hit and expertise on it natively gets an advantage for having those high-DPS stats. The second is a Human paladin with the same stats so that we can see the benefit of the extra 1% expertise racial bonus with swords and hammers. The graph legends will show this as the "2.5% hit, 8.5% expertise" configuration. The third configuration is at 7.5% hit and 15% expertise, which is biased against weapons with hit and expertise by being at their respective caps.

In practice, you'll probably be most interested in the first two configurations. A weapon with hit and expertise will let you reforge for other stats elsewhere, so the rank ordering of configuration #1 (or #2 if you have a relevant racial expertise bonus) is most applicable. Configuration #3 is there for cases where you're over-capped and can't make use of all of an items hit or expertise, which is rare. It's also applicable to situations where you'll be reforging to those caps anyway, and reforging all excess rating into non-DPS stats (dodge, parry, mastery).

Since the extra socket gained from the Eye of the Black Prince is now applicable to all weapons, I've simply omitted it.

The table and plots below contain the results, sorted by category and ilvl.

For the tank plot, I've included each version of Kilrak twice - with and without the 500 STR gem in the sha-touched socket. Even the Heroic+Gem version falls behind the 522-ilvl weapons from normal-mode ToT, so don't feel obliged to hang on to it once you can get your hands on something 10+ ilvls higher.

The weapons don't have a lot of variation this time around. You get hit/expertise, hit/mastery, expertise/mastery, or dodge/parry. The dodge/parry offering (Acid-Spine Bonemace) obviously lags a bit in the DPS department. I can't decide whether "Rapid-Shard Bonemace" or "Acid-Spine Boneshard" will win out as the favorite nickname for it.

The agility items don't perform that poorly, but they also don't perform all that well. They tend to lag their strength brethren by a tier, though of course secondary stats have a large effect on that. There isn't that much more to say about them - if an agility weapon is a large ilvl upgrade, then it's likely an upgrade for you.

Hand of the Dark Animus is worth mentioning, however. It's an agility weapon, but it's got haste/expertise itemization on a mace. Thus, in the hands of a Human or Dwarf, it manages to meet or exceed the performance of Worldbreaker's Stormscythe. If you don't have an Enhancement Shaman or Rogue (or Monk?) that's chomping at the bit for one of these, it's a solid pick-up for those races.

TLDR Summary:

Higher-ilvl weapons are generally better, but not as obscenely so as it was in Cataclysm. A good hit/exp weapon can last quite a while. Secondary stats like hit/exp/haste can make a lower-ilvl weapon better than a higher-ilvl dodge/parry weapon for DPS (and for survivability, coincidentally).

The new weapons in Throne of Thunder are generally going to be upgrades over a Kilrak if they're 10+ ilvls higher.

This section will define acronyms that appear over and over again in calculations. I have tried to be good about defining these clearly in newer calculations as well, but this master list should contain everything you need just in case.

Current Terminology (See the 4.0/3.0 threads if you want discontinued Cataclysm/Wrath acronyms)

The code now uses a "Finite-State Machine" or "FSM" implementation to calculate ability weight values. This is a pretty drastic change from our previous simulation methods, and a significant improvement in many areas.

The basic idea behind a Finite-State Machine is to catalog every possible "state" of the system, along with the possible transitions between states. From that information, the code tries to determine the state distribution of the system in equilibrium. In many senses, it's very similar to a Markov chain.

There are pros and cons to each of the methods we've used, but the FSM implementation has the most pros and fewest cons by far:

Analytical Model

Pros

very fast in MATLAB

simple to debug

gives exact DPS values

Cons

limited to very simple queues

not very flexible

needs to be re-written every time game mechanics change

Priority Simulation + Numerical Modeling

Pros

very flexible

easy to update as game mechanics change

fast once database is generated and modeled

Cons

simulation is slow

noisy even for long sim times

generating the database takes ~days

did I mention slow?

FSM

Pros

very fast compared to priority sims

results can be easily cached and stored for re-use

gives exact DPS values

very flexible

easily updated when game mechanics change

Cons

a little more complicated to code

limited Matlab support for graphs (overcome by using C#)

As a simple example of how the FSM code works, let's look at a limited system of a Paladin with two spells, Crusader Strike and SotR, and a priority queue of SotR>CS. There are only two things to track in this system - the cooldown of Crusader Strike and the amount of Holy Power the Paladin has. We can represent that with two digits, one for the cooldown and one for the amount of Holy Power.

For our initial state, let's just start with no holy power and no cooldown on CS. We represent this state as:

So far so good. To determine the transitions between states, we consider the priority queue. In this state, we can't cast a 3-HP SotR, so the only transition is to use CS, which takes us to one of two state:

Since the GCD is active we can't cast anything, so the transitions out of these states are all "do nothing and wait 1.5 seconds." If we do that, we knock 1.5s off of the CS cooldown, leading to the states [1.5 1] and [1.5 0]. In both of those states, we'd again "do nothing" for another 1.5s, leading to states [0 1] and [0 0]. At that point, we again consult the queue and see that in both of those states, we'd choose to cast CS again, leading to the following new transitions (we already know what happens in [0 0]):

We could draw this out, with each state as a node and each transition between states being an arrow pointing from the beginning state to the end state. If we did that, it would look a lot like a graph or a flow chart (see any of the figures in the Wikipedia article).

If we continued this process, we'd eventually reach a point where we've cataloged all possible states and transitions, at which point we'd have a complete graph of the "state space." For our simple system, we have a very small state space - it's even simpler than I've shown, because we can skip all of the possible states where the GCD blocks transitions. That narrows it down to:

In other words, 8 different states. In practice, we'd be tracking more things - the cooldowns of 5-8 different spells, the duration of several buffs (Inq, Grand Crusader, Sacred Duty), internal cooldowns (Eternal Glory), and so forth. An actual state space in one of our sims can be as large as 20k-30k states. And we need to store the transitions between states, as well as the probability of each transition.

Creating the graph is just the first step, we also need to solve the system to find its equilibrium. You can think of this as figuring out what the average process flow through the graph is.

A simple process flow for our graph would look something like this, assuming every CS was successful:

That's just one way a sequence could go - you could also imagine an endless string of CS misses that just bounces you back and forth between [0 0] and [1.5 0], or any other combination. What we want is the weighted average of every possible process.

The old priority simulation code effectively did this by starting at one point on the graph and traveling through it many, many times. It just kept track of the current state and rolled the dice to see what the next transition was. That's pretty good, but it takes a long time and is always susceptible to statistical noise. The even older, analytical code could only do this for very limited systems in which there were very few states with well-defined transitions.

FSM implementations can be solved in a variety of ways. One can construct a transition matrix M that contains all of the transition probabilities and solve the linear system associated with it using standard linear algebra techniques. Unfortunately, when you're dealing with matrices of this size (20,000 x 20,000 elements) many of those techniques take an incredibly long time unless the matrix is particularly well-behaved. Instead, we've used an iterative technique that starts in a given state (usually one where each state has a probability of 1/N, where N is the number of states) and then calculates the change in each state from one step (essentially matrix multiplication of state vector v, v_out=M*v). It then repeats that process until the change in any state is smaller than a predefined tolerance threshold.

It turns out that the state generation and iterative solving process is quite a bit faster to do in C# than Matlab, so our implementation calls an executable file to do the state generation and crunching. We then import the results into Matlab and do our post-processing on the stat weights like we've always done.

Finally, to give credit where credit is due, the FSM implementation we're using wouldn't exist without all the hard work put in by Iminmmnni, who suggested we try this route. He has written and maintained the vast majority of the C# code, and been absolutely essential in getting it working and implemented.

If you'd like to mess around with the code yourself, you'll either need MATLAB or a variant thereof. MATLAB is stupidly expensive itself, but there are free alternatives, including FreeMat, Octave, and Scilab. I haven't tested any of the code in these programs, but I haven't used any fancy functions or anything, so they should natively be able to run the m-files. If you run into errors, let me know and I'll see if there's anything simple I can do to help make the code more compatible with the free versions.

The files themselves are hosted on Google Code this time around to make collaboration easier. You can read and review all of the code directly through the Google Code interface, including color-coded diffs. If you want to grab the latest code, you can do so over http or with any SVN client. It's immensely easier to work with than the old system, which was me having a local copy and re-coding all the suggested changes myself.

The easiest way to get the whole batch is through SVN, however I hope to set up a nightly .zip repository down the line once the code has stabilized. Please contact me via PM or through the Google Code system if you'd like to help contribute to the code base in any way, even if it's just helping to keep the wiki up to date (or at this point, building it from scratch).

I hope to add a "user's guide" of sorts when I find some time, but it may be a while.

As of today, I'm opening this thread for discussion. Tlitp, Iminmmnni and I have been working hard on the code to get the basic framework in place. Things like, "how do we represent/store this information" are mostly taken care of, and the code is surprisingly readable.

Note that at this stage, the thread is focused on getting the simulations running smoothly, NOT on the results. It's far too early in beta to determine what our optimal rotation will be at release, for example. Things can and will change during beta. The goal in these first few months of beta is making sure that we're modeling everything properly and deciding what things we'll want to know.

Questions such as "What rotation/talents/glyphs/etc should I be using at level 90" will be deleted.

Note also that this time around, I'm not going to bother modeling our mechanics below max level (90). I don't think it's worth the extra hassle for less than one month of relevance.

Here's where the community comes in. I need volunteers willing to help flesh out the code base and get it up and running. There are a number of ways that you, the dedicated forum poster, can contribute. For example:

Code Monkey - someone with a basic knowledge of MATLAB who's interested/willing to help maintain the code base. Stuff like making minor corrections to different modules or writing calculation files. Prerequisites would be that you know enough not to screw up the code, and have a passing familiarity with how to do SVN checkouts/commits or are willing to learn how to do so. The project is hosted on Google Code: Project matlabadin.

Error checkers - People who will look through the code and try and spot mistakes. Things like, "You missed the Seals of the Pure modifier for Seal of Awesomeness" or "I ran the code in Octave and got an error on line x of module y, here's how I fixed it." If you don't want to mess around with SVN commits but can read MATLAB code, this could be the job for you!

Wikinators - Eventually I want the wiki to include a page for each module describing what it does and how it's used. At this point, I don't have a specific idea how I want to do this, and won't have time to work on it until much farther down the line. If someone else wanted to make this their pet project, it would be an immense help.

Data Miner - Willing to do simple fetch/retrieve operations. Things like "Here's a list of all of the spell coefficients and base damages for our abilities at level 85, according to wowhead." Beta access isn't even necessary for this. If you're able to read MATLAB code and willing to check these sorts of things against the code and post about possible errors, that's even better.

Tester - I'll need people to go in and test things in the Beta from time to time. Things like "Does Talent X affects the damage of Ability Y or not" or "What's the proc rate on Talent Z?" This would probably require beta access.

How to contribute

If you are interested in helping and need project access on Google Code: Send me a PM with your Google Account e-mail address and the type of work you'd like to help out with. You can contact me either on the boards here or via theckhd@gmail.com. You need a Google Account to gain access to the project. If you contact me via e-mail, please mention your forum name so I have some clue who I'm talking to.

If you are interested in helping with the code but do not need project access: Simply do whatever it is you're willing to do to help, and post your findings, observations, comments, or whatever in this thread. Also, keep an eye on this thread and the Call to Arms thread, as tlitp and I will periodically be posting requests when we need things checked or tested. I will be keeping a "master list" of unresolved issues/requests in the Call to Arms thread.

Feel free to post questions about the code as well. If you're trying to help but don't understand what a certain line of code (or even an entire module) is doing, ask! Chances are one of us will have a good answer, but who knows - you might catch us making a bad assumption or doing something in a more complicated fashion than is necessary.

Pyrea wrote:You could use DP, DivP, and DivPl to differentiate between Divine Protection, Divine Purpose and Divine Plea

We don't have Divine Plea anymore in MoP. DP should probably be clear from context, given that you can't "talent" Divine Protection, nor would you put it as a conditional in a rotation. If a situation arises where it's not clear form the context, DivPurp will suffice.

Ive seen AM used in other threads, but dont see a reference in the glossary. Ive tried searching for it, but without knowing the meaning its been fruitless (plus the search is limited to 4+ character strings only). Im not sure if its a Prot thing, but if so I can only assume it would be good to add it here.