Dungeons and Dragons: Ability Score combinations

The name of the pictureThe name of the pictureThe name of the pictureClash Royale CLAN TAG#URR8PPP











up vote
6
down vote

favorite












I am trying to figure out how likely it is to roll a certain combination of 6 ability scores in Dungeons and Dragons.



edit:
Dungeons and Dragons is a tabletop role-playing game. You create a character in a fantasy world which has 6 main statistics, Strength, Dexterity, Constitution, Intelligence, Wisdom, and Charisma. Those ability scores determine the powers that a certain character can use and how strong they are.
The ability scores are rolled using 4 6-sided dice (4d6) and then using the 3 highest scores, giving you values $in [3, 18]$ for the possible values.
My goal is to compute the likelihood of getting a combination like (8, 8, 8, 8, 8, 8) or (15, 14, 13, 12, 10, 8).
/edit



I already worked out the probabilities for rolling a single stat and a question on here confirmed that I did the math right:



3: $frac11296$, 4: $frac41296$, 5: $frac101296$, 6: $frac211296$, 7: $frac381296$, 8: $frac621296$, 9: $frac911296$, 10: $frac1221296$, 11: $frac1481296$, 12: $frac1671296$, 13: $frac1721296$, 14: $frac1601296$, 15: $frac1311296$, 16: $frac941296$, 17: $frac541296$, 18: $frac211296$



Now using the same reasoning I managed to work out the probabilities of combinations based on the sum of ability scores, but only if the outcomes are equally likely. I used Python to compute the probabilities like this:



def probability_of_outcomes(outcomes, repetitions, subsum=slice(None, None, None)):
probability_dict =
sum_combinations = 0
for c in combinations_with_replacement(outcomes, repetitions):
for p in set(permutations(c, repetitions)):
s = sum(sorted(p)[subsum])
if s in probability_dict:
probability_dict[s] += 1
else:
probability_dict[s] = 1
sum_combinations += 1

return probability_dict, sum_combinations


if __name__ == "__main__":
all_comb, num_combinations_stats = probability_of_outcomes(range(1, 7) 4, subsum=slice(1, None, None))


in the same way I can compute:



abilities_comb, num_combinations_ability = probability_of_outcomes(range(3, 19) 6)


Now with the first computation I can already see that not every number is equally likely, but I am unsure where to add that probability in. Also the approach is not very elegant, as I simply try out every possible combination.



Any ideas?










share|cite|improve this question









New contributor




meetaig is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.



















  • Not everyone plays DnD, please explain in plain words what probability you're trying to compute.
    – orlp
    4 hours ago






  • 1




    You seem to be using the "roll four dice and ignore the smallest" method. Is that right?
    – MJD
    4 hours ago










  • @MJD yes that is the method I use in the first example with the subsum. But when there is None specified, the code just takes all results (which is for the second call).
    – meetaig
    4 hours ago










  • @orlp I'll edit the question
    – meetaig
    4 hours ago














up vote
6
down vote

favorite












I am trying to figure out how likely it is to roll a certain combination of 6 ability scores in Dungeons and Dragons.



edit:
Dungeons and Dragons is a tabletop role-playing game. You create a character in a fantasy world which has 6 main statistics, Strength, Dexterity, Constitution, Intelligence, Wisdom, and Charisma. Those ability scores determine the powers that a certain character can use and how strong they are.
The ability scores are rolled using 4 6-sided dice (4d6) and then using the 3 highest scores, giving you values $in [3, 18]$ for the possible values.
My goal is to compute the likelihood of getting a combination like (8, 8, 8, 8, 8, 8) or (15, 14, 13, 12, 10, 8).
/edit



I already worked out the probabilities for rolling a single stat and a question on here confirmed that I did the math right:



3: $frac11296$, 4: $frac41296$, 5: $frac101296$, 6: $frac211296$, 7: $frac381296$, 8: $frac621296$, 9: $frac911296$, 10: $frac1221296$, 11: $frac1481296$, 12: $frac1671296$, 13: $frac1721296$, 14: $frac1601296$, 15: $frac1311296$, 16: $frac941296$, 17: $frac541296$, 18: $frac211296$



Now using the same reasoning I managed to work out the probabilities of combinations based on the sum of ability scores, but only if the outcomes are equally likely. I used Python to compute the probabilities like this:



def probability_of_outcomes(outcomes, repetitions, subsum=slice(None, None, None)):
probability_dict =
sum_combinations = 0
for c in combinations_with_replacement(outcomes, repetitions):
for p in set(permutations(c, repetitions)):
s = sum(sorted(p)[subsum])
if s in probability_dict:
probability_dict[s] += 1
else:
probability_dict[s] = 1
sum_combinations += 1

