Definitely enjoyed this, would very much appreciate a few more posts of this style. The relatively basic solution I implemented is as follows:
I created a dictionary in Python for the total successes. For each stat (cha, str, etc), I found the number of successes and total attempts at each score(1-20). Dividing the successes by total attempts gave me a rough success rate for each stat score.
Then, I set my character up as a dictionary, and iterated over it, increasing each value by one and seeing what the change was for the success rate from that increase. After a single iteration, I increased my character’s stat where the greatest positive change was found.
Iterating over that 10 times, or until all my points were gone, gave me this spread:
STR: Eight (increased by two)
CON: Sixteen (increased by two)
DEX: Fourteen (increased by one. Weird, I know, but there was an increase to be had from 13 − 14, even though afterward it’s negative returns)
INT: Thirteen (no change)
WIS: Twelve (no change)
CHA: Nine (increased by 5)
Weak points:
This assumes that the stats have no correlations between each other. Alexei checked, thank you, Alexei, I’m not sure how to properly do that.
This misses out on bigger steps having large effects. Say for DEX, moving from 13 to 14 gave you a −5% chance of success. But moving from 14 to 15 gave you a +45% chance. Because my algorithm just checks single steps, it misses the chance to move two steps and gain 20% per step.
This is all based on a very simplistic model and uses very little actual statistical analysis.
You do indeed miss out on some gains from a jump—WIS gets you a decline in success at +1 but a big gain at +3. (Edit: actually my method uses odds ratio (successes divided by failures) not probabilities (successes divided by total). So, may not be equivalent to detecting jump gains for your method. Also my method tries to maximize multiplicative gain, while your words “greatest positive” suggest you maximize additive gain.)
STR − 8 (increased by 2)
CON − 15 (increased by 1)
DEX − 13 (no change)
INT − 13 (no change)
WIS − 15 (increased by 3)
CHA − 8 (increased by 4)
calculation method: spreadsheet adhockery resulting in tables for each stat of:
per point gain = ((success odds ratio for current stat)/(success odds ratio for current stat + n))^(1/n), find n and table resulting in highest per point gain, generate new table for that stat for new stat start point and repeat.
Definitely enjoyed this, would very much appreciate a few more posts of this style. The relatively basic solution I implemented is as follows:
I created a dictionary in Python for the total successes. For each stat (cha, str, etc), I found the number of successes and total attempts at each score(1-20). Dividing the successes by total attempts gave me a rough success rate for each stat score.
Then, I set my character up as a dictionary, and iterated over it, increasing each value by one and seeing what the change was for the success rate from that increase. After a single iteration, I increased my character’s stat where the greatest positive change was found.
Iterating over that 10 times, or until all my points were gone, gave me this spread:
STR: Eight (increased by two)
CON: Sixteen (increased by two)
DEX: Fourteen (increased by one. Weird, I know, but there was an increase to be had from 13 − 14, even though afterward it’s negative returns)
INT: Thirteen (no change)
WIS: Twelve (no change)
CHA: Nine (increased by 5)
Weak points:
This assumes that the stats have no correlations between each other. Alexei checked, thank you, Alexei, I’m not sure how to properly do that.
This misses out on bigger steps having large effects. Say for DEX, moving from 13 to 14 gave you a −5% chance of success. But moving from 14 to 15 gave you a +45% chance. Because my algorithm just checks single steps, it misses the chance to move two steps and gain 20% per step.
This is all based on a very simplistic model and uses very little actual statistical analysis.
You do indeed miss out on some gains from a jump—WIS gets you a decline in success at +1 but a big gain at +3. (Edit: actually my method uses odds ratio (successes divided by failures) not probabilities (successes divided by total). So, may not be equivalent to detecting jump gains for your method. Also my method tries to maximize multiplicative gain, while your words “greatest positive” suggest you maximize additive gain.)
STR − 8 (increased by 2)
CON − 15 (increased by 1)
DEX − 13 (no change)
INT − 13 (no change)
WIS − 15 (increased by 3)
CHA − 8 (increased by 4)
calculation method: spreadsheet adhockery resulting in tables for each stat of:
per point gain = ((success odds ratio for current stat)/(success odds ratio for current stat + n))^(1/n), find n and table resulting in highest per point gain, generate new table for that stat for new stat start point and repeat.