Blade Ward, Analytical Model

Warning: Theorycraft inside.

Moderators: Fridmarr, Worldie, Aergis, theckhd

Blade Ward, Analytical Model

Postby tlitp » Tue Apr 20, 2010 5:15 pm

Method
Time-homogeneous Markov chains with finite state space.


Workflow
1. define ij states (indexes - i for #stacks, j for elementary time frames)
2. define permitted transitions
buff/stack refresh : (i,j)->(i+1,j=1) for i<5, else (i,j)->(i,j=1)
parry : (i.j)->(i=0,j)
no refresh, no parry : (i,j)->(i,j+1) for j<max(j), else (i,j)->(i=0,j)
3. construct the transition matrix
4. compute the stationary distribution


Workflow, debunked
Define an elementary frame of 1.25 seconds (8 frames per buff's full duration). Define the permitted transitions (e.g from the 35 state there are three possible&rational transitions : to 41, 0j, 36). Construct the transition matrix, using the probabilities of the permitted transitions (the usual 1-(1-p)^n formalism, nothing spectacular here). Get the stationary distribution of states (solving analytically a 41x41 matrix is a pain in the arse, although there are some tricks available due the peculiarities of its construction; fortunately, MATLAB comes to the rescue - just multiply the TM with itself for a sufficient number of times, collect your shiny normalized eigenvector reward).


Code
Code: Select all
%base proc chance
q_bwgoose=weapon_base_speed./60; %bw/goose (1 ppm, not haste-normalized)


%triggers
j_apps=2+min([JotJ_points 1]); %J applications (J itself, JoW/JoL, JotJ)


%trigger rates
ptr1=(1+Reck)./player_swing; %AA
ptr2=1./t_hotr;              %HotR
ptr3=1./t_jud;               %J
btr=1./boss_swing;     %boss attack rate


%trigger connects
s1=(100-boss_avoid)./100;  %AA
s2=(100-boss_avoid)./100;  %HotR
s3=(100-boss_miss)./100;   %J


%buff refresh/stack transition
qq_bw=1-(1-s1+s1.*(1-q_bwgoose)).^(10./8.*ptr1) ...    %AA with SoV
    .*(1-s2+s2.*(1-q_bwgoose)).^(10./8.*ptr2) ...      %HotR with SoV
    .*(1-s3+s3.*(1-q_bwgoose).^j_apps).^(10./8.*ptr3); %J with SoV
% qq_bw=1-(1-s1+s1.*(1-q_bwgoose)).^(10./8.*ptr1); %DEBUG

qq_goose=1-(1-s1+s1.*(1-q_bwgoose)).^(15.*ptr1) ... %AA with SoV
    .*(1-s2+s2.*(1-q_bwgoose)).^(15.*ptr2) ...      %HotR with SoV
    .*(1-s3+s3.*(1-q_bwgoose).^j_apps).^(15.*ptr3); %J with SoV


%dynamic avoidance effects
parry_track=[];
dodge_track=[];
for parry_loopvar=0:200:1000
[dodgedr parrydr missdr totavoid]= ...
    avoid_dr(Gear_Dodge,Gear_Parry+parry_loopvar,Gear_Defense,AGI-Base_AGI);
player_miss=5+IS+missdr-0.04.*skillgap;
player_dodge=min([(max([(Base_dodge+Base_AGI./AGI_to_dodge_perc+Antici_points ...
    +dodgedr-0.04.*skillgap-Chill) 0])) (100-player_miss)]);
player_parry=min([(5+Deflec_points+parrydr ...
    -0.04.*skillgap) (100-player_miss-player_dodge)]);
parry_track=[parry_track player_parry./100];
end
for agi_loopvar=0:120:120
[dodgedr parrydr missdr totavoid]= ...
    avoid_dr(Gear_Dodge,Gear_Parry,Gear_Defense,AGI-Base_AGI+agi_loopvar.*BoK);
player_miss=5+IS+missdr-0.04.*skillgap;
player_dodge=min([(max([(Base_dodge+Base_AGI./AGI_to_dodge_perc+Antici_points ...
    +dodgedr-0.04.*skillgap-Chill) 0])) (100-player_miss)]);
dodge_track=[dodge_track player_dodge./100];
end


%probability of at least one parry during the effect of the i-th BW stack
pp1=1-(1-parry_track(2)).^(10./8.*btr);
pp2=1-(1-parry_track(3)).^(10./8.*btr);
pp3=1-(1-parry_track(4)).^(10./8.*btr);
pp4=1-(1-parry_track(5)).^(10./8.*btr);
pp5=1-(1-parry_track(6)).^(10./8.*btr);


%probabilities of the permitted transitions (ij->ij)
bwtemp1=1+pp1.*qq_bw./(pp1+qq_bw-2.*pp1.*qq_bw);
bwtemp2=1+pp2.*qq_bw./(pp2+qq_bw-2.*pp2.*qq_bw);
bwtemp3=1+pp3.*qq_bw./(pp3+qq_bw-2.*pp3.*qq_bw);
bwtemp4=1+pp4.*qq_bw./(pp4+qq_bw-2.*pp4.*qq_bw);
bwtemp5=1+pp5.*qq_bw./(pp5+qq_bw-2.*pp5.*qq_bw);
%i=0
P0j11=qq_bw;   %proc
P0j0j=1-qq_bw; %no proc
%i=1
P1121=qq_bw.*bwtemp1.*(1-pp1); %proc
P110j=pp1.*bwtemp1.*(1-qq_bw); %parry
P1112=(1-qq_bw).*(1-pp1);      %no proc
P1221=qq_bw.*bwtemp1.*(1-pp1);      %proc
P120j=pp1.*bwtemp1.*(1-qq_bw);      %parry
P1213=(1-qq_bw).*(1-pp1);           %no proc
P1321=qq_bw.*bwtemp1.*(1-pp1); %proc
P130j=pp1.*bwtemp1.*(1-qq_bw); %parry
P1314=(1-qq_bw).*(1-pp1);      %no proc
P1421=qq_bw.*bwtemp1.*(1-pp1);      %proc
P140j=pp1.*bwtemp1.*(1-qq_bw);      %parry
P1415=(1-qq_bw).*(1-pp1);           %no proc
P1521=qq_bw.*bwtemp1.*(1-pp1); %proc
P150j=pp1.*bwtemp1.*(1-qq_bw); %parry
P1516=(1-qq_bw).*(1-pp1);      %no proc
P1621=qq_bw.*bwtemp1.*(1-pp1);      %proc
P160j=pp1.*bwtemp1.*(1-qq_bw);      %parry
P1617=(1-qq_bw).*(1-pp1);           %no proc
P1721=qq_bw.*bwtemp1.*(1-pp1); %proc
P170j=pp1.*bwtemp1.*(1-qq_bw); %parry
P1718=(1-qq_bw).*(1-pp1);      %no proc
P1821=qq_bw.*bwtemp1.*(1-pp1);      %proc
P180j=1-qq_bw.*bwtemp1.*(1-pp1);    %parry OR no proc
%i=2
P2131=qq_bw.*bwtemp2.*(1-pp2); %proc
P210j=pp2.*bwtemp2.*(1-qq_bw); %parry
P2122=(1-qq_bw).*(1-pp2);      %no proc
P2231=qq_bw.*bwtemp2.*(1-pp2);      %proc
P220j=pp2.*bwtemp2.*(1-qq_bw);      %parry
P2223=(1-qq_bw).*(1-pp2);           %no proc
P2331=qq_bw.*bwtemp2.*(1-pp2); %proc
P230j=pp2.*bwtemp2.*(1-qq_bw); %parry
P2324=(1-qq_bw).*(1-pp2);      %no proc
P2431=qq_bw.*bwtemp2.*(1-pp2);      %proc
P240j=pp2.*bwtemp2.*(1-qq_bw);      %parry
P2425=(1-qq_bw).*(1-pp2);           %no proc
P2531=qq_bw.*bwtemp2.*(1-pp2); %proc
P250j=pp2.*bwtemp2.*(1-qq_bw); %parry
P2526=(1-qq_bw).*(1-pp2);      %no proc
P2631=qq_bw.*bwtemp2.*(1-pp2);      %proc
P260j=pp2.*bwtemp2.*(1-qq_bw);      %parry
P2627=(1-qq_bw).*(1-pp2);           %no proc
P2731=qq_bw.*bwtemp2.*(1-pp2); %proc
P270j=pp2.*bwtemp2.*(1-qq_bw); %parry
P2728=(1-qq_bw).*(1-pp2);      %no proc
P2831=qq_bw.*bwtemp2.*(1-pp2);      %proc
P280j=1-qq_bw.*bwtemp2.*(1-pp2);    %parry OR no proc
%i=3
P3141=qq_bw.*bwtemp3.*(1-pp3); %proc
P310j=pp3.*bwtemp3.*(1-qq_bw); %parry
P3132=(1-qq_bw).*(1-pp3);      %no proc
P3241=qq_bw.*bwtemp3.*(1-pp3);      %proc
P320j=pp3.*bwtemp3.*(1-qq_bw);      %parry
P3233=(1-qq_bw).*(1-pp3);           %no proc
P3341=qq_bw.*bwtemp3.*(1-pp3); %proc
P330j=pp3.*bwtemp3.*(1-qq_bw); %parry
P3334=(1-qq_bw).*(1-pp3);      %no proc
P3441=qq_bw.*bwtemp3.*(1-pp3);      %proc
P340j=pp3.*bwtemp3.*(1-qq_bw);      %parry
P3435=(1-qq_bw).*(1-pp3);           %no proc
P3541=qq_bw.*bwtemp3.*(1-pp3); %proc
P350j=pp3.*bwtemp3.*(1-qq_bw); %parry
P3536=(1-qq_bw).*(1-pp3);      %no proc
P3641=qq_bw.*bwtemp3.*(1-pp3);      %proc
P360j=pp3.*bwtemp3.*(1-qq_bw);      %parry
P3637=(1-qq_bw).*(1-pp3);           %no proc
P3741=qq_bw.*bwtemp3.*(1-pp3); %proc
P370j=pp3.*bwtemp3.*(1-qq_bw); %parry
P3738=(1-qq_bw).*(1-pp3);      %no proc
P3841=qq_bw.*bwtemp3.*(1-pp3);      %proc
P380j=1-qq_bw.*bwtemp3.*(1-pp3);    %parry OR no proc
%i=4
P4151=qq_bw.*bwtemp4.*(1-pp4); %proc
P410j=pp4.*bwtemp4.*(1-qq_bw); %parry
P4142=(1-qq_bw).*(1-pp4);      %no proc
P4251=qq_bw.*bwtemp4.*(1-pp4);      %proc
P420j=pp4.*bwtemp4.*(1-qq_bw);      %parry
P4243=(1-qq_bw).*(1-pp4);           %no proc
P4351=qq_bw.*bwtemp4.*(1-pp4); %proc
P430j=pp4.*bwtemp4.*(1-qq_bw); %parry
P4344=(1-qq_bw).*(1-pp4);      %no proc
P4451=qq_bw.*bwtemp4.*(1-pp4);      %proc
P440j=pp4.*bwtemp4.*(1-qq_bw);      %parry
P4445=(1-qq_bw).*(1-pp4);           %no proc
P4551=qq_bw.*bwtemp4.*(1-pp4); %proc
P450j=pp4.*bwtemp4.*(1-qq_bw); %parry
P4546=(1-qq_bw).*(1-pp4);      %no proc
P4651=qq_bw.*bwtemp4.*(1-pp4);      %proc
P460j=pp4.*bwtemp4.*(1-qq_bw);      %parry
P4647=(1-qq_bw).*(1-pp4);           %no proc
P4751=qq_bw.*bwtemp4.*(1-pp4); %proc
P470j=pp4.*bwtemp4.*(1-qq_bw); %parry
P4748=(1-qq_bw).*(1-pp4);      %no proc
P4851=qq_bw.*bwtemp4.*(1-pp4);      %proc
P480j=1-qq_bw.*bwtemp4.*(1-pp4);    %parry OR no proc
%i=5
P5151=qq_bw.*bwtemp5.*(1-pp5); %proc
P510j=pp5.*bwtemp5.*(1-qq_bw); %parry
P5152=(1-qq_bw).*(1-pp5);      %no proc
P5251=qq_bw.*bwtemp5.*(1-pp5);      %proc
P520j=pp5.*bwtemp5.*(1-qq_bw);      %parry
P5253=(1-qq_bw).*(1-pp5);           %no proc
P5351=qq_bw.*bwtemp5.*(1-pp5); %proc
P530j=pp5.*bwtemp5.*(1-qq_bw); %parry
P5354=(1-qq_bw).*(1-pp5);      %no proc
P5451=qq_bw.*bwtemp5.*(1-pp5);      %proc
P540j=pp5.*bwtemp5.*(1-qq_bw);      %parry
P5455=(1-qq_bw).*(1-pp5);           %no proc
P5551=qq_bw.*bwtemp5.*(1-pp5); %proc
P550j=pp5.*bwtemp5.*(1-qq_bw); %parry
P5556=(1-qq_bw).*(1-pp5);      %no proc
P5651=qq_bw.*bwtemp5.*(1-pp5);      %proc
P560j=pp5.*bwtemp5.*(1-qq_bw);      %parry
P5657=(1-qq_bw).*(1-pp5);           %no proc
P5751=qq_bw.*bwtemp5.*(1-pp5); %proc
P570j=pp5.*bwtemp5.*(1-qq_bw); %parry
P5758=(1-qq_bw).*(1-pp5);      %no proc
P5851=qq_bw.*bwtemp5.*(1-pp5);      %proc
P580j=1-qq_bw.*bwtemp5.*(1-pp5);    %parry OR no proc


%transition matrix of the BW system
TM_bw=[P0j0j P0j11     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0;
       P110j     0 P1112     0     0     0     0     0     0 P1121     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0;
       P120j     0     0 P1213     0     0     0     0     0 P1221     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0;
       P130j     0     0     0 P1314     0     0     0     0 P1321     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0;
       P140j     0     0     0     0 P1415     0     0     0 P1421     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0;
       P150j     0     0     0     0     0 P1516     0     0 P1521     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0;
       P160j     0     0     0     0     0     0 P1617     0 P1621     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0;
       P170j     0     0     0     0     0     0     0 P1718 P1721     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0;
       P180j     0     0     0     0     0     0     0     0 P1821     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0;
       P210j     0     0     0     0     0     0     0     0     0 P2122     0     0     0     0     0     0 P2131     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0;
       P220j     0     0     0     0     0     0     0     0     0     0 P2223     0     0     0     0     0 P2231     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0;
       P230j     0     0     0     0     0     0     0     0     0     0     0 P2324     0     0     0     0 P2331     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0;
       P240j     0     0     0     0     0     0     0     0     0     0     0     0 P2425     0     0     0 P2431     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0;
       P250j     0     0     0     0     0     0     0     0     0     0     0     0     0 P2526     0     0 P2531     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0;
       P260j     0     0     0     0     0     0     0     0     0     0     0     0     0     0 P2627     0 P2631     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0;
       P270j     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0 P2728 P2731     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0;
       P280j     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0 P2831     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0;
       P310j     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0 P3132     0     0     0     0     0     0 P3141     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0;
       P320j     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0 P3233     0     0     0     0     0 P3241     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0;
       P330j     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0 P3334     0     0     0     0 P3341     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0;
       P340j     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0 P3435     0     0     0 P3441     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0;
       P350j     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0 P3536     0     0 P3541     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0;
       P360j     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0 P3637     0 P3641     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0;
       P370j     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0 P3738 P3741     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0;
       P380j     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0 P3841     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0;
       P410j     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0 P4142     0     0     0     0     0     0 P4151     0     0     0     0     0     0     0;
       P420j     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0 P4243     0     0     0     0     0 P4251     0     0     0     0     0     0     0;
       P430j     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0 P4344     0     0     0     0 P4351     0     0     0     0     0     0     0;
       P440j     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0 P4445     0     0     0 P4451     0     0     0     0     0     0     0;
       P450j     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0 P4546     0     0 P4551     0     0     0     0     0     0     0;
       P460j     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0 P4647     0 P4651     0     0     0     0     0     0     0;
       P470j     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0 P4748 P4751     0     0     0     0     0     0     0;
       P480j     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0 P4851     0     0     0     0     0     0     0;
       P510j     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0 P5151 P5152     0     0     0     0     0     0;
       P520j     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0 P5251     0 P5253     0     0     0     0     0;
       P530j     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0 P5351     0     0 P5354     0     0     0     0;
       P540j     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0 P5451     0     0     0 P5455     0     0     0;
       P550j     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0 P5551     0     0     0     0 P5556     0     0;
       P560j     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0 P5651     0     0     0     0     0 P5657     0;
       P570j     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0 P5751     0     0     0     0     0     0 P5758;
       P580j     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0 P5851     0     0     0     0     0     0     0];
       
       
%output of the BW system
DD_bw=TM_bw^100;                               %distribution density
bw_uptime=DD_bw(1,:);                          %distribution of i-th states
bw_global=1-DD_bw(1,1);                        %global uptime (at least one stack up)
bw_stacks=(sum(bw_uptime(2:9)).*1 + ...
    sum(bw_uptime(10:17)).*2 + ...
    sum(bw_uptime(18:25)).*3 + ...
    sum(bw_uptime(26:33)).*4 + ...
    sum(bw_uptime(34:41)).*5) ...
    ./bw_global;                               %average number of stacks (at least one up)
bw_parry=parry_track(1).*bw_uptime(1) + ...
    parry_track(2).*sum(bw_uptime(2:9)) + ...
    parry_track(3).*sum(bw_uptime(10:17)) + ...
    parry_track(4).*sum(bw_uptime(18:25)) + ...
    parry_track(5).*sum(bw_uptime(26:33)) + ...
    parry_track(6).*sum(bw_uptime(34:41)) ...
    -parry_track(1);                           %average parry gain, post-DR
bw_dpps=(sum(bw_uptime(2:9)).*1.*P110j + ...
    sum(bw_uptime(10:17)).*2.*P210j + ...
    sum(bw_uptime(18:25)).*3.*P310j + ...
    sum(bw_uptime(26:33)).*4.*P410j + ...
    sum(bw_uptime(34:41)).*5.*P510j) ...
    ./(10./8);                                 %average number of damage procs
bw_dps=bw_dpps.*700 ...                                 %inherent
    .*(OHWS.*Crusade.*GoSU) ...                         %talents
    .*(SanctRet.*SavCom) ...                            %buffs/debuffs
    .*(1+(phcrit_multiplier-1).*physical_crit./100) ... %crit
    .*(1-boss_DR);                                      %physical damage reduction


%output of the goose system
goose_dodge=dodge_track(1).*(1-qq_goose) + ...
    dodge_track(2).*qq_goose + ...
    -dodge_track(1);                           %average dodge gain, post-DR
goose_haste=qq_goose.*2;                       %average melee haste
goose_agi=qq_goose.*120;                       %average agility gain

Disclaimer - it's an old (january) version, oversimplified for debugging purposes. It is coded only for SoV as input. Rough around the edges but it works.


Reference&Review
The previous attempts of estimating the avoidance/damage output of BW (either deterministic, either Monte-Carlo sims) are a good starting point (Theck, warriors on EJ and the subsequent posts). The current approach tries to solve most of their shortcomings. As for a real-world review, it comes within 5% of Treeofmana's testing session (the WoL parse is expired; 10.9% global uptime, ~40 mins).


Numbers
Input : 6/9 with SoV, V glyph, 53/18 0V3C, default gear set. The numbers cover the more subtle aspects like parryhaste, dynamic Redoubt, LS haste, average avoidance DR.
Code: Select all
BW
1.0 boss_base_swing, PH off : 0.38%, 21/31 (post-DR avg. avoidance, DPS/TPS)
1.5, off :                    0.47%, 18/27
2.0, on :                     0.47%, 17/25


BW vs Mongoose vs 26 Agi (1.5, off)
bw :                          0.47%, 18/27
26 agi :                      0.29%, 12/29
goose :                       0.51%, 33/73


BW in ICC (1.0, off), scaling with gear
def. hit/exp -> softcaps :    0.01%, 01/01
def. swing -> 2.6 :           0.10%, 06/10


BW/Mongoose in ICC, scaling with avoidance
739/198 dodge/parry
bw :                          0.42%, 22/31
goose :                       0.50%, 34/75
639/298 (default)
bw :                          0.38%, 21/31
goose :                       0.52%, 34/75
539/398
bw :                          0.34%, 21/31
goose :                       0.54%, 34/75



Credits
tlitp wrote:
theckhd wrote:As much fun as that sounds, I took the easy way out. Rather than seek an analytical solution, I wrote a script to simulate a limited combat environment.

Pussy.

Joking aside, thanks to Theck/Aldriana (theoretical support, brainstorming) and all the people who offered assistance with the testing sessions.
Last edited by tlitp on Wed Apr 21, 2010 1:14 am, edited 1 time in total.
User avatar
tlitp
 
Posts: 556
Joined: Mon Jul 27, 2009 3:25 pm

Re: Blade Ward, Analytical Model

Postby Grehn|Skipjack » Tue Apr 20, 2010 6:37 pm

I need a Theck's Moron Explanation.
Image
The Seeker.
User avatar
Grehn|Skipjack
Maintankadonor
 
Posts: 4529
Joined: Tue May 27, 2008 8:53 am
Location: Malorne

Re: Blade Ward, Analytical Model

Postby Marblehead » Tue Apr 20, 2010 11:31 pm

TL;DR: Mongoose > Blade Ward , for both avoidance and threat
Image
Life is not difficult, people are.
User avatar
Marblehead
 
Posts: 202
Joined: Sun Aug 02, 2009 9:28 pm
Location: Bloodhoof (EU)

Re: Blade Ward, Analytical Model

Postby tlitp » Wed Apr 21, 2010 10:03 am

Grehn|Skipjack wrote:I need a Theck's Moron Explanation.

Similar to Theck's MC sim, the analytical model gives estimates for mean stack size/average avoidance gain/average DPS/TPS output. Do you want a more reader-friendly explanation of the math behind it ? The OP was written, admittedly, having developers/theorycrafters in mind.

Marblehead wrote:TL;DR: Mongoose > Blade Ward , for both avoidance and threat

Not really. Your conclusion is an oversimplification.

On the AoE front, Mongoose is indeed the undisputed performer. Blade Ward's less-than-stellar avoidance output isn't determined by the drop in global uptime (which is fairly minor), but the shift in the stationary distribution. The drop in the mean stack size overshadows the drop in global uptime.

On the single-target front, the contrast between them isn't that apparent. Mongoose does offer, consistently, a better output (especially in TPS) - it's the avoidance part, here the things can get messy. Depending on both incoming attack rate and the avoidance distribution (dodge/parry ratio), Blade Ward can (and does) outmatch its rival.

Moreover, finally having good estimates for both of them allows us to see where Blizzard "screwed up" :
  1. they've gone a bit overboard with the stacking mechanics. BW should have been 4-stack, whilst preserving the maximum of 1000 parry rating.
  2. the damage proc should have been a close-range (5-10 yds) AoE effect, much like TAiaJ.
  3. the damage proc should also have been more potent. An average of 700/stack base damage isn't nearly enough to keep pace with Mongoose - it needs 1000/stack to match at least the DPS output (paladins are obviously disadvantaged, as the proc is physical damage)
  4. BW was obviously "left behind", as soon the design philosophy of the encounters was shifted to having base swing timers of 1 second. Bluntly put, they've simply forgotten about it.
All things considered, BW is a very interesting option for a weapon enchant. It's a pity that it has been somewhat ignored by both developers and players.
User avatar
tlitp
 
Posts: 556
Joined: Mon Jul 27, 2009 3:25 pm

Re: Blade Ward, Analytical Model

Postby Marblehead » Wed Apr 21, 2010 10:52 am

tlitp wrote:Not really. Your conclusion is an oversimplification.

On the AoE front, Mongoose is indeed the undisputed performer. Blade Ward's less-than-stellar avoidance output isn't determined by the drop in global uptime (which is fairly minor), but the shift in the stationary distribution. The drop in the mean stack size overshadows the drop in global uptime.

On the single-target front, the contrast between them isn't that apparent. Mongoose does offer, consistently, a better output (especially in TPS) - it's the avoidance part, here the things can get messy. Depending on both incoming attack rate and the avoidance distribution (dodge/parry ratio), Blade Ward can (and does) outmatch its rival.

I don't have any doubt that your deductions are solid.

My conclusion, though, came from the fact that in the "numbers" section of your post, if I'm not mistaken, there isn't any scenario where BW outmatches Mongoose.
Image
Life is not difficult, people are.
User avatar
Marblehead
 
Posts: 202
Joined: Sun Aug 02, 2009 9:28 pm
Location: Bloodhoof (EU)

Re: Blade Ward, Analytical Model

Postby theckhd » Wed Apr 21, 2010 12:07 pm

tlitp wrote:On the single-target front, the contrast between them isn't that apparent. Mongoose does offer, consistently, a better output (especially in TPS) - it's the avoidance part, here the things can get messy. Depending on both incoming attack rate and the avoidance distribution (dodge/parry ratio), Blade Ward can (and does) outmatch its rival.

However, unless I'm misreading the ICC results, that would only occur for a 1.5-speed or slower boss in a high-dodge, low-parry gear set-up. The latter especially should be fairly unlikely in ICC gear.

Glad to see our density matrix discussions come to fruition, in any event. It's always nice to see practical applications of quantum mechanics. :P
"Theck, Bringer of Numbers and Pounding Headaches," courtesy of Grehn|Skipjack.
Simcraft 6.x, Call to Arms 6.0, Talent Spec & Glyph Guide 6.x, Blog: Sacred Duty
User avatar
theckhd
Moderator
 
Posts: 8003
Joined: Thu Jul 31, 2008 3:06 pm
Location: Harrisburg, PA

Re: Blade Ward, Analytical Model

Postby Awyndel » Thu Apr 22, 2010 9:35 pm

Those are some awesome calculations tbh. Nice work.

It's too bad we don't care much for avoidance atm. But who know it's always nice to have a comparison when they change things. Ofc it's always a nice challenge to model such a beast.

And let's remember mongoose gives armor.
User avatar
Awyndel
 
Posts: 672
Joined: Sat Feb 14, 2009 8:49 am
Location: The Netherlands

Re: Blade Ward, Analytical Model

Postby Syruus » Tue Apr 27, 2010 5:45 am

So where does blood draining fit in Vs. Blade Ward now? Most of the research I have seen comparing the 2 seems to have been done pre- 3.3
Syruus
 
Posts: 1
Joined: Mon Jan 04, 2010 8:40 am

Re: Blade Ward, Analytical Model

Postby Arttu » Mon May 17, 2010 3:42 pm

Even though this is my first post on the forum, I'm following the threads on it from quite some time (more or less since i started to tank on my pala), especially the weapon enchant analysis, as it brings the most questions on which enchant to pick. Anyway back on topic.

Grehn|Skipjack wrote:I need a Theck's Moron Explanation.


I kind of want a final "moron explanation" or a correction of my conclusions from the posts of tlitp, Theck and Marblehead. English isn't my native language nor do I have the head to analyze exactly the provided data (not that i'm a math dumbass, but i never had anything to do with analytical models), so I needed to read the answers a few times to understand it (in my opinion) as fully as I could.

My conclusions were:
1. In an aoe situation, like tanking a trash pack, Mongoose is by far better than BW. Both because of the dps/tps output and more consistent avoidance it provides.
2. In single target fights Mongoose stil provides a lot better dps/tps output, but BW may pull ahead of it in the terms of avoidance in some specific situations, which if i understood Theck's post right would be a boss with a swing timer of 1.5 or slower and the tank (that's us) having high dodge and low parry and because of that and the dodge debuff Mongoose is far ahead of BW in ICC encounters.