return probability_dict, sum_combinations


if __name__ == "__main__":
all_comb, num_combinations_stats = probability_of_outcomes(range(1, 7) 4, subsum=slice(1, None, None))


in the same way I can compute:



abilities_comb, num_combinations_ability = probability_of_outcomes(range(3, 19) 6)


Now with the first computation I can already see that not every number is equally likely, but I am unsure where to add that probability in. Also the approach is not very elegant, as I simply try out every possible combination.



Any ideas?










share|cite|improve this question









New contributor




meetaig is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.



















  • Not everyone plays DnD, please explain in plain words what probability you're trying to compute.
    – orlp
    4 hours ago






  • 1




    You seem to be using the "roll four dice and ignore the smallest" method. Is that right?
    – MJD
    4 hours ago










  • @MJD yes that is the method I use in the first example with the subsum. But when there is None specified, the code just takes all results (which is for the second call).
    – meetaig
    4 hours ago










  • @orlp I'll edit the question
    – meetaig
    4 hours ago












up vote
6
down vote

favorite









up vote
6
down vote

favorite











I am trying to figure out how likely it is to roll a certain combination of 6 ability scores in Dungeons and Dragons.



edit:
Dungeons and Dragons is a tabletop role-playing game. You create a character in a fantasy world which has 6 main statistics, Strength, Dexterity, Constitution, Intelligence, Wisdom, and Charisma. Those ability scores determine the powers that a certain character can use and how strong they are.
The ability scores are rolled using 4 6-sided dice (4d6) and then using the 3 highest scores, giving you values $in [3, 18]$ for the possible values.
My goal is to compute the likelihood of getting a combination like (8, 8, 8, 8, 8, 8) or (15, 14, 13, 12, 10, 8).
/edit



I already worked out the probabilities for rolling a single stat and a question on here confirmed that I did the math right:



3: $frac11296$, 4: $frac41296$, 5: $frac101296$, 6: $frac211296$, 7: $frac381296$, 8: $frac621296$, 9: $frac911296$, 10: $frac1221296$, 11: $frac1481296$, 12: $frac1671296$, 13: $frac1721296$, 14: $frac1601296$, 15: $frac1311296$, 16: $frac941296$, 17: $frac541296$, 18: $frac211296$



Now using the same reasoning I managed to work out the probabilities of combinations based on the sum of ability scores, but only if the outcomes are equally likely. I used Python to compute the probabilities like this:



def probability_of_outcomes(outcomes, repetitions, subsum=slice(None, None, None)):
probability_dict =
sum_combinations = 0
for c in combinations_with_replacement(outcomes, repetitions):
for p in set(permutations(c, repetitions)):
s = sum(sorted(p)[subsum])
if s in probability_dict:
probability_dict[s] += 1
else:
probability_dict[s] = 1
sum_combinations += 1

return probability_dict, sum_combinations


if __name__ == "__main__":
all_comb, num_combinations_stats = probability_of_outcomes(range(1, 7) 4, subsum=slice(1, None, None))


in the same way I can compute:



abilities_comb, num_combinations_ability = probability_of_outcomes(range(3, 19) 6)


Now with the first computation I can already see that not every number is equally likely, but I am unsure where to add that probability in. Also the approach is not very elegant, as I simply try out every possible combination.



Any ideas?










share|cite|improve this question









New contributor




meetaig is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.











I am trying to figure out how likely it is to roll a certain combination of 6 ability scores in Dungeons and Dragons.



edit:
Dungeons and Dragons is a tabletop role-playing game. You create a character in a fantasy world which has 6 main statistics, Strength, Dexterity, Constitution, Intelligence, Wisdom, and Charisma. Those ability scores determine the powers that a certain character can use and how strong they are.
The ability scores are rolled using 4 6-sided dice (4d6) and then using the 3 highest scores, giving you values $in [3, 18]$ for the possible values.
My goal is to compute the likelihood of getting a combination like (8, 8, 8, 8, 8, 8) or (15, 14, 13, 12, 10, 8).
/edit



I already worked out the probabilities for rolling a single stat and a question on here confirmed that I did the math right:



3: $frac11296$, 4: $frac41296$, 5: $frac101296$, 6: $frac211296$, 7: $frac381296$, 8: $frac621296$, 9: $frac911296$, 10: $frac1221296$, 11: $frac1481296$, 12: $frac1671296$, 13: $frac1721296$, 14: $frac1601296$, 15: $frac1311296$, 16: $frac941296$, 17: $frac541296$, 18: $frac211296$



