# Generate a uniform distribution over an $n$-simplex employing quasi-random low-discrepancy points

This post is intended in a similar direction to an earlier one Can I use Compile to speed up InverseCDF? . I now wish to generate uniform points in an $$n$$-simplex (specifically $$n=8$$), making use of the indicated "golden-ratio" generalization procedure of Martin Roberts for a low-discrepancy sequence of points in the hypercube $$[0,1]^{n+1}$$.

I take it that now instead of the command

P = InverseCDF[NormalDistribution[0, 1], T]


in the earlier post (where T is the (n+1)-vector of real numbers in the hypercube), I could replace NormalDistribution by GammaDistribution (and then normalize $$P$$ to sum to 1).

Then, what pair of parameters (one of them should be 1) should be employed in the argument of GammaDistribution?

Or is there a more appropriate/obvious approach to utilizing the Roberts methodology? (Might DirichletDistribution be employed?)

I see that there is a good deal of related discussion on this site Uniformly distributed n-dimensional probability vectors over a simplex

One approach to incorporating the Roberts methodology for generating sequences of low-discrepancy points in hypercubes in our effort to obtain points uniformly distributed over simplicies, is to adapt the code

samples[n_] := Differences[Join[{0}, Sort[RandomReal[Range[0, 1], n - 1]],{1}]]


put forth by Sophie Alpert in her answer in https://stackoverflow.com/questions/3010837/sample-uniformly-at-random-from-an-n-dimensional-unit-simplex

We would replace

RandomReal[Range[0, 1], n - 1]


by another (n-1)-length vector G, the $$i$$-th realization of which would be given by

p = x /. Solve[x^n == x + 1, x][];Do[G[[j]] = Mod[1/2 + i/p^j,1], {j, 1, n-1}];


So, the Roberts procedure would be employed in our case at hand to generate 8-vectors, rather than 9-vectors, as we originally anticipated.