In the source code of game, you can find a mapped vector that creates the distribution of points in GPs.
For 20 players, that's 50, 43, 37, 32, 28...
I'm not good at C++, so please explain the algorithm so I can code a generator based on that in Python.