I know I probably simplified quite a lot, but i wanted an answer for a moron. If I did missinterpret anything, please correct me.
Though if I understood at least most of it right, then my question is - given that the boss swings 1.5 or slower - what dodge/parry ratio i would more or less need to have, so that BW would pull ahead of mongoose on single target fights? I know it's probably hidden somewhere in the given data, but I simply can't find it on my own.

Edit: I have a strange feeling that I mainly rewritten most of what was said in diffrent words, but that's how I find it easier to understand.
Arttu
 
Posts: 3
Joined: Mon May 17, 2010 2:29 pm
Location: Poland

Re: Blade Ward, Analytical Model

Postby tlitp » Mon May 17, 2010 9:32 pm

Arttu wrote:(...)
My conclusions were:
1. In an aoe situation, like tanking a trash pack, Mongoose is by far better than BW. Both because of the dps/tps output and more consistent avoidance it provides.
2. In single target fights Mongoose stil provides a lot better dps/tps output, but BW may pull ahead of it in the terms of avoidance in some specific situations, which if i understood Theck's post right would be a boss with a swing timer of 1.5 or slower and the tank (that's us) having high dodge and low parry and because of that and the dodge debuff Mongoose is far ahead of BW in ICC encounters.
(...)
Though if I understood at least most of it right, then my question is - given that the boss swings 1.5 or slower - what dodge/parry ratio i would more or less need to have, so that BW would pull ahead of mongoose on single target fights?

