The basic design of the tool is to exhaustively test every branch for the number of abilities used and the probability of that specific branch. This will assign a firm number to a damage dealing ability according to the mechanics as they are currently understood. The tool is NOT a simulator and thus will not provide an estimate - it provides exact numbers. It does this by branching at every choice where the RNG will pick a specific outcome - e.g. one branch for a Hand of Light proc on weapon swing, a second branch for no Hand of Light proc. The probability of the branch is calculated based on the mechanics - e.g. the chance that a HoL proc will occur is 8% + mastery, Art of War is 20% (when fully talented), etc.
What this tool is not
To avoid duplicating the efforts of Redcape and Exemplar, this tool will NOT calculate dps. The intent is that the usage information can be multiplied by the average damage that each ability will do for a specific gear set (these numbers could be provided by Redcape's/Exemplar's spreadsheets or could be from a direct parse) to get the total dps. The numbers could then be compared for different priority systems and/or different levels of haste, hit, expertise, and/or mastery. These four stats, priority, and talents are the only things that will affect the rotation. Specific talents and any other stats that just modify damage done (Str, crit, Pursuit of Justice talent, etc) are not modeled.
If you're interested in some of the internal details, open up the spoiler below.
This tool is a work in progress
I am posting a link to this tool mainly to get feedback, in both the mechanics department and in the programming department. Mechanics need to be verified for accurate results, somewhat obviously. Therefore, until the mechanics have been reviewed, all numbers generated from this tool should be taken with a grain of salt. For programming help the main issue is run time. Currently, a 20 second fight will calculate for 3-20 minutes depending on options selected. A 25 second fight can calculate for hours. Currently the algorithm is depth-first recursive. If I can re-implement the inner loop to be a breadth-first recursive I may be able to prune certain branches (e.g. branch 1 has Judge-no DP + HW-DP, branch 2 has Judge-DP + HW-no DP so the end result is 1 Holy Power, Judge and HW on CD for both branches so prune one and double the probability or something similar). Another idea to help with the calculation speed is to re-implement the system in a faster language, such as C/C++. However a faster language (as opposed to improving the algorithm) might not necessarily help much in the long run, since, e.g. halving the time it takes to run the inner loop isn't going to amount to much when a 300 sec fight is currently estimated to take billions of years to complete.
Example of how the tool could be used
Times greater than about 25 seconds can take hours of calculation time, but by happy coincidence the duration of AW and Zealotry is 20 seconds. So, I was able to compile a table of AW vs Zealotry vs AW+Zealotry. The priority system used was TV (3 HP) -> CS -> TV (HoL) -> J -> HoW -> Exo -> HW -> Cons, with the two different priority systems. One model is where a filler is used only if there is enough time left for the GCD before CS comes off CD (filler_wait=TRUE). The filler_wait=FALSE model is where a filler is used whenever it is off CD regardless of how much time there is before the next CS.
2010-12-16: removed out-dated data tables. Fixed a major bug where Hammer of Wrath effectively had no cooldown. Added several reporting options to the accumulator class. Added different priority systems. Added a ret_rot_no_comments.py to the bundle - this demonstrates iteration through priorities.
2010-12-09: another bugfix, uploaded new files (including accumulator.py) - results are now consistent. Docs need cleanup.
2010-12-07: bugfix, not uploaded (still some inconsistencies I need to track down)
2010-12-05: updated links & added info about AW
2010-12-03: original post