Tell me more ×
Role-playing Games Stack Exchange is a question and answer site for gamemasters and players of tabletop, paper-and-pencil role-playing games. It's 100% free, no registration required.

The D&D 3.5 Player's Handbook gives (among others) two preferred methods to roll ability scores for a new character: a) roll 3d6 twelve times and keep the preferred six results, or b) roll 4d6 and drop the lowest die, six times.

What is the statistically better method in terms of total modifiers?

In addition, IIRC the core rulebook excludes characters whose total bonus is lower than +3, because adventurers are assumed to be exceptional people.

share|improve this question
I'm not smart enough to answer this question, but if I knew more about probability I would use anydice.com to help me figure out the answer. – Bryant Aug 27 '10 at 20:08
I had a DM in 3.5 that wouldn't accept scores that didn't total 75 or better. My current 3.5 campaign all use the 32-point buy system, and there are several calculators out there like this one: emrilgame.netau.net/Dmstuff/pointbuy.html – Ororo Aug 27 '10 at 20:28
I'm trying to do some exhaustive count but I started having nightmares, so I gave up and started reading First Fantasy Campaign by Arneson. Also, while one or the other has better average bonuses, I think that the two spreads are way different (but i don't want to risk what's left of my sanity for it) – Tsojcanth Aug 27 '10 at 21:14
Added the "dice" tag! – Adam Dray Aug 27 '10 at 21:45

8 Answers

up vote 10 down vote accepted

If you actually get a standard distribution from the dice in the 3d6 x12 method, it will be slightly better than a standard distribution of results from the 4d6 method. The more samples you take, the more likely it is that you will get something approaching average or a standard distribution. The fewer samples you take, the more likely the results will just be random.

share|improve this answer
+1 Beat me to it. With more dice the bell curve gets taller and narrower in the middle. – Colonel Sponsz Aug 27 '10 at 19:57
I think he's asking which gives better average stats, though? So the average for 12 runs of 3d6 will be lower, but what're the chances you'll get more peaks? – Bryant Aug 27 '10 at 20:08
It seems you are right. I run some additional check and then post the graph. – Stefano Borini Aug 27 '10 at 20:14
Bryant - The average doesn't really matter a whole lot because the sample sizes are 12 vs. 6. With 6, the results will be pretty random with no room to ignore outliers. With 12, the results are still pretty random in distribution, but you can ignore results that are unfavorable. – Mike Bohlmann Aug 27 '10 at 20:56
@bySwarm: you are absolutely right with the "no room to ignore outliers". I'd like to comment though that excluding the lowest die in the 4d6 set technically reduces the chance of an outlier. However, a very bad throw (e.g. 3,2,1,1), forces you accept the resulting 6 due to the effect you report – Stefano Borini Aug 27 '10 at 21:02
show 1 more comment

D&D players are quick on the math. Agreed.

Want a lot of 14-16, go with 4d6. If you want more 17 & 18 go with the 3d6 method. So are you building a Monk or a Wizard?

share|improve this answer
Why does 3d6 produce more 17&18s than 4d6 DL? – Pureferret Dec 28 '11 at 22:28
@Pureferret Likely because you get more rolls/tries, and that increases the probability. – Allen Gould Mar 15 '12 at 16:47

Writing a program to brute force it looks like that the difference is slight

I added up all six attributes and counted the number of times that total appears.

The 3d6 six times method clusters around a total of 72, The 4d6 drop low clusters around a total of 74

A straight 3d6 roll clusters around a total of 63.

3d6 six time is more tightly clustered and ranges from 56 to 95 while 4d6 drop low ranges from 40 to 100.

Here is the source code for Visual Basic

Option Explicit
Dim Result1(1 To 18 * 6) As Long
Dim Result2(1 To 18 * 6) As Long
Dim Result3(1 To 18 * 6) As Long