Both conclusions are correct (minor observation : Chill of the Throne doesn't matter, as it is applied after the diminishing returns are computed). As for the question, an exact answer is hard to provide. Beside dodge/parry ratio and boss swing timers, there are quite a few factors that can turn the tides either way :
- defense rating (more defense makes Blade Ward worse)
- (non-base) agility (more extra agility makes Mongoose worse)
- not only the ratio between dodge/parry, their specific values as well
- the presence of other dynamic effects (they usually provide dodge, so they weaken Mongoose)
- player's swing timer, if the boss can parryhaste (a slower weapon makes Blade Ward better, as it diminishes the parryhaste factor of the boss)

I'd hazard to give a 2:1/3:1 ratio of dodge/parry, in order to see Blade Ward having a chance against Mongoose (given the initial assumption, a boss with 1.5+ swing timer). Keep in mind that it's a very rough estimate.
User avatar
tlitp
 
Posts: 556
Joined: Mon Jul 27, 2009 3:25 pm

Re: Blade Ward, Analytical Model

Postby kirsty » Fri Jul 23, 2010 1:25 am

did you factor in the armor which mongoose gives? you wrote "average avoidance" for both, so i guess not. the dmg reduction armor provides is a really big chunk, especially with chill of the throne. i believe this gives mongoose the edge to be in all cases better than bw. (or lets say, in all realistically cases. tell me if i am wrong, and show me an equipment which in fact favors bw for a specific boss)

on a side note: why does everyone keep forgetting about the eh part that agility gives. the "get the hell out of dodge" does not factor it in, and you did not too. i know its a bit fishy to calculate the exact eh part, and that mongoose is not really valid to be countet as eh since its a procc, but everyone keeps just saying "oh, and also it gives a bit eh". but for me, this is the factor that makes agility even outside icc better than everything else, even though it has slightly less dmg reduction.

edit: even though i dont think you made that mistake, is blessing of kings in your calculation somehow? or did you take the base 120 agi.
kirsty
 
Posts: 14
Joined: Fri Jul 23, 2010 1:11 am

Re: Blade Ward, Analytical Model

Postby Epimer » Fri Jul 23, 2010 1:53 am

kirsty wrote:on a side note: why does everyone keep forgetting about the eh part that agility gives. the "get the hell out of dodge" does not factor it in...


Yes it does. The mitigation term, M, accounts for the armour increase.
User avatar
Epimer
 
Posts: 1496
Joined: Wed Jun 18, 2008 6:54 am

Re: Blade Ward, Analytical Model

Postby kirsty » Fri Jul 23, 2010 3:03 am

i think you got me wrong there. thecks agi thread of course did factor armor in, but ONLY in terms of mitigation. what i meant is the effective health contribution. armor does, as we all know, not only reduce the damage, but also lets you take more damage until you die (without healing) and thus it increases your eh. now, theck could prove that in icc agi is indeed better than dodge for damage reduction concerns. (unless you are near or at the armor cap, and/or have unreasable high amounts of other avoid, and low amounts of dodge) but he did NOT mention anywhere that agi does also increase eh. this is only shown in very few threads i have seen so far, but there they take a look at pure armor, not agility
kirsty
 
Posts: 14
Joined: Fri Jul 23, 2010 1:11 am

Re: Blade Ward, Analytical Model

Postby kirsty » Fri Jul 23, 2010 3:08 am

oh, and by the way: due to the high uptime of mongoose, i believe that even though you cant rely on it, the effective health part still has weight. i mean, lets say mongoose is procced, then as long as the buff lasts, you can take more damage until you die. that way, eh encreases at least as long as the buff last. sure, the buff isnt always there, but it is very often, and thus can save your ass that way. (and it is actually reasonable that it does, since mongoose has a very high uptime)
kirsty
 
Posts: 14
Joined: Fri Jul 23, 2010 1:11 am

Re: Blade Ward, Analytical Model

Postby Epimer » Fri Jul 23, 2010 3:30 am

The whole reason agility gems were even considered for red sockets in the first place was because of their EH contribution. Agility gives armour and hence EH; it's implicit in the entire discussion.
User avatar
Epimer
 
Posts: 1496
Joined: Wed Jun 18, 2008 6:54 am

Next

Return to Advanced Theorycraft and Calculations

Who is online

Users browsing this forum: Exabot [Bot] and 1 guest

Who is online

In total there are 2 users online :: 1 registered, 0 hidden and 1 guest (based on users active over the past 5 minutes)
Most users ever online was 380 on Tue Oct 14, 2008 6:28 pm

Users browsing this forum: Exabot [Bot] and 1 guest