Theck's MATLAB TPS analysis - WotLK/3.x
Moderators: Fridmarr, Worldie, Aergis, theckhd
Theck's MATLAB TPS analysis - WotLK/3.x
Old thread is old. Cata/4.x thread is here
In an effort to make this thread a little more manageable, I've deleted the post that was originally here (which is quoted in the first response anyway) and replaced it with this introductory post.
History: This thread actually spawned from the Hit so bad? thread, which was discussing the relative value of Hit Rating on tanking gear. I was curious about the scaling laws, so I took the formulae from Jonesy's Prot DPS/TPS spreadsheet and threw them into my favorite numerical analysis tool, MATLAB.
Since the MATLAB discussion quickly started heading off-topic, the mods decided to split that part off into a new thread, which is what you're currently reading. Unfortunately, that means that the first page or so of this thread is basically unintelligible, because a lot of it is referring to discussion from the other thread.
Since then, I've modified the code structure to be more versatile, so that it can be used to model a variety of different scenarios. This post will act as a table of contents for all of the results the MATLAB code has been used to generate, as well as a basic introduction to how to use the code.
List of pertinent calculation results
Subdivided by category, more important results are large and bold, while ancillary or niche discussions are regular size.
Calculations updated for 3.3
Archives
3.2.2
3.2
3.1
3.0.x
Glossary
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 below for discontinued acronyms)
Discontinued Terminology - may be found in older calculations
Code
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.
The files themselves are available here: http://sites.google.com/site/theckhd/mfiles . The files are subdivided into folders according to their purpose. There are archive files containing the full set as well for those who want to download everything at once.
I hope to add a "user's guide" of sorts when I find some time, but it may be a while.
In an effort to make this thread a little more manageable, I've deleted the post that was originally here (which is quoted in the first response anyway) and replaced it with this introductory post.
History: This thread actually spawned from the Hit so bad? thread, which was discussing the relative value of Hit Rating on tanking gear. I was curious about the scaling laws, so I took the formulae from Jonesy's Prot DPS/TPS spreadsheet and threw them into my favorite numerical analysis tool, MATLAB.
Since the MATLAB discussion quickly started heading off-topic, the mods decided to split that part off into a new thread, which is what you're currently reading. Unfortunately, that means that the first page or so of this thread is basically unintelligible, because a lot of it is referring to discussion from the other thread.
Since then, I've modified the code structure to be more versatile, so that it can be used to model a variety of different scenarios. This post will act as a table of contents for all of the results the MATLAB code has been used to generate, as well as a basic introduction to how to use the code.
List of pertinent calculation results
Subdivided by category, more important results are large and bold, while ancillary or niche discussions are regular size.
Calculations updated for 3.3
- Damage, Threat, DPS, and TPS breakdown of our abilities - covers both glyphed and un-glyphed versions.
- Talents and specs - What talent gives the biggest DPS/TPS boost per point? What spec pumps out the most threat?
- Stats from gear - What stat gives us the biggest threat boost? Shows scaling with STR, Hit, Expertise, and BV.
- Seal Comparison - How does SoCom stack up to SoV?
- AoE Round-Up - What Talents and Stats give us the biggest benefit in AoE tanking situations?
- Weapon Analysis (round 3) - How big of a factor is weapon speed in our TPS? How do the currently available weapons compare for threat? (previously: round 2, round 1)
- Enchants and Foods - Which enchants and foods gives us the biggest threat boost?
- Glyphs - Which glyph gives us the biggest threat boost?
- Side Calculation - Reckoning Uptime
Archives
3.2.2
- Damage, Threat, DPS, and TPS breakdown of our abilities
- Talents and specs
- Stats from gear
- Seal Comparison
- Weapon Analysis
- Glyphs
- Enchants and Foods
- Side Calculation - Mongoose Uptime - Rough estimate of Mongoose uptime for patch 3.2.2
3.2
- Damage, Threat, DPS, and TPS breakdown of our abilities - covers both glyphed and un-glyphed versions. Also talks about simple substitution rotations.
- Talents and specs
- Stats from gear
- Glyphs
- Enchants and Foods
- Seal Comparison
- Weapon Speed Analysis
- AT101: 969 and FCFS Theorycraft Summary - Simulation of different FCFS rotations
3.1
- Stats from gear - What stat gives us the biggest threat boost? Calculation done for both SoV and SoB, and shows scaling with STR, Hit, and Expertise. Valid for Raiding gear levels and above (i.e. Naxx10 - Ulduar+)
- Stat Analysis for Heroic gear levels
- Original calculation (outdated), with commentary on what this all means
- Talents and specs- What talent gives the biggest DPS/TPS boost per point?
- Sanctity of Battle vs. Crusade - Which gives a bigger TPS boost
- Damage and DPS breakdown of our abilities - covers both glyphed and un-glyphed versions.
- Exorcism and Avenge's Shield Substitutions - When does it make sense to slip Exorcism and Avenger's Shield into the 969 rotation?
- Glyph TPS breakdown for SoV - What's the best threat glyph?
- Weapon analysis - How do the Ulduar weapons stack up to Last Laugh and Broken Promise, for both SoV and SoB?
- Weapon Enchant DPS/TPS comparison, done for both SoV and SoB. Accuracy is still the winner.
- Seal of Blood tanking analysis, Part 1 - Under what circumstances, if any, is SoB better for threat than SoB?
- Part 2 - Substitution rotations - How does substituting something for Judgement change this analysis?
- Part 3 - Stat-based DPS/TPS breakdown - What stats should we stack to maximize SoB DPS/TPS?
- Part 4 - Should we be stealing weapons from Shamans - Is it worth grabbing slow physical DPS weapons for SoB tanking?
- DTPS analysis - Recoil damage for different rotations (969, Judgement substitutions). (outdated, but still relevant)
- Glyph choices - Which glyphs give you the biggest DPS/TPS boost while SoB tanking? (outdated, but still relevant)
- Weapon analysis - What's the best weapon for SoB tanking? (outdated, see generic Weapon Analysis post)
- Off-tanking analysis - What should we replace to maximize dps while off-tanking (outdated, see Part 2)
- Old SoB analysis - Uses the old one-roll code, so isn't accurate anymore. (outdated)
The rest of the calculations in this section have not been updated to the 2-roll code, but should still be relevant. - Updated rotation comparison for 3.1-viable specs - Revisiting the question of whether it's worth varying our rotation from default 969. (outdated, but still shows why HSsE is a our best substitution for pure DPS)
- Original calculation (outdated)- may be worth reading since it gives a more detailed description of the variations we're testing.
- Libram Analysis - How does the new Ulduar libram (Libram of the Sacred Shield) stack up to Libram of Obstruction?
3.0.x
- Old scaling calculations, showing DPS/TPS contributions of different stats, and how they scale with STR, Expertise, and Hit. AKA "Hit is our second-best Threat stat" (outdated, though still relatively accurate)
- Original calculation (outdated), with commentary on what this all means
- Exorcism-substitution rotations (all outdated) - Different options for modifying the standard 969, and whether they show any benefit.
- First-Come First-Serve (FCFS) tanking rotations compared to 969
- Seal comparison - SoV vs. SoR vs. Sob - updated for 30% SoR glyph (outdated - SoR glyph is back to 10%)
- Preliminary look at the 13/53/5 spec with FCFS (Still conceptually relevant)
Glossary
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 below for discontinued acronyms)
- 1HWS - One-Handed Weapon Specialization talent. May also be seen written OHWS.
- A - Usually used to represent Glyph of Avenger's Shield when referring to glyphs. Often seen in conjunction with other glyphs, i.e. "JA" for Judgement + Avenger's Shield glyphs, "EA" for Exorcism + Avenger's Shield, etc.
- AS - Avenger's Shield.
- BP - Broken Promise.
- C - Depends on the context.
- When referring to glyphs, C refers to the Glyph of Consecration, and will often be used in conjunction with other glyphs, i.e. "JC" for Judgement + Consecration glyphs, "CE" for Consecration + Exorcism etc. May also be referred to as "Cons" in cases where a single-letter acronym would be ambiguous.
- When referring to talents, C stands for the Crusade talent. It is usually seen preceded by a number representing the # of talent points, such as "2C" for 2/3 Crusade. Combinations of talents are usually written like "5V+2C" for 5/5 Conviction + 2/3 Crusade. May also be seen as "Crus" in cases where a single-letter acronym would be ambiguous.
- Cons - Consecration, see C.
- Conv - Conviction, see V.
- Crus - Crusade, see C.
- DUH - Cutesy acronym that stands for Demon, Undead, or Humanoid. Uused to refer to mobs or bosses which give Crusade the extra 3% damage. Note that Elementals are also DUH mobs, but the acronym isn't as cute if you have to fit an E in somewhere. An NPC which only gets the base 3% from Crusade is often called a "generic" or "no-DUH" mob.
- E - Glyph of Exoricsm. Often seen in conjunction with other glyphs, i.e. "JE" for Judgement + Exorcism glyphs, "VE" for Vengeance + Exorcism etc.
- Exor - Exorcism.
- HotR - Hammer of the Righteous.
- HS - Holy Shield.
- HSsA - Holy Shield substitution with Avenger's Shield. Refers to a 969 variation where every 4th Holy Shield is replaced with Avenger's Shield.
- J - Usually used to represent Glyph of Judgement when referring to glyphs. Often seen in conjunction with other glyphs, i.e. "JV" for Judgement + Vengeance glyphs, "JE" for Judgement + Exorcism, etc.
- JsA - Judgement substitution with Avenger's Shield. Refers to a 969-variation where every 4th Judgement is replaced with Avenger's Shield.
- JsHoW - Judgement substitution with Hammer of Wrath. Refers to a 969 variant where Judgement is replaced with Hammer of Wrath.
- Jud - Judgement
- LL - Last Laugh
- LoO - Libram of Obstruction
- LotSS - Libram of the Sacred Shield
- R - Reckoning. It is usually seen preceded by a number representing the # of talent points, such as "3R" for 3/5 Reckoning. Combinations of talents are usually written like "5V+2R" for 5/5 Conviction + 2/5 Reckoning.
- S - Seals of the Pure talent. Usually seen preceded by a number representing the # of talent points, such as "5S" for 5/5 Seals of the Pure. Combinations of talents are usually written like "5S+2R" for 5/5 Seals of the Pure + 2/5 Reckoning. May also be written "SotP" in cases where the single-letter acronym would be ambiguous.
Note: In some of the old graphs, S was used to indicate the Seal of Vengeance glyph. See V. - ShoR - Shield of Righteousness
- SoB - Seal of Blood (Martyr for Alliance)
- SoR - [http://www.wowhead.com/?spell=21084]Seal of Righteousness[/url]
- SotP - Seals of the Pure, see S.
- SoV - Seal of Vengeance (Corruption for Horde)
- T or TbtL - Touched by the Light talent.
- V - Depends on the context.
- When referring to glyphs, V will stand for the Glyph of Seal of Vengeance, and will often be used in conjunction with other glyphs, i.e. "JV" for Judgement + Vengeance glyphs, "VE" for Vengeance + Exorcism etc. Note that in some of the older graphs, S was used for the SoV glyph, this usage has been discontinued.
- When referring to talents, V stands for the [ur=http://www.wowhead.com/?spell=20121]Conviction[/url] talent. In this context, it is usually seen preceded by a number representing the # of talent points, such as "5V" for 5/5 Conviction. Combinations of talents are usually written like "5V+2C" for 5/5 Conviction + 2/3 Crusade. May also be written "Conv" in cases where the single-letter acronym would be ambiguous.
Discontinued Terminology - may be found in older calculations
- 6s-sub - Discontinued - Refers to a 969 variation where Exorcism is used in place of one of our 6-second cooldowns whenever available. If I ever need to refer to it again, it will be 6sE.
- EoC - Exorcism on Cooldown. Refers to a 969 variation where Exorcism is used in a 9's slot whenever available, pushing back the 9-second ability that would have been used in that slot by 3 seconds. Also seen as "E-o-C" or "Exor-on-cooldown."
- HotR-sub - Discontinued - Refers to a 969 variation where Exorcism is used in place of HotR when available. If I ever need to consider this case again, it will be HotRsE.
- HSsE - Holy Shield substitution with Exorcism. Refers to a 969 variation where every other Holy Shield is replaced with Exorcism. Older calculations may also write this as "HSsub" or "HS-sub," but this usage has been discontinued.
- HSS - Discontinued - see HSsE.
- HSsub or HS-sub - Discontinued - see HSsE.
- JsE - Judgement substitution with Exorcism. Refers to a 969-variation where every other Judgement is replaced with Exorcism. Older calculations may also write this as "Jsub" or "Jud-sub," but this usage has been discontinued.
- Jsub - Discontinued - see JsE.
Code
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.
The files themselves are available here: http://sites.google.com/site/theckhd/mfiles . The files are subdivided into folders according to their purpose. There are archive files containing the full set as well for those who want to download everything at once.
I hope to add a "user's guide" of sorts when I find some time, but it may be a while.
Last edited by theckhd on Mon Jan 11, 2010 9:17 am, edited 50 times in total.
"Theck, Bringer of Numbers and Pounding Headaches," courtesy of Grehn|Skipjack.
MATLAB 5.x, Call to Arms 5.x, Talent Spec & Glyph Guide 5.x, Blog: Sacred Duty
MATLAB 5.x, Call to Arms 5.x, Talent Spec & Glyph Guide 5.x, Blog: Sacred Duty
-

theckhd - Moderator
- Posts: 7456
- Joined: Thu Jul 31, 2008 3:06 pm
- Location: Harrisburg, PA
theckhd wrote:Amaranthea wrote:Don't forget that holy shield misses aren't implemented in Jonesy's spreadsheet yet, which should increase the relative value of hit rating.
Aren't they?
- Code: Select all
Shield_of_Righteousness = (block_value + 400).* ... %inherent
(100+(melee_crit + HotC).*Crit_Meta-boss_miss-boss_mcrit_supp)./100 .*...
(OHWS.*SotT.*Crusade.*SU).* ... %talents/glyphs
(CoE.*SanctRet) ... %buffs/debuffs
.*boss_resist_reduce ... %boss resist
./6; %cooldown
The factor in the second line (and third due to wrapping, sorry about the formatting) takes into account the chance you miss a boss and the boss's melee crit suppression, as per the latest version of his spreadsheet. Even the old version I started off of had boss_miss included. Maybe I'm misunderstanding something though.
That looks like ShoR and Amaranthea is talking about holy shield. I could be wrong though, since I have no idea what that really says
- Fridmarr
- Global Mod
- Posts: 9403
- Joined: Sun Apr 08, 2007 1:03 am
Whoops. That'll teach me to read more carefully.
Holy Shield:
Is the "boss_resist_reduce" term the one we're referring to? That's in the latest version of the spreadsheet and included in my analysis, but wasn't in the version of the spreadsheet earlier this week. It has the form:
Holy Shield:
- Code: Select all
Holy_Shield = (0.09.*SP + 0.056.*AP + 211).* ... %inherent
((1-player_avoid)/swing_timer).* ... %player avoidance
(OHWS.*SotT.*Crusade*SU).* ... %talents/glyphs
(CoE.*SanctRet).* ... %debuffs
boss_resist_reduce; %boss resist
Is the "boss_resist_reduce" term the one we're referring to? That's in the latest version of the spreadsheet and included in my analysis, but wasn't in the version of the spreadsheet earlier this week. It has the form:
- Code: Select all
boss_partial_resist=5.2; %hardcoded
boss_resist_reduce=(100-boss_partial_resist)/100;
"Theck, Bringer of Numbers and Pounding Headaches," courtesy of Grehn|Skipjack.
MATLAB 5.x, Call to Arms 5.x, Talent Spec & Glyph Guide 5.x, Blog: Sacred Duty
MATLAB 5.x, Call to Arms 5.x, Talent Spec & Glyph Guide 5.x, Blog: Sacred Duty
-

theckhd - Moderator
- Posts: 7456
- Joined: Thu Jul 31, 2008 3:06 pm
- Location: Harrisburg, PA
Majiben wrote:Theck are you going by ilvl or raw stat?
ilvl, unless I'm mistaken and there's a more subtle difference between "ilvl" and "equal itemization points." From the first post that has graphs:
Theck wrote:The plots show the increase in DPS given by 10 itemization points worth of each of the stats shown as a function of STR. I.e. 10 combat rating, 10 of a primary stat, or 20 AP, 11.6 Spellpower (10/0.86), or 15.3 Block Value (10/0.65).
"Theck, Bringer of Numbers and Pounding Headaches," courtesy of Grehn|Skipjack.
MATLAB 5.x, Call to Arms 5.x, Talent Spec & Glyph Guide 5.x, Blog: Sacred Duty
MATLAB 5.x, Call to Arms 5.x, Talent Spec & Glyph Guide 5.x, Blog: Sacred Duty
-

theckhd - Moderator
- Posts: 7456
- Joined: Thu Jul 31, 2008 3:06 pm
- Location: Harrisburg, PA
theckhd wrote:Whoops. That'll teach me to read more carefully.
Holy Shield:
- Code: Select all
Holy_Shield = (0.09.*SP + 0.056.*AP + 211).* ... %inherent
((1-player_avoid)/swing_timer).* ... %player avoidance
(OHWS.*SotT.*Crusade*SU).* ... %talents/glyphs
(CoE.*SanctRet).* ... %debuffs
boss_resist_reduce; %boss resist
Is the "boss_resist_reduce" term the one we're referring to? That's in the latest version of the spreadsheet and included in my analysis, but wasn't in the version of the spreadsheet earlier this week. It has the form:
- Code: Select all
boss_partial_resist=5.2; %hardcoded
boss_resist_reduce=(100-boss_partial_resist)/100;
Boss_resist_reduce is covering partial resists which affect all spelldamage.
This is different from a spell "miss."
- Amaranthea
- Posts: 178
- Joined: Tue Feb 10, 2009 12:10 pm
Amaranthea wrote:Boss_resist_reduce is covering partial resists which affect all spelldamage.
This is different from a spell "miss."
OK. What's the appropriate way to add that to the formula then?
I'd assume it's similar to the code for Consecrate:
- Code: Select all
Consecrate = (904 + 0.32.*AP + 0.32.*SP).* ... %inherent
(100-boss_spell_resist)/100.* ... %boss spell resistance
(OHWS.*Crusade.*SU).* ... %talents
(CoE.*SanctRet) ... %buffs/debuffs
.*boss_resist_reduce ... %boss resist
./9; %uptime
where boss_spell_resist is actually a spell hit modifier:
- Code: Select all
boss_spell_resist=17-(spell_hit+imp_faerie_fire);
In other words, would adding a factor of (100-boss_spell_resist)/100 to the Holy Shield formula correct this, or is there a more complicated mechanic involved?
"Theck, Bringer of Numbers and Pounding Headaches," courtesy of Grehn|Skipjack.
MATLAB 5.x, Call to Arms 5.x, Talent Spec & Glyph Guide 5.x, Blog: Sacred Duty
MATLAB 5.x, Call to Arms 5.x, Talent Spec & Glyph Guide 5.x, Blog: Sacred Duty
-

theckhd - Moderator
- Posts: 7456
- Joined: Thu Jul 31, 2008 3:06 pm
- Location: Harrisburg, PA
theckhd wrote:In other words, would adding a factor of (100-boss_spell_resist)/100 to the Holy Shield formula correct this, or is there a more complicated mechanic involved?
No, that should be it (assuming it's based on spell hit rating - which I believe to be true but I can't find any proof of atm other than the fact that I got a larger amount of resists than expected while almost hitcapped).
Edit: Oh hmm, looks like the spreadsheet forgot to add Draenei aura to boss spell miss, so you need to take that into account too.
Last edited by Amaranthea on Fri Feb 20, 2009 12:29 pm, edited 1 time in total.
- Amaranthea
- Posts: 178
- Joined: Tue Feb 10, 2009 12:10 pm
Majiben wrote:did you take into account BV scaling from redoubt?
Yes:
- Code: Select all
block_value=(STR.*0.5 + Gear_BV + extra_BV).*Redoubt.*BV_Meta;
Where Redoubt is
- Code: Select all
Redoubt=1+0.1*Redoubt_points;
and Redoubt_points is an integer representing talent points invested. It's set to 3 in my calculations, which is the default in the spreadsheet as well. As you can see from the ShoR code, block_value is the variable that gets used in the DPS calculations, so Redoubt is correctly accounted for.
Amaranthea wrote:No, that should be it (assuming it's based on spell hit rating - which I believe to be true but I can't find any proof of atm other than the fact that I got a larger amount of resists than expected while almost hitcapped).
I'll add that to the code then. Not sure if it will make a huge difference, but if it does I'll let everyone know.
<edit>I should never trust my judgment. Adding spell resists to Holy Shield changes the crossover point noticeably, such that at 1270 STR fully raid-buffed, Hit eclipses BV for DPS, and at around 1500 STR fully raid-buffed, Hit eclipses BV for threat.
"Theck, Bringer of Numbers and Pounding Headaches," courtesy of Grehn|Skipjack.
MATLAB 5.x, Call to Arms 5.x, Talent Spec & Glyph Guide 5.x, Blog: Sacred Duty
MATLAB 5.x, Call to Arms 5.x, Talent Spec & Glyph Guide 5.x, Blog: Sacred Duty
-

theckhd - Moderator
- Posts: 7456
- Joined: Thu Jul 31, 2008 3:06 pm
- Location: Harrisburg, PA
Amaranthea wrote:Edit: Oh hmm, looks like the spreadsheet forgot to add Draenei aura to boss spell miss, so you need to take that into account too.
I don't think it did:
- Code: Select all
spell_hit=Draenei_Aura + (Gear_Hit+extra_hit)./hit_rating_to_spell_hit;
boss_spell_resist=17-(spell_hit+imp_faerie_fire);
Ignore the "extra_hit" which is specific to my code (it's how I sub in the 10 hit rating). The Draenei Aura is baked into the "spell_hit" variable, so it's also in boss_spell_resist. Which I should apparently rename "boss_spell_miss" to keep it clearly different from partial resists.
"Theck, Bringer of Numbers and Pounding Headaches," courtesy of Grehn|Skipjack.
MATLAB 5.x, Call to Arms 5.x, Talent Spec & Glyph Guide 5.x, Blog: Sacred Duty
MATLAB 5.x, Call to Arms 5.x, Talent Spec & Glyph Guide 5.x, Blog: Sacred Duty
-

theckhd - Moderator
- Posts: 7456
- Joined: Thu Jul 31, 2008 3:06 pm
- Location: Harrisburg, PA
Majiben wrote:It should be (Rebout + BV meta) rather than reboubt * BV meta
so
- Code: Select all
block_value=(STR.*0.5 + Gear_BV + extra_BV).*(Redoubt + BV_Meta);
I took that directly from the spreadsheet, so if that's the case the spreadsheet is incorrect as well. I wasn't sure if they were additive or multiplicative, so I just left it the way Jonesy had it.
<edit> that's not right either, actually. Redoubt = 1.3 and BV_Meta = 1.05, which is fine if they're multiplicative, but wrong if they're additive. Luckily, since it only shows up in block_value, I can change BV_Meta to be 0.05 to make the code above correct.
"Theck, Bringer of Numbers and Pounding Headaches," courtesy of Grehn|Skipjack.
MATLAB 5.x, Call to Arms 5.x, Talent Spec & Glyph Guide 5.x, Blog: Sacred Duty
MATLAB 5.x, Call to Arms 5.x, Talent Spec & Glyph Guide 5.x, Blog: Sacred Duty
-

theckhd - Moderator
- Posts: 7456
- Joined: Thu Jul 31, 2008 3:06 pm
- Location: Harrisburg, PA
Majiben wrote:Yeah sorry I usually write down additive multiplier as (1+ x% +y%)
I thought the BV meta only considered block value on gear and that Redoubt was ignored?
- Fridmarr
- Global Mod
- Posts: 9403
- Joined: Sun Apr 08, 2007 1:03 am
Return to Advanced Theorycraft and Calculations
Who is online
Users browsing this forum: No registered users and 1 guest