Private Sub Command1_Click()
    Dim I As Long
    Dim R1 As Long
    Dim R2 As Long
    Dim R3 As Long
    Cls
    For I = 1 To 100000
        R1 = RollStat6TimesTakeBest
        R2 = RollStat4
        R3 = RollStat
        Result1(R1) = Result1(R1) + 1
        Result2(R2) = Result2(R2) + 1
        Result3(R3) = Result3(R3) + 1
    Next I

    Dim F As FileSystemObject
    Set F = New FileSystemObject
    Dim T As TextStream
    Set T = F.CreateTextFile("C:\test.csv", True)
    T.WriteLine "Total,3d6 6 times , 4d6 drop one , straight 3d6"
    For I = 1 To 18 * 6
        T.WriteLine CStr(I) & "," & CStr(Result1(I)) & "," & CStr(Result2(I)) & "," & CStr(Result3(I))
    Next I
    T.Close
    MsgBox "Done"
End Sub

Private Function D(Roll As Integer) As Integer
    Dim Result As Long
    Dim Test As Double
    Result = Rnd * 1000000000
    D = Result Mod Roll + 1
End Function

Private Function Roll3D6() As Integer
    Roll3D6 = D(6) + D(6) + D(6)
End Function

Private Function RollStat() As Integer
    Dim Total As Integer
    Dim I As Long
    For I = 1 To 6
        Total = Total + Roll3D6
    Next I
    RollStat = Total
End Function

Private Function RollStat6TimesTakeBest() As Integer
    Dim Best As Integer
    Dim I As Long
    Dim Roll(1 To 6) As Integer
    For I = 1 To 6
        Roll(I) = RollStat
    Next I
    Best = Roll(1)
    For I = 2 To 6
        If Best < Roll(I) Then Best = Roll(I)
    Next I
    RollStat6TimesTakeBest = Best
End Function



Private Function Roll4D6DropLow() As Integer
    Dim Roll(1 To 4) As Integer
    Dim Low As Integer
    Dim I As Integer
    Dim Total As Integer
    Roll(1) = D(6)
    Roll(2) = D(6)
    Roll(3) = D(6)
    Roll(4) = D(6)
    Low = 1
    For I = 2 To 4
        If Roll(I) < Roll(Low) Then Low = I
    Next I
    For I = 1 To 4
        If I <> Low Then Total = Total + Roll(I)
    Next I
    Roll4D6DropLow = Total
End Function

Private Function RollStat4() As Integer
    Dim Total As Integer
    Dim I As Long
    For I = 1 To 6
        Total = Total + Roll4D6DropLow
    Next I
    RollStat4 = Total
End Function
share|improve this answer
1  
3d6 is thrown 12 times, and the best 6 results are kept. – Stefano Borini Aug 27 '10 at 20:37

I appears that bySwarm is right. Here are the results:

alt text

along the X axis is the total bonus over the six ability scores. Along the Y axis, the probability, obtained from 1 million runs. Results below a total bonus of +3 have been purged from the count, so the grand total of runs is less than the original 1 million.

It appears that the twelve 3d6 statistically produces a better total bonus than the 4d6 method.

This is the code to run the 4d6 case (in Python)

import sys
import random

count = {}
for i in xrange(1,1000000):
    collection = []
    for j in xrange(0,6):
        extraction = [random.randint(1,6), random.randint(1,6), random.randint(1,6), random.randint(1,6) ]
        #print extraction
        collection.append( sum( sorted( extraction )[1:] ) )
    #print collection 
    bonuses = map(lambda x: (x-10)/2, collection)
    #print bonuses
    total_bonus = sum(bonuses)
    #print total_bonus

    if total_bonus < 3:
        #print "too low, excluded"
        continue

    if not count.has_key(total_bonus):
        count[total_bonus]=0
    count[total_bonus] += 1

total_extractions = sum(count.values())
for bonus,occurrences in sorted(count.items()):
    print bonus,occurrences/float(total_extractions)

This is for the twelve 3d6 case:

import random

