Diminishing Returns for Brewmaster Monks

In my last post, I mentioned that I’d be happy to work on the equations for Monks and Druids if someone would submit data. In the comments, disargeria offered to do just that, and provided this data set covering both level 85 and level 90. I spent some time with the data and MATLAB’s curve/surface fitting toolboxes, and have narrowed down the parameter space quite a bit. You can see the code itself here: dr_eqn_monks.m dr_eqn_monks.mat.

Level 85 Data

I started by looking at the level 85 agility data. Here’s the MATLAB fitting output:

a2d_85_fit = 

     General model:
     a2d_85_fit(x) = 3.00+103/a+1/(1/C+k/((x-103)/a))
     Coefficients (with 95% confidence bounds):
       C =       497.6  (467.9, 527.4)
       a =       245.8  (243.1, 248.5)
       k =       1.409  (1.391, 1.426)

a2d_85_gof = 

           sse: 1.1524e-004
       rsquare: 1.0000
           dfe: 13
    adjrsquare: 1.0000
          rmse: 0.0030

That tells us a few things. First of all, the $k$ value for monks is higher than the 0.855 that paladins get. It also tells us that the dodge cap $C$ is much higher (for comparison, the dodge cap for paladins is $C_d \approx 65$ and the parry cap is $C_p=235.5$. This makes some sense though, since monks will be sharing agility/dodge gear with druids, so they’ll end up with a lot of dodge and not much parry. I’ll note here that the base dodge value of 3.00 was chosen based on the quality of all of the fits. I found that with the surface plots especially, 3.00 worked much better than 3.01. I tried leaving it as a free parameter, but that causes minor instability issues due to the agility conversion (leaving base a free parameter makes $a$ less precise).

Combining the agility data with dodge rating, we can do some surface fitting:

     General model:
     d2d_85_fit(x,y) = 3.00+103/a+1/(1/C+k/(y+(x-103)/a))
     Coefficients (with 95% confidence bounds):
       C =       505.1  (492.9, 517.2)
       a =       243.7  (243.3, 244)
       k =       1.422  (1.42, 1.424)

d2d_85_gof = 

           sse: 2.6031e-004
       rsquare: 1.0000
           dfe: 29
    adjrsquare: 1.0000
          rmse: 0.0030

This nails down our values of $k$ and $a$ rather precisely, though there’s still some uncertainty in $C$. Here’s the surface plot:

And more importantly, here’s the residuals:

Note that none of the errors are larger than $4 x 10^{-3}$, or 0.004% character-sheet dodge. That suggests that this equation is accurate enough to reproduce the character-sheet dodge values without error (or at least, it does so for this data set).

Turning our attention to parry, I tried two fits. The first was fairly general, allowing both $k$ and $C$ to vary. However, the confidence interval for $k$ included the value we found for dodge. Since we already know that $k$ is the same for dodge and parry in the paladin equations, it’s not much of a stretch to guess that the same is true for monks. Thus, I tried a second fit with $k$ fixed at 1.422. The results are below:

p2p_85_fit1 = 

     General model:
     p2p_85_fit1(x) = 8.01+1/(1/C+k/x)
     Coefficients (with 95% confidence bounds):
       C =       112.9  (75.23, 150.5)
       k =       1.429  (1.42, 1.438)

p2p_85_gof1 = 

           sse: 2.1611e-004
       rsquare: 1.0000
           dfe: 12
    adjrsquare: 1.0000
          rmse: 0.0042

p2p_85_fit2 = 

     General model:
     p2p_85_fit2(x) = 8.01+1/(1/C+1.422/x)
     Coefficients (with 95% confidence bounds):
       C =       91.03  (84.66, 97.4)

p2p_85_gof2 = 

           sse: 2.6352e-004
       rsquare: 1.0000
           dfe: 13
    adjrsquare: 1.0000
          rmse: 0.0045

So, from the 85 data, we get the following insights:

  1. $k = 1.422$
  2. $C_d$ is somewhere between 492 and 517, with a “best-fit” value of 505
  3. $C_p$ is somewhere between 85 and 97, with a “best-fit” value of 91.

Unfortunately, these ranges are a little less accurate than I was able to do for paladins. Part of the reason is that both of the caps are quite high, and we simply don’t have enough rating to climb the DR curves very far. All of the rating in this data set comes from reforging, which limits us a bit. If we had a set with much more parry and dodge rating, we might be able to nail those two down a little more accurately.

Level 90 Data

I did parry first this time, since I pretty much knew what to expect. Same process – two fits, the second using the established value of $k$:

p2p_90_fit1 = 

     General model:
     Coefficients (with 95% confidence bounds):
       C =       74.98  (56.13, 93.82)
       k =       1.416  (1.409, 1.424)

p2p_90_gof1 = 

           sse: 8.7461e-005
       rsquare: 1.0000
           dfe: 12
    adjrsquare: 1.0000
          rmse: 0.0027

p2p_90_fit2 = 

     General model:
     Coefficients (with 95% confidence bounds):
       C =       90.44  (83.32, 97.57)

p2p_90_gof2 = 

           sse: 1.0654e-004
       rsquare: 1.0000
           dfe: 13
    adjrsquare: 1.0000
          rmse: 0.0029

Nothing surprising here, our expectations of $k=1.422$ and $C_d \approx 91$ still hold.

I looked at the agility data next. I’ll skip the first fit this time, and jump to the one where I fixed $k$:

a2d_90_fit2 = 

     General model:
     a2d_90_fit2(x) = 3.00+111/a+1/(1/C+1.422/((x-111)/a))
     Coefficients (with 95% confidence bounds):
       C =       503.9  (455.5, 552.3)
       a =       951.1  (950, 952.3)

a2d_90_gof2 = 

           sse: 1.2673e-004
       rsquare: 1.0000
           dfe: 14
    adjrsquare: 1.0000
          rmse: 0.0030

It’s worth noting that the value of $a$ that I came up with for paladins was 952, but there was some wiggle room on that value. I wouldn’t be surprised if it’s 951-951.5 for both classes. This value of $C$ is also pretty consistent with what we’ve found so far.

Going to the full agi/dodge rating data set (again, fixing $k$):

     General model:
     d2d_90_fit(x,y) = 3.00+111/a+1/(1/C+1.422/(y+(x-111)/a))
     Coefficients (with 95% confidence bounds):
       C =       481.7  (464.5, 499)
       a =       950.6  (950, 951.2)

d2d_90_gof = 

           sse: 2.5334e-004
       rsquare: 1.0000
           dfe: 30
    adjrsquare: 1.0000
          rmse: 0.0029

And the plots:

This was a little odd – I didn’t expect C to go down very much. It’s worth noting, however, that $C$ and $a$ are very closely related in this data set. If I fix $a$ at 951, $C$ goes up to 493.3, and boosting $a$ to 951.5 pushes $C$ up to 507.8. Doing so increases the residuals slightly though, bumping a few up to 0.006% (whereas they all remain smaller than 0.004% with the earlier fit). It’s hard to say if this is actually worse though due to the in-game rounding of avoidance to two decimal places. If our model predicts 2.043 when the game calculates 2.045 (rounded to 2.05), the error we see will be 2.05-2.043=0.007 when we were actually only off by 0.002. On the other hand, if our model were perfect, it would never have errors larger than 0.004%.

I can actually include the rounding in the fitting, but not very well. It ends up giving the fitting algorithm conniptions, because it can’t figure out whether small variations show any improvement (due to the rounding), and thus has trouble determining which direction to search. However, working by hand I did find that $a=951.2$ and $C=505$ gave me a pretty good result, with only one data point being off by 0.01% after rounding. That held for a small range of $C$ values in that vicinity though (roughly 504.5-508), and I was never able to get all of the data points to agree.

Conclusions from the level 90 data:

  1. $k=1.422$, as before
  2. The agility-to-dodge conversion factor is around 951-951.5, very similar to a paladin’s strength-to-parry conversion factor.
  3. $C_d$ is tougher to nail down until we know $a$ accurately, or have more data. It still looks like 505 is a reasonable estimate, but it could be anywhere from 460 to 520.
  4. $C_p$ is probably 91, though again it could be +/-7 or so.

“Best Guess” equations for level 90

At this point, our best estimate at the level 90 monk avoidance diminishing returns equations are:

$\large {\rm totalDodge} = {\rm baseDodge} + \frac{\rm baseAgi}{A} + \left (\frac{1}{C_d}+\frac{k}{({\rm Agi}-{\rm baseAgi})/A+{\rm preDodge}}\right )^{-1}$

$\large {\rm totalParry}={\rm baseParry}+ \left (\frac{1}{C_p}+\frac{k}{\rm preParry}\right )^{-1}$

where ${\rm preDodge}$ and ${\rm preParry}$ are the pre-DR values from the respective tooltips due to rating, and

${\rm baseAgi}=111$ (varies by race, but I don’t know what race the tester was)
${\rm baseDodge}=3.00$
${\rm baseParry}=8.01$
$A \approx 951 \pm 1$
$C_p \approx 91 \pm 7$
$C_d \approx 505 \pm 25$?

I’ve been a little generous on the $C_d$ bounds, but I think it’s more likely to be lower than higher (i.e. 495 is more likely than 515, based on the array of fits we’ve seen today).

Improving our estimates

We should be able to narrow the ranges down quite a bit if we get more data though. The goal would be to fill in the sections of the surface plot where we don’t have data: high-agi, low-rating and low-agi, high-rating in particular. For example, if we started off with the full agi gear set (and 0 rating) and reforged each piece one by one, which would fill in the right side of the triangle in the figure. Similarly, a low- or no-agi set (perhaps a cloth gear set?) which was reforged to dodge rating would fill in the lower left portion of the surface. This should probably be done at 90, simply because it helps us nail down $a$ and $C_d$ simultaneously (we don’t care about $a$ at level 85, presumably).

Parry rating is going to be harder – what we really need is a gear set with as many high-parry-rating items as possible to push it further up the DR curve. This is probably easiest-accomplished at 85 due to gear availability (we have more powerful gear to work with relative to character level).


10 Responses to Diminishing Returns for Brewmaster Monks

  1. Badtauren says:

    Thank you for the effort here. (it looks like it took effort.)

  2. Nitro says:

    Just a heads up, GC gave us the agi to dodge value in response to a question asked by a druid. Link to the post: http://us.battle.net/wow/en/forum/topic/5889309137?page=90#1785 .
    Though in response to the druid, based on all you’ve found so far i’d say this might be the a value you’ve been looking for as the agi to dodge and strength to parry value.

    • Hinalover says:

      I believe you are correct. I submitted a brief set of 85 values to Theck and I offered to provide more if he wishes since I have adruid in near BiS Cata transfered into Beta (just missing 2 pieces of gear from H Spine and that is it) but I do have other pieces of gear from previous tiers to test with.

  3. Pingback: Diminishing Returns for Druids | Sacred Duty

  4. disargeria says:

    Thank you very much for you work here! I’ll try to get you another data set with higher ratings when I get time.

    Also, the base agility is for a pandaren monk.

  5. Angelflavor says:

    So Cool your doing the Math for Other tanking classes. I currently only play a prot pally, and I feel other tanking classes have more in common with me than Ret or holy paladins… lol. I also think this allows better comparisons which is useful for feedback… wish I was on beta so I could help with #s

  6. Taser says:

    /tar Theck

    Thank you very much for the work that you put into this. It really helps a lot with further calculations.

  7. Taser says:

    Not easy to get high parry values when rings and necklaces are the only possibility, but every plate-dd rolls need on them.

  8. Pingback: Brewmaster (Tank) Basic Discussion - Page 9 - Elitist Jerks

  9. Pingback: Brewmaster (Tank) Basic Discussion - Page 9 - Elitist Jerks

Leave a Reply