Results 1 to 10 of 2365

Hybrid View

  1. #1
    Player
    Kenji1134's Avatar
    Join Date
    Mar 2011
    Posts
    666
    Character
    Aleksandr Deicide
    World
    Cactuar
    Main Class
    Marauder Lv 70
    *Incoming Wall-o-Text*

    For those of you who have access to MATLAB, or probably any decent code compiler, here is the code I have been using to estimate rotation potency.
    Keep in mind this is not dps, this is simply the overall potency output over a period of time, going off the assumption that all spells have "roughly" the same % scaling from stats (ie. Fire 1 goes up by 2%, Blizz 3 goes up by 2%), and that all spells have the same crit rate.

    *MATLAB code* - Note: The Firestarter proc use logic is still a bit rough. Feel free to improve upon it.

    clc;
    F1 = 270;
    F3 = 396;
    F3UI = 154;
    B3AF = 154;
    T2 = 14; %Estimating at 14 pps
    SMana = 5; %Starting Mana: 4 for under 251 pie, 5 for over
    rng('shuffle');
    Time = 0; %Total Time Elapsed
    TPot = 0; %Total Potency
    Loops = 1000000; %Number of iterations <- Important!!!
    STPot = 0; %Short Potency for this loop
    STime = 0; %Short Time spend in this loop
    Z = zeros(1, Loops); %Array to hold resulting PPS values for each loop
    Next = 0; %Are we casting the next Fire 1?
    Firestarter = 0; %Do we have a Firestarter proc up?

    for s = 0: 1: Loops
    STPot = 0; %Reset short potency
    STime = 0; % Reset short time
    TPot = TPot + 308; %Regen Phase (Thunder counted later)
    STPot = STPot + 308; %Regen Phase
    Time = Time + 8; %Time for Regen Phase
    STime = STime + 8; %Time for Regen Phase
    Mana = SMana; %Reset Mana to full
    Next = 0;
    while Mana > 0
    TPot = TPot + F1; %Cast Fire 1
    STPot = STPot + F1; %Cast Fire 1
    Time = Time + 2.5; %1 GCD for Fire 1
    STime = STime + 2.5; %1 GCD for Fire 1
    Mana = Mana - 1; %Cast 1 spell
    if rand(1) <= 0.6
    Firestarter = 1;
    end
    if (Firestarter == 1 && Next == 1) %Have proc AND casted next Fire1
    TPot = TPot + F3; %Cast Fire 3
    STPot = STPot + F3; %Cast Fire 3
    Time = Time + 2.5; %1 GCD for Instant Fire 3
    STime = STime + 2.5; %1 GCD for Instant Fire 3
    Next = 0;
    Firestarter = 0;
    else
    Next = 1;
    end
    end
    %Now we calculate the effect of Thunder 2
    if STime >= 21
    TPot = TPot + 295; %Full Thunder 2 Duration
    STPot = STPot + 295; %Full Thunder 2 Duration
    else
    TPot = TPot + 14*STime; %Partial Thunder 2 Duration
    STPot = STPot + 14*STime; %Partial Thunder 2 Duration
    end
    Z(s+1)=STPot/STime; %Update array with PPS for this loop
    end
    disp('5 Fire 1 Method')
    fprintf('PPS = %f , STD = %f, Min = %f, Max = %f\n',TPot/Time,std(Z),min(Z),max(Z))

    Time = 0;
    TPot = 0;

    for s = 0: 1: Loops
    STPot = 0; %Reset short potency
    STime = 0; % Reset short time
    TPot = TPot + 308; %Regen Phase
    STPot = STPot + 308; %Regen Phase
    Time = Time + 8; %Time for Regen Phase
    STime = STime + 8; %Time for Regen Phase
    Mana = SMana; %Reset Mana to full
    TPot = TPot + F3; %Quick-Cast Fire 3
    STPot = STPot + F3; %Quick-Cast Fire 3
    Time = Time + 2.5; %1 GCD for Quick-Cast Fire 3
    STime = STime + 2.5; %1 GCD for Quick-Cast Fire 3
    Mana = Mana - 2; %Cast equivalent of 2 spells
    while Mana > 0
    TPot = TPot + F1; %Cast Fire 1
    STPot = STPot + F1; %Cast Fire 1
    Time = Time + 2.5; %1 GCD for Fire 1
    STime = STime + 2.5; %1 GCD for Fire 1
    Mana = Mana - 1; %Cast 1 spell
    if rand(1) <= 0.6
    Firestarter = 1;
    end
    if (Firestarter == 1 && Next == 1) %Have proc AND casted next Fire1
    TPot = TPot + F3; %Cast Fire 3
    STPot = STPot + F3; %Cast Fire 3
    Time = Time + 2.5; %1 GCD for Instant Fire 3
    STime = STime + 2.5; %1 GCD for Instant Fire 3
    Next = 0;
    Firestarter = 0;
    else
    Next = 1;
    end
    end
    %Now we calculate the effect of Thunder 2
    if STime >= 21
    TPot = TPot + 295; %Full Thunder 2 Duration
    STPot = STPot + 295; %Full Thunder 2 Duration
    else
    TPot = TPot + 14*STime; %Partial Thunder 2 Duration
    STPot = STPot + 14*STime; %Partial Thunder 2 Duration
    end
    Z(s+1)=STPot/STime; %Update array with PPS for this loop
    end
    format COMPACT
    disp('F3 + 3 Fire 1 Method')
    fprintf('PPS = %f , STD = %f, Min = %f, Max = %f\n\n',TPot/Time,std(Z),min(Z),max(Z))

    *end code*

    So we set the potency of our abilities as a reference. Start with a regen phase of Blizz 3, Thunder 2, and Fire 3, taking 8 seconds, and outputting 308 potency while setting up Thunder 2.
    Then we start spamcasting Fire1.
    After every Fire1, we try to get a Firestarter proc. If we did get a proc, we note that we have one. Regardless of whether we got a proc, we cast the next Fire1, and note that we are casting the next one.
    Then we return to the actual casting sequence of Fire1, retry for Firestarter, but now since we cast a 2nd Fire 1, and have a Firestarter proc banked, we can cast Fire 3.

    Once we're out of mana for Fire 1's, we look at hold long it's been since we cast Thunder 2, averaging it to 14 PPS, and factoring in the 8 second regen period beforehand... Then back to the top.

    This sequence is run 1 million times to have reliable averaging.
    (0)
    Last edited by Kenji1134; 11-05-2013 at 10:43 PM.

  2. #2
    Player
    Sleigh's Avatar
    Join Date
    Sep 2013
    Posts
    1,563
    Character
    Philia Felice
    World
    Gilgamesh
    Main Class
    Thaumaturge Lv 70
    Quote Originally Posted by Kenji1134 View Post
    *Incoming Wall-o-Text*
    What does your code have to say about Thunder I and Thunder III when applied?
    (0)

  3. #3
    Player
    Kenji1134's Avatar
    Join Date
    Mar 2011
    Posts
    666
    Character
    Aleksandr Deicide
    World
    Cactuar
    Main Class
    Marauder Lv 70
    Mmm... nothing.
    The code uses Thunder 2 because... I generally use Thunder 2. =)
    Thunder 3 isnt really worth it...
    With 5 Fire1's, your longest rotation will be F1-F1-F3-F1-F1-F3-F1-B3-T3-F3, which is a total of 26 seconds, versus Thunder 3's 24 second duration.
    Your shortest rotation is 5-F1s with no Firestarter procs, + B3-T3-F3 which is 21 seconds. So at best you exceed T3's dot by 2s, at worst you lose 3s of the dot.
    With T2, your longest cycle is 25.5s, and shortest is 20.5s, so you will almost always get the full duration of T2.
    (0)
    Last edited by Kenji1134; 11-06-2013 at 09:49 AM.

  4. #4
    Player
    PuroStrider's Avatar
    Join Date
    Aug 2013
    Posts
    229
    Character
    Puro Strider
    World
    Cactuar
    Main Class
    Lv 0
    Gear Page Updated with Turn 5 gear comparison

    DPS Calculator is also updated and ready to rock!

    --

    @Kuroyasha - I know that feel bud. Hopefully they'll release the item fusing feature soon where you could fuse gear to keep stats/appearance of one another.

    @Kenji1134 - I wish I'd gone with computer science route in college. I was born for these kind of things for sure. Maybe I'll get into it once I retire in ~40 years xD. How does MATLAB compare to my raw data by the way? (That is if you can adjust it to match my awesome data) ^^
    (0)

  5. #5
    Player
    Kenji1134's Avatar
    Join Date
    Mar 2011
    Posts
    666
    Character
    Aleksandr Deicide
    World
    Cactuar
    Main Class
    Marauder Lv 70
    PuroStrider,

    Hmm... guess Ill poke around in your formulas for a bit, see what I can come up with.
    Though I imagine your results are averaged over a large set, so your formulas dont have any variance in them... though I suppose that with 1,000,000 cycles, variance is moot...

    Hmm... excel formulas look like holy hell man!
    Have you tried looking at the value of 1 potency... or maybe 100 potency? Perhaps the entire reason the game uses potency in the first place is to do 1 generic calculation, get a "potency value", and then apply it to whatever you happen to be doing?
    If nothing else it would greatly simplify the calculations.

    Poking around in your math some more, namely for Fire 1 vs Fire 3... 396/270 is ~1.466. For various values of WD/int/det, the ratio between your calcs of F3/F1 is within 1% of the potency ratio. That may be sufficient justification to reduce your F3 equation... cause I like big numbers and bigger explosions... down into a baseline potency calculation... then multiply my results by it. =)
    (0)
    Last edited by Kenji1134; 11-06-2013 at 11:20 AM.

  6. #6
    Player
    Kenji1134's Avatar
    Join Date
    Mar 2011
    Posts
    666
    Character
    Aleksandr Deicide
    World
    Cactuar
    Main Class
    Marauder Lv 70
    *Dropping The Math-Text Bomb*

    Code Printouts: (Using my stats)
    Intelligence = 423
    Determination = 258
    Weapon Damage = 66
    Critical Hit Rate = 395
    Spell Speed = 463
    Potency =
    2.4730
    5 Fire 1 Method
    PPS = 107.111960 , STD = 1.851122, Min = 94.878049, Max = 107.647059
    DPS = 264.887842 , STD = 4.577825, Min = 234.633384, Max = 266.211142
    F3 + 3 Fire 1 Method
    PPS = 109.178302 , STD = 3.700309, Min = 98.111111, Max = 113.086957
    DPS = 269.997905 , STD = 9.150862, Min = 242.628746, Max = 279.664007

    *Code* - as always, may need minor tweaking... Im an electromechanical engineer, not a programmer after all =P
    clc;
    Int = input('Intelligence = ');
    Det = input('Determination = ');
    WD = input('Weapon Damage = ');
    Crit = input('Critical Hit Rate = ');
    SPD = input('Spell Speed = ');
    %From PuroStrider's EPIC BLM spreadsheet.
    F3DMG = .382*Det+1.8*Int+7.447*WD-451.36; %And thank you Wolfram Alpha!!!
    AdjustedF3DMG = 0.000362*(Crit+2491)*(F3DMG+0.2769*SPD); %And TI-89!
    Potency = AdjustedF3DMG/396/1.097 %3rd number is a correction factor between my results and spreadsheet.
    %God your excel formulas are HUGE!!!
    F1 = 270;
    F3 = 396;
    F3UI = 154;
    B3AF = 154;
    T2 = 14; %Estimating at 14 pps
    SMana = 5; %Starting Mana: 4 for under 251 pie, 5 for over
    rng('shuffle');
    Time = 0; %Total Time Elapsed
    TPot = 0; %Total Potency
    Loops = 1000000; %Number of iterations <- Important!!!
    STPot = 0; %Short Potency for this loop
    STime = 0; %Short Time spend in this loop
    Z = zeros(1, Loops); %Array to hold resulting PPS values for each loop
    Next = 0; %Are we casting the next Fire 1?
    Firestarter = 0; %Do we have a Firestarter proc up?

    for s = 0: 1: Loops
    STPot = 0; %Reset short potency
    STime = 0; % Reset short time
    TPot = TPot + 308; %Regen Phase (Thunder counted later)
    STPot = STPot + 308; %Regen Phase
    Time = Time + 8; %Time for Regen Phase
    STime = STime + 8; %Time for Regen Phase
    Mana = SMana; %Reset Mana to full
    Next = 0;
    while Mana > 0
    TPot = TPot + F1; %Cast Fire 1
    STPot = STPot + F1; %Cast Fire 1
    Time = Time + 2.5; %1 GCD for Fire 1
    STime = STime + 2.5; %1 GCD for Fire 1
    Mana = Mana - 1; %Cast 1 spell
    if rand(1) <= 0.6
    Firestarter = 1;
    end
    if (Firestarter == 1 && Next == 1) %Have proc AND casted next Fire1
    TPot = TPot + F3; %Cast Fire 3
    STPot = STPot + F3; %Cast Fire 3
    Time = Time + 2.5; %1 GCD for Instant Fire 3
    STime = STime + 2.5; %1 GCD for Instant Fire 3
    Next = 0;
    Firestarter = 0;
    else
    Next = 1;
    end
    end
    %Now we calculate the effect of Thunder 2
    if STime >= 21
    TPot = TPot + 295; %Full Thunder 2 Duration
    STPot = STPot + 295; %Full Thunder 2 Duration
    else
    TPot = TPot + 14*STime; %Partial Thunder 2 Duration
    STPot = STPot + 14*STime; %Partial Thunder 2 Duration
    end
    Z(s+1)=STPot/STime; %Update array with PPS for this loop
    end
    disp('5 Fire 1 Method')
    fprintf('PPS = %f , STD = %f, Min = %f, Max = %f\n',TPot/Time,std(Z),min(Z),max(Z))
    fprintf('DPS = %f , STD = %f, Min = %f, Max = %f\n',TPot/Time*Potency,std(Z)*Potency,min(Z)*Potency,max(Z)*Potency)

    Time = 0;
    TPot = 0;

    for s = 0: 1: Loops
    STPot = 0; %Reset short potency
    STime = 0; % Reset short time
    TPot = TPot + 308; %Regen Phase
    STPot = STPot + 308; %Regen Phase
    Time = Time + 8; %Time for Regen Phase
    STime = STime + 8; %Time for Regen Phase
    Mana = SMana; %Reset Mana to full
    TPot = TPot + F3; %Quick-Cast Fire 3
    STPot = STPot + F3; %Quick-Cast Fire 3
    Time = Time + 2.5; %1 GCD for Quick-Cast Fire 3
    STime = STime + 2.5; %1 GCD for Quick-Cast Fire 3
    Mana = Mana - 2; %Cast equivalent of 2 spells
    while Mana > 0
    TPot = TPot + F1; %Cast Fire 1
    STPot = STPot + F1; %Cast Fire 1
    Time = Time + 2.5; %1 GCD for Fire 1
    STime = STime + 2.5; %1 GCD for Fire 1
    Mana = Mana - 1; %Cast 1 spell
    if rand(1) <= 0.6
    Firestarter = 1;
    end
    if (Firestarter == 1 && Next == 1) %Have proc AND casted next Fire1
    TPot = TPot + F3; %Cast Fire 3
    STPot = STPot + F3; %Cast Fire 3
    Time = Time + 2.5; %1 GCD for Instant Fire 3
    STime = STime + 2.5; %1 GCD for Instant Fire 3
    Next = 0;
    Firestarter = 0;
    else
    Next = 1;
    end
    end
    %Now we calculate the effect of Thunder 2
    if STime >= 21
    TPot = TPot + 295; %Full Thunder 2 Duration
    STPot = STPot + 295; %Full Thunder 2 Duration
    else
    TPot = TPot + 14*STime; %Partial Thunder 2 Duration
    STPot = STPot + 14*STime; %Partial Thunder 2 Duration
    end
    Z(s+1)=STPot/STime; %Update array with PPS for this loop
    end
    format COMPACT
    disp('F3 + 3 Fire 1 Method')
    fprintf('PPS = %f , STD = %f, Min = %f, Max = %f\n\n',TPot/Time,std(Z),min(Z),max(Z))
    fprintf('DPS = %f , STD = %f, Min = %f, Max = %f\n\n',TPot/Time*Potency,std(Z)*Potency,min(Z)*Potency,max(Z)*Potency)
    *end code*

    Um... so that's that... Though I am pretty sure I am not doing 264 dps. Really closer to 210... dunno, math is a fickle mistress.
    (0)
    Last edited by Kenji1134; 11-06-2013 at 12:44 PM.

  7. #7
    Player
    EasymodeX's Avatar
    Join Date
    Sep 2013
    Posts
    900
    Character
    Lunairetic Emx
    World
    Midgardsormr
    Main Class
    Lancer Lv 50
    Quote Originally Posted by Kenji1134 View Post
    *Dropping The Math-Text Bomb*

    5 Fire 1 Method
    PPS = 107.111960 , STD = 1.851122, Min = 94.878049, Max = 107.647059
    DPS = 264.887842 , STD = 4.577825, Min = 234.633384, Max = 266.211142

    F3 + 3 Fire 1 Method
    PPS = 109.178302 , STD = 3.700309, Min = 98.111111, Max = 113.086957
    DPS = 269.997905 , STD = 9.150862, Min = 242.628746, Max = 279.664007
    How confident are you in these results and your simulation?

    I ask because I did a similar investigation in the other thread: http://forum.square-enix.com/ffxiv/t...=1#post1501774

    With similar results from lightweight modeling.

    Curious before I go harass our BLM who doesn't read the forums .
    (0)

  8. #8
    Player
    Kenji1134's Avatar
    Join Date
    Mar 2011
    Posts
    666
    Character
    Aleksandr Deicide
    World
    Cactuar
    Main Class
    Marauder Lv 70
    Quote Originally Posted by EasymodeX View Post
    How confident are you in these results and your simulation?

    I ask because I did a similar investigation in the other thread: http://forum.square-enix.com/ffxiv/t...=1#post1501774

    With similar results from lightweight modeling.

    Curious before I go harass our BLM who doesn't read the forums .
    On that thread, your potency/gcd using the first method (no double F3 trick) was 266.6 potency/gcd.
    My numbers for the first method are typically around 107 potency/sec, on a 2.5s gcd, so 107*2.5=267.5, pretty much matches your numbers. So, it looks good.

    Overall I am pretty sure of the potency calcs/simulation/method. Though the newest addition based on Puro's spreadsheet does not "feel" quite right... yet.

    I suppose the next question becomes, IF the double F3 method is more potency... though surprisingly also more unstable (higher STD), then what is now the minimum Piety you need for the 2nd method?
    Speaking for myself, as a Highlander, I needed to put 12 points into Piety to get to 251, which obviously lowered my damage per cast by a kinda noticeable amount, ~2.5%. Offhand I believe it is 9 MP per Piety for BLM... lol, or is it 7? =P

    I guess I should also test the following situation...
    Using the 2nd method, if we wait say... 0.5, or 0.75 sec for the Fire1 to land... adding 0.75s to the cycle time, and catching that last potential Firestarter proc, would it again be a dps gain in the long run, or is it better to just queue up B3 once the last F1 goes off?
    (0)
    Last edited by Kenji1134; 11-07-2013 at 01:36 AM.

  9. #9
    Player
    PuroStrider's Avatar
    Join Date
    Aug 2013
    Posts
    229
    Character
    Puro Strider
    World
    Cactuar
    Main Class
    Lv 0
    Quote Originally Posted by Kenji1134 View Post
    Though the newest addition based on Puro's spreadsheet does not "feel" quite right... yet.
    -.-

    I'll be happy to answer any questions regarding methodology for every single value and test on my spreadsheet. I get all my data raw from the game for my calculations to get real world result instead of throwing around potency values. You can think of me as an interpreter who translates potency into real damage. ^^

    Also, when you guys are doing calculations with anything concerning subsequent casts, you have to consider casting animation delay. For instance, If you cast two Fire III in a row (3.5 sec each), your total cast time for 2 spells will actually a tad bit longer than 7.0 sec total. I have not tested the exact time for casting animation, but it's something worth mentioning.

    The Fire III + 3 Fire I method is also something I will investigate in the future after I'm done tinkering with the current Fire I x5 rotation values.
    (0)
    Last edited by PuroStrider; 11-07-2013 at 09:37 AM.