count = {}
for i in xrange(1,1000000):
    collection = []
    for j in xrange(0,12):
        extraction = [random.randint(1,6), random.randint(1,6), random.randint(1,6) ] 
        collection.append( sum( extraction ) )
    ##print collection
    collection = sorted(collection)[6:]
    #print collection

    bonuses = map(lambda x: (x-10)/2, collection)
    #print bonuses
    total_bonus = sum(bonuses)
    #print total_bonus

    if total_bonus < 3:
        #print "too low, excluded"
        continue

    if not count.has_key(total_bonus):
        count[total_bonus]=0
    count[total_bonus] += 1

total_extractions = sum(count.values())
for bonus,occurrences in sorted(count.items()):
    print bonus,occurrences/float(total_extractions)
share|improve this answer
1  
Interesting. I'm actually working at the non-random version. :) – Tsojcanth Aug 27 '10 at 20:47

As everyone else has stated, 12 rolls of 3d6 is better.

You guys writing hundreds of lines of dice code... I love the web-based tool for Troll for dice calculations.

Here's Troll code for best six of 12 rolls of 3d6:

sum (largest 6 12#(sum 3d6))

This averages in a total score around 76.4.

And the Troll code for six rolls of 4d6 keeping the best 3d6:

sum 6#(sum largest 3 4#d6)

This averages in a total score around 73.5.

share|improve this answer
Those Danes are so advanced :) – Stefano Borini Aug 28 '10 at 7:31
6  
But writing code is so much fun! – Iain M Norman Aug 31 '10 at 9:36
1  
Writing short and concise code that does exactly the same thing is much more fun. ;) – Adam Dray Aug 31 '10 at 18:56
2  
But these are strict averages! We want to know the standard deviation, because some stats can be bad, and that's okay, and we want to know if min-maxing is an option! This is crucial! Really! I should be typing in all caps! – Beska Sep 20 '10 at 20:13
Last I checked, the web-based Troll tool is producing an error when you run it in statistics mode. If you really want this statistics info, I can (or you can) run the one-line programs through the command-line tool on your own machine. It'll have to wait till I have some time. – Adam Dray Sep 20 '10 at 20:28

It's no use me repeating the brilliance of the master statitician's above as the answer has been given already.

But to be fair to the PC's in the group, there is nothing worse then when someone rolls 3 x 18's a 17 and 2 x 16's for their stats and another player rolls 1 x 17, and the rest 16's or worse. It is not very inspiring.

I think to give all your players a feeling of "joy" is to perhaps start with a point buy, and then allow then an additional dice roll (perhaps 2d4 or 1d6) to add to the base point buy.

This way they get to have characters of "similar" abilities, they get to balance out the stats where they want them. If they want a 20 Strength, they can sacrifice int or wis or cha.

I know rolling dice is fun, but as stats are quite important, you could try this method -- remember, playing the game is about fun, not always about rules :)

share|improve this answer
3  
To avoid the letdown that inevitably happens with random stats being compared, I often ruled that players were not allowed to reveal the contents of their characters sheets to one another. Class, alignment, relative strength, etc.—all had to be found out during play, if they really wanted to know. As a nice bonus, it meant they actually had to roleplay with each other if they wanted to get a good feel for who they were trusting with their lives and loot. – SevenSidedDie Oct 22 '10 at 7:26
Another way to make it fairer would be to have everyone roll, then pool all the results and let everyone choose any of the results (or just give everyone the best set). You can also eliminate the best result and let the players choose from what's left, and so on. – Bobson Sep 1 '11 at 17:50

My answer contains some LaTeX markups, so I've posted a nicely formatted PDF of it that you can read/print/download over at http://www.scribd.com/doc/37700790

When you roll 4d6k3, each of your 6 ability scores follows the exact same probability distribution. In statistics lingo, your 6 ability scores are i.i.d.---independent and identically distributed---random variables. Call one of these i.i.d. random variables Y. The mean of Y is E[Y]=12.2445987654321, and its standard deviation is $\sigma_Y=2.8468444453115$. Additionally, this distribution is skewed to the left; its skewness is -0.283507652977282.

