Fascinating...from my tests (an actual caster with some fallability), I was able to execute ~96% of ABar after unhasted AM (in the AB3->AM->ABar cycle) and ~71% after MBarAM->ABar. Would you mind terribly running an experiment for something ~80% combo proficiency? It would seem that AB3->AM->ABar still works fine and AB spam in short-burst situations still holds, but I would be interested in seeing the dpm and mps numbers on those.
If you can run the dev builds of Rawr I already included the new cycles and latency combo settings.
Now this may not be completely on topic and I just might be drooling too much for my own good(but hey, I'm trying).
As I understand it damage done in t, time units is generally calculated by guessing the length of the fight(which you actually don't know). But what if you instead of finding damage done/dps based on guessing the time would find the time based on damage done. This you actually do know: (boss health) - (damage done) = 0
This would of course mean you're not modelling individual dps but raid dps, which would of course be a lot bigger of a task than the previousl but my questions are simply:
1) would it be solvable?
2) advantages/disadvantages of doing it that way instead?
This is actually not a bad thought. You don't really need to model the raid dps, what you need to do is make an assumption about how much damage you are supposed to do, then optimize for least time spent achieving that damage-goal. To get a meaningful approximation, you will most likely have to consider 3-4 target damage amounts, for a 25 man fight, (2 tanks, 15 dpsers, 8 healers). If we assign the tanks to doing 5% of the boss damage, that leaves ~6.33% of the boss hp to each dps. You can then consider 3-4 scenarios, depending on your relative gear, skill and raid setup.
Doing ~5% total damage (you suck on the meters, or have other duties such as decursing).
Doing ~6.33% total damage (aka. pulling your weight)
Doing ~7.66% total damage (topping the meters)
Doing ~10% total damage (part of the raid got killed, like sapph, when one side doesn't get any cubes.)
The basic effect is that it allows you to optimize your cooldowm management, in a way that scales with your personal dps. It may also provide you with a more accurate estimate of which rotations to use, and give you "checkpoints" where you can see if you are ahead or behind the curve for an encounter and therefore need to start burning more mana, or reduce your burn rate to favor a higher total damage done.
Isn't AB>AB>Barr>AB>AB>Barr the best DPM rotation?
My theory on how to raid as an arcane mage is that there are intervals when you mana dump, doing the highest dps possible with no regard to mana, and then there are intervals when you do a DPM rotation.
At the start of the fight you want to mana dump and do the highest DPS possible, with 40% threat reduction you can pull this off as an arcane mage no problem. You want to evocate using 1 second remaining on IV and 1 second remaining on a haste potion. Then you go into a DPM rotation until your evocate and mana gem are ready again, in which case you will mana dump again.
When you have a haste level such that you get a MB proc on Barr, after your MBAM your Barr will still be on cooldown, in which case its best to just begin AB cycle again.
I'm really enjoying my PTR tests with Arcane. 17.4k Arcane Blast crits make me tickle.
P.S. I know I'm being vague, but I feel that when your haste level is so high that you can lower your global cooldown to around .6-.8 seconds, but are only allowed to go 1 second you shouldn't use an instant cast Barr, only casting and channeling at 1-1.2 seconds.
This weak in operational research class we learned a much easier way to calculate dynamic cycles.
Instead of making a transformation operator to the next step, you make a "graph" with each node being a state and each 1-directional arc being the chance to transit from that source state to the next state on the next action. In fact this was done with poisson processes, but the general WoW theorycrafting assumption is that 1 spell's cast time is << the fight duration, making the continous process a very very good approximation for the discrete process (and in fact should give the exact same results at the end since you also had to assume total time >> cast time to solve it).
Call Aij the chance to transit from i to j on the next step, we solve the following homogeneous linear equasion system:
SUMj(Aji*Pi) - SUMj(Aij*Pj) = 0 For all i.
Since the system is homogeneous you also have to set Sum(Pi)=1 and you get the ration between FFB and pyros (FFB:pyro = (P0+P1):P2 if 0 and 1 are the 2 different FFB states and 2 is the pyro state). Note that this is % of casts and not cast time.
EDIT: Fixed the equation system. The matrix itself is actually the same as the original, except now you solve a homogeneous equation system instead of looking for eigenstate of lambda=1. After properly inserting the equations matrix (along with P0+P1+P2=1) to WWW interactive multipurpose server I got the same results.
My linear algebra isn't strong enough for that, but I suppose you should be able to prove that my/his equations matrix (after all we end up solving the same equations system) is simply taking the B operator and reducing the identity operator.
To sum it all up, I'm not really saving much work here. What I think you can save, though, is assuming the eigenvalue will be 1 and you just need to find the state, which is simply solving the linear equation system. That might make solving a matrix for something like combustion (which I'd love to get solved for good) a lot more feasible, since you don't need to take the determinant. You still have to write the matrix for combustion, though.
Instead of making a transformation operator to the next step, you make a "graph" with each node being a state and each 1-directional arc being the chance to transit from that source state to the next state on the next action...
Call Aij the chance to transit from i to j on the next step...
Could you please clarify how defining Aij for every i and j in the domain is different that constructing Muphrid's transitional casting operator B? I understand how the graph can be illuminating in itself, but I fail to see how your Aij is anything but a casting operator set up in the second post.
I didn't realize that you don't lose the arcane blast debuff until the end of your channel for arcane missles, so you still get +60% damage on your arcane barrage if you use it just before the channel ends.
This weak in operational research class we learned a much easier way to calculate dynamic cycles.
Instead of making a transformation operator to the next step, you make a "graph" with each node being a state and each 1-directional arc being the chance to transit from that source state to the next state on the next action. In fact this was done with poisson processes, but the general WoW theorycrafting assumption is that 1 spell's cast time is << the fight duration, making the continous process a very very good approximation for the discrete process (and in fact should give the exact same results at the end since you also had to assume total time >> cast time to solve it).
Call Aij the chance to transit from i to j on the next step, we solve the following homogeneous linear equasion system:
Aij*Pi - Aji*Pi = 0 For all j, using Einstein notation (sum over all i values).
Since the system is homogeneous you also have to set Sum(Pi)=1 and you get the ration between FFB and pyros (FFB:pyro = (P0+P1):P2 if 0 and 1 are the 2 different FFB states and 2 is the pyro state). Note that this is % of casts and not cast time.
It was actually the idea of a graph or map of states that motivated my initial forays into this area of study. It was that which I was familiar with, and I only remembered the notion of eigenvalues and eigenstates of a transition matrix later on. What you describe sounds essentially the same (where each A_ij is an element of the matrix), although it's possible what's being done here capitalizes on the fact that the net probability flow between two basis states must be 0 for the eigenstate.
In the end, either way we get a system of linear equations, where the important parts are identifying the transition probabilities and behavior.
Edit: I merely wrote the initial operator equations in Dirac's bra-ket notation to provide an obvious connection to the mathematics of Hilbert spaces as used in quantum mechanics.
Check out my corrected post now. Basically what we save is not needing to find eigenvalues, since we know we want lambda=1. I think this might save a large amount of calculations.
On a side note, I tried making the connection between such problems to actual unitary operator with probabilities being the square of the PSIs, but that didn't go anywhere good. I couldn't even manage to find a proper casting operator when using the standard quantum mechanics formalism, since while it operates properly on |0>, |1> and |2> states, it still wouldn't (and very possibly can't, I don't know) operate properly on any normalized combination of the states.
Yeah, I usually skip the actual calculation of eigenvalues, for the reasons you mentioned. The eigenvalues other than 1 are simply irrelevant to the problem (in the post, I calculated them for thoroughness only, and it does make a good check to see that you've modeled the transitions right to ensure that 1 is an eigenvalue).
I actually banged my head quite a bit trying to make QM fit with this, and essentially, this is because we're dealing with classical probability (addition of raw probabilities) not quantum probability (addition of amplitudes, which leads to interference). And because of that, we have different normalization conditions (sum of probabilities = 1, not amplitudes squared = 1). So there is a connection, but it's not totally the same, definitely.
The real question is who can write a proper matrix for combustion. Solving it with an automatic solver should then be the easy part. Maybe there is some reasonable way to write a code to fill up that 30X30 matrix?
In practice, I would say we can eliminate some of the states. Say we start with a 45% crit chance. The possible crit chances are 55%, 65%, 75%, 85%, 95%, and 100%. More than that and we're capped by probability. Less than that is lower than our crit chance in the first place. Thus, we'd only have 21 states. Not a lot better, but progress.
Yeah basically if you don't want to use step functions or other wierd stuff, you need to assume the amount of charges after which you're capped at 100% crit.
Anyway, I think a lot of elements would be very similar. For example for all states with crit counter at 2, the next crit eliminates the cycle. For states with crit counter being 0 or 1, you stack the buff regardless of whether you crit or not.
A|0,n> = (c+10*n)|1,n+1> + (1-c-10*n)|0,n+1> unless n>nmax in which case it stays on nmax (and allow the last n to be non-interger for simplicity, that is, 10*nmax = 1-c).
A|1,n> = (c+10*n)|2,n+1> + (1-c-10*n)|1,n+1> (same limitation on n)
A|2,n> = (c+10*n)|x> + (1-c-10*n)|2,n+1> (same limitation on n)
A|x> = |x>
Since we know the maximum number of casts is roudnup(nmax-nmin)+3, we can figure out how many crits we got during that many casts, and compare it to the number of crits we would've gotten with no combustion, and then get the effective damage gained through extra crits by activating combustion once.
Be careful with modeling combustion this way. When you solve for such a system you will get a stationary distribution and the combustion process by itself will converge on the final state where all combustion crits are used. To get an accurate valuation of average combustion you would need to design the process in such a way that when the last crit is used it restarts itself.
It's definitely a problem that we don't exactly look for a "steady state" here, since the steady state is inactive combustion, unless we also model all the casts following combustions, counting how many casts have passed since combustion wore off and after that restart the process. In that case the steady state will give the effective crit chance after combustion (sum over Pi * Ci where Pi and Ci are the chances to be in state i and the chance to crit in state i, respectively). The matrix would obviously be huge, but still not complicated to fill.
Current prominent theorycraft shows spellpower significantly ahead of haste in value, though haste is indeed 2nd.
I'm getting .8 spell power = 1 haste.
Yes you are right... my mistake.
This only changes the gems though, the gear is still the same.
I put 9 spell power and 8 haste for red gems, and 16 haste for yellow gems. It should in fact be 19 spell power for red gems and 9 spell power and haste for yellow gems.
Well to be more accurate it is about the same. It is definitely not the value it had in 2.4 where int was about as good as spell power if not better. In the setup I'm using on 5 min I get 11.7 spell power = 14.77 dps, 10 int = 10.57 dps, 10 haste = 10.13 dps. At the dpm tradeoffs we have it is still better to use molten armor than mage armor and it is partially this that causes int to be slightly better. While using mage armor overall gives lower damage, in that setup haste is better than int.
Another thing to note is that the no-pyro states as well as the first state of combustion (unless you include the fact u can crit the spell that is flying the moment you cast combustion, assuming it actually eats a combustion charge) would all have an equal chance, making the massive amount of added equations something you don't actually need to solve. Just solve the actual combustion process, but when you normalize all probabilities to equal 1, you include all the (equal) probabilities of being in a no-combustion state. This makes the matrix have a reasonable size (if you use a script to fill it, that is).