Now using the same reasoning I managed to work out the probabilities of combinations based on the sum of ability scores, but only if the outcomes are equally likely. I used Python to compute the probabilities like this:



def probability_of_outcomes(outcomes, repetitions, subsum=slice(None, None, None)):
probability_dict =
sum_combinations = 0
for c in combinations_with_replacement(outcomes, repetitions):
for p in set(permutations(c, repetitions)):
s = sum(sorted(p)[subsum])
if s in probability_dict:
probability_dict[s] += 1
else:
probability_dict[s] = 1
sum_combinations += 1

return probability_dict, sum_combinations


if __name__ == "__main__":
all_comb, num_combinations_stats = probability_of_outcomes(range(1, 7) 4, subsum=slice(1, None, None))


in the same way I can compute:



abilities_comb, num_combinations_ability = probability_of_outcomes(range(3, 19) 6)


Now with the first computation I can already see that not every number is equally likely, but I am unsure where to add that probability in. Also the approach is not very elegant, as I simply try out every possible combination.



Any ideas?







probability combinatorics dice






share|cite|improve this question









New contributor




meetaig is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.











share|cite|improve this question









New contributor




meetaig is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.









share|cite|improve this question




share|cite|improve this question








edited 3 hours ago









Especially Lime

19.7k22353




19.7k22353






New contributor




meetaig is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.









asked 4 hours ago









meetaig

1335




1335




New contributor




meetaig is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.





New contributor





meetaig is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.






meetaig is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.











  • Not everyone plays DnD, please explain in plain words what probability you're trying to compute.
    – orlp
    4 hours ago






  • 1




    You seem to be using the "roll four dice and ignore the smallest" method. Is that right?
    – MJD
    4 hours ago










  • @MJD yes that is the method I use in the first example with the subsum. But when there is None specified, the code just takes all results (which is for the second call).
    – meetaig
    4 hours ago










  • @orlp I'll edit the question
    – meetaig
    4 hours ago
















  • Not everyone plays DnD, please explain in plain words what probability you're trying to compute.
    – orlp
    4 hours ago






  • 1




    You seem to be using the "roll four dice and ignore the smallest" method. Is that right?
    – MJD
    4 hours ago










  • @MJD yes that is the method I use in the first example with the subsum. But when there is None specified, the code just takes all results (which is for the second call).
    – meetaig
    4 hours ago










  • @orlp I'll edit the question
    – meetaig
    4 hours ago















Not everyone plays DnD, please explain in plain words what probability you're trying to compute.
– orlp
4 hours ago




Not everyone plays DnD, please explain in plain words what probability you're trying to compute.
– orlp
4 hours ago




1




1




You seem to be using the "roll four dice and ignore the smallest" method. Is that right?
– MJD
4 hours ago




You seem to be using the "roll four dice and ignore the smallest" method. Is that right?
– MJD
4 hours ago












@MJD yes that is the method I use in the first example with the subsum. But when there is None specified, the code just takes all results (which is for the second call).
– meetaig
4 hours ago




@MJD yes that is the method I use in the first example with the subsum. But when there is None specified, the code just takes all results (which is for the second call).
– meetaig
4 hours ago












@orlp I'll edit the question
– meetaig
4 hours ago




@orlp I'll edit the question
– meetaig
4 hours ago










1 Answer
1






active

oldest

votes

















up vote
4
down vote



accepted










First order the combination, e.g. $(8, 10, 12, 13, 14, 15)$. Then calculate the exact probability of rolling this combination in this order. This calculation is simple, just multiply the probabilities of the individual rolls you calculated earlier:



$$p(8) times p(10) times p(12) times p(13) times p(14) times p(15)$$



But we're undercounting. After all, it's possible that you rolled $15$ first instead of last. So we multiply by $6!$ to account for all permutations:



$$p(8) times p(10) times p(12) times p(13) times p(14) times p(15) times 6!$$



In this case we're done, because all attributes are unique. When this isn't the case, we're now overcounting. Because in a two-dice example, if you swap the order of rolling two sixes, nothing changes.



So to finish the calculation you need to calculate the number of orderings considering duplicates.



If $a$ is the multiset of attributes, $a_1$ is the first attribute, $a_2$ the second, etc, $|a_1|$ is the number of times the first attribute occurs, and $k$ is the number of distinct attributes, the full formula is:



$$p(a) = p(a_1)^a_1p(a_2)^cdots p(a_k)^ cdot frack!!cdots$$



