Sunday, May 30, 2021

Entropy as a Character-Generation Currency

Had a conversation with my father today about character generation, random stats vs point buy, and Traveller character generation (including how death-in-chargen leads to intra-party balance in expectation more readily than allowing/expecting characters who fail survival rolls to be played in the company of those who passed all survival rolls).  While discussing point buy schemes and how it's sort of hard to put a number on the value of an 18, but that rolling dice has the problem of "auditability" (did they actually roll these stats?) I got to thinking...

Even if you don't want to actually obey dice, you can expect results that deviate from expectation to a certain degree, and that's a property that you can check.  Ability scores occur with certain probabilities.  Given a set of stats, one could compute the probability of that set occurring.  Depending on the sort of campaign one is running, one could establish bounds on the improbability of each set of chosen stats.

In information theory, there's a concept of "surprisal" in the occurrence of an event, which roughly quantifies how surprising it is given the probability of its occurrence (also called self-information).  If an event occurs with probability p, then its surprisal is -lg(p).  So given the probability of each ability score roll, we can compute the total surprisal of a set of stats.  And one nice property of logarithms of probability is that when you would multiply probabilities, adding their logarithms is equivalent (eg, 0.5 * 0.5 = 0.25.  lg(0.5) = -1, lg(0.25) = -2, so lg(0.5) + lg(0.5) = lg(0.25)).  Being able to work with them additively rather than multiplicatively is a desirable property for something like a point-buy system.

Stat% chanceProbabilitySelf-information (bits)Normalized self-informationScaled and rounded self-information (deci-bits)

So we could use these scaled surprisal values as points during character generation.  But a set of all 10s and 11s is surprisingly unsurprising; an average set rolled on 3d6 looks more like 7, 9, 10, 11, 12, 14 than like all 10s and 11s.  If you wanted to model stat-lines at this level of surprise, a reasonable approach might be that you get a 7 in any one stat and 8 deci-bits to spend on the other 5, with the option to take a 9 to get a credit of 1 deci-bit.  Realistically, this means you get either a 14 or two 13s and the rest are 10s or 11s (unless you take the 9, which buys you a 12).  Might also want to add a rule that you should have close to the same number of 11s and 10s.

Honestly 13, 13, 11, 11, 10, 7 is a very playable set in B/Xy games.  I could absolutely see giving new players pregens with this array.

But going from there to higher-entropy statblocks seems sort of tricky.  If you let players take a 3 to buy an 18 (or a 6 and a 7 to buy a 16), their stats are "in balance", but more surprising /  less natural / less likely than a statblock with an 18 and a 10 would be!

Average stats of 4d6 drop 1 are more like 9, 10, 12, 13, 14, 16 - 34 deci-bits with the option to take a 9 for one more, I suppose?  Four 14s and a pair of 12s is nothing to scoff at in 3.x, while in B/X 16, 13, 13, 13, 11, 10 (or 12, 9) is a very solid set.

Perhaps it would make more sense to compute the probability (and then surprisal) of each ability score modifier band (per game-system), so that a 13 and a 14 are more-or-less equivalent?

Maybe the real problem here is that we're computing surprisal of each score in isolation, when maybe we should be computing the surprisal of the whole set.  Having an 18 as the highest score in a set isn't really that surprising - 6 stats, each with a 1-in-216 chance of being an 18, means a 1-in-36 chance that at least one is an 18, which is the same probability as having a 16 in any particular score.  But I'm not actually familiar enough with information theory to say if I would need something more complex like joint/mutual entropy (but it seems like there shouldn't be any mutual information between stats in a rolled character, because the stat rolls are independent, so you should just be able to add the self-informations together to get its aggregate information).  So I think this line of thought, evaluating the whole set of stats together, would take more thinking.

In any case, an aside - if we're considering using surprise as a currency in character generation, we could also use it to buy "weird stuff".  Want to play a lawful drow, or the lost son of the rightful king, or a balrog?  Fine, but those are extraordinarily rare and that costs entropy that you then aren't spending on your stats.  If elves are half as common among adventurers as humans in your setting, then being an elf is about 10 deci-bits of surprise.  And then maybe we can get rid of stat minimums for demi-humans (which currently impose roughly that effect - three-quarters of stat-lines qualify to be dwarves, and three-quarters qualify to be elves; call it 4 deci-bits).


  1. This is a fantastic little find, id send it over to delta if i were you, he seems to always be interested in the behind baseball side of dnd math

  2. I don't know how to build it into a point-buy system, and it's not especially raw dice probable, but I like characters to have at least a +2 in something and at least one stat with a negative modifier.

    I play with mostly inexperienced players, and it seems to help them cohere an idea of their character if they have a distinct good feature & distinct weakness. It seems better than the array of nothing but middling scores often produced by pure random rolls.

    I'm so set on this that I've added it as a house rules override... Your highest score increased to at least a 16, your lowest score reduced to at best an 8.