By comparison, when you roll 3d6 once, you get a random variable X, with E[X]=10.5, and standard deviation $\sigma_X=2.95803989155$. Additionally, it is symmetric, so its skewness is 0.

However, when you roll 3d6 12 times and keep the highest 6, you get 6 different random variables (not i.i.d.), called the 7th through 12th order statistics, denoted $X_{(7)},\ldots,X_{(12)}$. E.g., $X_{(12)}$ is the maximum of the 12 rolls. Each order statistic has its own mean, standard deviation, and skewness:

\begin{tabular}{ l | r r r } Order statistic & mean & standard deviation & skewness \ \hline $X_{(7)}$ & 10.8184 & 1.1411 & -0.00564534 \ $X_{(8)}$ & 11.4663 & 1.14865 & -0.00978342 \ $X_{(9)}$ & 12.1517 & 1.1693 & 0.00712255 \ $X_{(10)}$ & 12.919 & 1.2154 & 0.0435863 \ $X_{(11)}$ & 13.8598 & 1.30455 & 0.0503448 \ $X_{(12)}$ & 15.2263 & 1.44603 & -0.125062 \ \end{tabular}

Of course, you can easily find the average of the means of the 7th through 12th order statistics: $\mu=\frac{\sum_{i=7}^{12} E[X_{(i)}]}{6}=12.7403$, so $\mu > E[Y]$ by about a $\frac{1}{2}$ point. But note that $E[X_{(7)}] < E[X_{(8)}] < E[X_{(9)}] < E[Y]$, meaning the expected value of each of the 6 ability scores generated with 4d6k3 is greater than what you can expect from half the ability scores generated by the largest 6 of 12x(3d6). So the answer isn't so simple.

share|improve this answer
Could you please explain how did you calculate E[Y]? – Jaime Pardos Sep 19 '10 at 11:18
2  
@Jaime Pardos: There is a general, combinatoric formula for calculating the probability mass function f(y)=Pr[Y=y] for the random variable Y that results from throwing n s-sided dice and summing the highest k dice. The formula was derived by a user calling himself ``techmologist'' on Physics Forums at physicsforums.com/showthread.php?p=2813034 Once you know the pmf f(y) of Y, you can easily calculate its expected value E[Y]=mu=sum of f(y)*y over all possible values of y. Also, you can calculate its variance sigma^2=E[(Y-mu)^2]=sum of f(y)*(y-mu)^2 over all possible values of y. – A. N. Other Sep 19 '10 at 17:26
Thank you very much, Elisha. – Jaime Pardos Sep 19 '10 at 20:13

This may sound crazy, but I took to using 5d4. Why? I noticed that with either 3d6 and 4d6, characters tended to gain extreme rolls - lots of 17's and 18's, but also 3's, 4's, and 5's. This made crazy 'Rainman' characters - great at some things, retarded at others. Such characters are unplayable which led to a lot of re-rolling, or worst, encouraged DM's to cave and let the players drop the 4's, but keep the 17's.

In life, most people are more generally average. Roll 5 4-sided dice and you'll get a lot of 9 - 13's with perhaps one better and one worst roll. Easier to play and more realistic.

share|improve this answer
This looks interesting. Three things: with best 6 of 12x3d6, worst scores of less than 10 are pretty rare, while the best score is likely to be over 15. Second, how do you handle outcomes of 19 or 20 (which are pretty rare, at about 0.1%)? Last, the maximum score with this system is quite likely to be under 15 (about 1/3?), which is maybe too middling for heroic fantasy. – Alticamelus May 3 '11 at 7:38
There are a lot of possible schemes for creating more average results. Some of this is taste. I like the 5d4 because producing the final number requires one simple math operation: add the numbers together. The best 6 of 12x3d6 requires two operations per result: add together, then divide. As for dealing with 19's and 20's, there are a couple of options. One is keep them accepting the more powerful character. Two, drop them and reroll - acceptable because its rare. Three, round down to 18. – Tom May 3 '11 at 16:11
1  
5d4-2? How about that? – RDM Dec 17 '12 at 3:22

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.