Note that in our above example where all attributes were distinct the denominator went away because it was simply $1! cdot 1! cdots 1! = 1$.



And in the other extreme, where the multiset only has a single element repeated, like in $(8, 8, 8, 8, 8, 8)$, we get:



$$p(8)^6cdot frac6!6! = p(8)^6$$



As expected.






share|cite|improve this answer






















    Your Answer




    StackExchange.ifUsing("editor", function ()
    return StackExchange.using("mathjaxEditing", function ()
    StackExchange.MarkdownEditor.creationCallbacks.add(function (editor, postfix)
    StackExchange.mathjaxEditing.prepareWmdForMathJax(editor, postfix, [["$", "$"], ["\\(","\\)"]]);
    );
    );
    , "mathjax-editing");

    StackExchange.ready(function()
    var channelOptions =
    tags: "".split(" "),
    id: "69"
    ;
    initTagRenderer("".split(" "), "".split(" "), channelOptions);

    StackExchange.using("externalEditor", function()
    // Have to fire editor after snippets, if snippets enabled
    if (StackExchange.settings.snippets.snippetsEnabled)
    StackExchange.using("snippets", function()
    createEditor();
    );

    else
    createEditor();

    );

    function createEditor()
    StackExchange.prepareEditor(
    heartbeatType: 'answer',
    convertImagesToLinks: true,
    noModals: false,
    showLowRepImageUploadWarning: true,
    reputationToPostImages: 10,
    bindNavPrevention: true,
    postfix: "",
    noCode: true, onDemand: true,
    discardSelector: ".discard-answer"
    ,immediatelyShowMarkdownHelp:true
    );



    );






    meetaig is a new contributor. Be nice, and check out our Code of Conduct.









     

    draft saved


    draft discarded


















    StackExchange.ready(
    function ()
    StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fmath.stackexchange.com%2fquestions%2f2939250%2fdungeons-and-dragons-ability-score-combinations%23new-answer', 'question_page');

    );

    Post as a guest






























    1 Answer
    1






    active

    oldest

    votes








    1 Answer
    1






    active

    oldest

    votes









    active

    oldest

    votes






    active

    oldest

    votes








    up vote
    4
    down vote



    accepted










    First order the combination, e.g. $(8, 10, 12, 13, 14, 15)$. Then calculate the exact probability of rolling this combination in this order. This calculation is simple, just multiply the probabilities of the individual rolls you calculated earlier:



    $$p(8) times p(10) times p(12) times p(13) times p(14) times p(15)$$



    But we're undercounting. After all, it's possible that you rolled $15$ first instead of last. So we multiply by $6!$ to account for all permutations:



    $$p(8) times p(10) times p(12) times p(13) times p(14) times p(15) times 6!$$



    In this case we're done, because all attributes are unique. When this isn't the case, we're now overcounting. Because in a two-dice example, if you swap the order of rolling two sixes, nothing changes.



    So to finish the calculation you need to calculate the number of orderings considering duplicates.



    If $a$ is the multiset of attributes, $a_1$ is the first attribute, $a_2$ the second, etc, $|a_1|$ is the number of times the first attribute occurs, and $k$ is the number of distinct attributes, the full formula is:



    $$p(a) = p(a_1)^a_1p(a_2)^cdots p(a_k)^ cdot frack!!cdots$$



    Note that in our above example where all attributes were distinct the denominator went away because it was simply $1! cdot 1! cdots 1! = 1$.



    And in the other extreme, where the multiset only has a single element repeated, like in $(8, 8, 8, 8, 8, 8)$, we get:



    $$p(8)^6cdot frac6!6! = p(8)^6$$



    As expected.






    share|cite|improve this answer


























      up vote
      4
      down vote



      accepted










      First order the combination, e.g. $(8, 10, 12, 13, 14, 15)$. Then calculate the exact probability of rolling this combination in this order. This calculation is simple, just multiply the probabilities of the individual rolls you calculated earlier:



      $$p(8) times p(10) times p(12) times p(13) times p(14) times p(15)$$



      But we're undercounting. After all, it's possible that you rolled $15$ first instead of last. So we multiply by $6!$ to account for all permutations:



      $$p(8) times p(10) times p(12) times p(13) times p(14) times p(15) times 6!$$



      In this case we're done, because all attributes are unique. When this isn't the case, we're now overcounting. Because in a two-dice example, if you swap the order of rolling two sixes, nothing changes.



      So to finish the calculation you need to calculate the number of orderings considering duplicates.



      If $a$ is the multiset of attributes, $a_1$ is the first attribute, $a_2$ the second, etc, $|a_1|$ is the number of times the first attribute occurs, and $k$ is the number of distinct attributes, the full formula is:



      $$p(a) = p(a_1)^a_1p(a_2)^cdots p(a_k)^ cdot frack!!cdots$$



      Note that in our above example where all attributes were distinct the denominator went away because it was simply $1! cdot 1! cdots 1! = 1$.



      And in the other extreme, where the multiset only has a single element repeated, like in $(8, 8, 8, 8, 8, 8)$, we get:



      $$p(8)^6cdot frac6!6! = p(8)^6$$



      As expected.






      share|cite|improve this answer
























        up vote
        4
        down vote



        accepted







        up vote
        4
        down vote



        accepted






        First order the combination, e.g. $(8, 10, 12, 13, 14, 15)$. Then calculate the exact probability of rolling this combination in this order. This calculation is simple, just multiply the probabilities of the individual rolls you calculated earlier:



        $$p(8) times p(10) times p(12) times p(13) times p(14) times p(15)$$



        But we're undercounting. After all, it's possible that you rolled $15$ first instead of last. So we multiply by $6!$ to account for all permutations:



        $$p(8) times p(10) times p(12) times p(13) times p(14) times p(15) times 6!$$



        In this case we're done, because all attributes are unique. When this isn't the case, we're now overcounting. Because in a two-dice example, if you swap the order of rolling two sixes, nothing changes.



        So to finish the calculation you need to calculate the number of orderings considering duplicates.



        If $a$ is the multiset of attributes, $a_1$ is the first attribute, $a_2$ the second, etc, $|a_1|$ is the number of times the first attribute occurs, and $k$ is the number of distinct attributes, the full formula is:



        $$p(a) = p(a_1)^a_1p(a_2)^cdots p(a_k)^ cdot frack!!cdots$$



        Note that in our above example where all attributes were distinct the denominator went away because it was simply $1! cdot 1! cdots 1! = 1$.



        And in the other extreme, where the multiset only has a single element repeated, like in $(8, 8, 8, 8, 8, 8)$, we get:



        $$p(8)^6cdot frac6!6! = p(8)^6$$



        As expected.






        share|cite|improve this answer














        First order the combination, e.g. $(8, 10, 12, 13, 14, 15)$. Then calculate the exact probability of rolling this combination in this order. This calculation is simple, just multiply the probabilities of the individual rolls you calculated earlier:



        $$p(8) times p(10) times p(12) times p(13) times p(14) times p(15)$$



        But we're undercounting. After all, it's possible that you rolled $15$ first instead of last. So we multiply by $6!$ to account for all permutations:



        $$p(8) times p(10) times p(12) times p(13) times p(14) times p(15) times 6!$$



        In this case we're done, because all attributes are unique. When this isn't the case, we're now overcounting. Because in a two-dice example, if you swap the order of rolling two sixes, nothing changes.



        So to finish the calculation you need to calculate the number of orderings considering duplicates.



        If $a$ is the multiset of attributes, $a_1$ is the first attribute, $a_2$ the second, etc, $|a_1|$ is the number of times the first attribute occurs, and $k$ is the number of distinct attributes, the full formula is:



        $$p(a) = p(a_1)^a_1p(a_2)^cdots p(a_k)^ cdot frack!!cdots$$



        Note that in our above example where all attributes were distinct the denominator went away because it was simply $1! cdot 1! cdots 1! = 1$.



        And in the other extreme, where the multiset only has a single element repeated, like in $(8, 8, 8, 8, 8, 8)$, we get:



        $$p(8)^6cdot frac6!6! = p(8)^6$$



        As expected.







        share|cite|improve this answer














        share|cite|improve this answer



        share|cite|improve this answer








        edited 3 hours ago

























        answered 4 hours ago









        orlp

        6,9981229




        6,9981229




















            meetaig is a new contributor. Be nice, and check out our Code of Conduct.









             

            draft saved


            draft discarded


















            meetaig is a new contributor. Be nice, and check out our Code of Conduct.












            meetaig is a new contributor. Be nice, and check out our Code of Conduct.











            meetaig is a new contributor. Be nice, and check out our Code of Conduct.













             


            draft saved


            draft discarded














            StackExchange.ready(
            function ()
            StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fmath.stackexchange.com%2fquestions%2f2939250%2fdungeons-and-dragons-ability-score-combinations%23new-answer', 'question_page');

            );

            Post as a guest













































































            Comments

            Popular posts from this blog

            What does second last employer means? [closed]

            List of Gilmore Girls characters

            Confectionery