Dumping every point into your highest stat is rarely optimal once diminishing returns kick in. This optimizer allocates points one at a time to whichever stat currently gives the most output, producing the split that maximises your total effective score.
How it works
Each stat has a weight w (output per point) and a diminishing factor d
between 0 and 1. After k points already invested, the next point’s value is:
marginal value = w × d^k
The optimizer repeatedly gives the next point to the stat with the highest
current marginal value, then updates that stat’s k. Because marginal value only
decreases, this greedy allocation is optimal for the model.
Example and tips
With three stats weighted 10, 8, and 6 and a 0.95 diminishing factor each, the first few points go to the 10-weight stat, but as its marginal value falls below 8 the optimizer switches, and the final split is balanced rather than lopsided. Set the diminishing factor to 1 to model linear stats (all points go to the top weight), and lower it toward 0.9 to model stronger soft caps. For hard breakpoints, split a stat into two entries with different weights.