Самый простой способ сделать это - указать «полосы», куда должно идти случайное число. В вашем примере у вас есть 15 игроков, поэтому вы можете иметь:
rand < 1/15, highest strength
1/15 < rand < 3/15, second highest
3/15 < rand < 6/15, third highest
6/15 < rand < 10/15, fourth highest
10/15 < rand < 15/15, lowest strength
Вы также можете параметризовать такую функцию с помощью 'max' номера каждой полосы, которую вы разрешаете, и когда полоса заполнена, она включается в следующую наименьшую существующую полосу (кроме нижней полосы, которая будет включена в следующий самый высокий), чтобы обеспечить только определенное число каждого со случайным распределением.
Редактировать добавление из моих комментариев:
Чтобы получить структуру пирамиды с плавающей точкой, наилучшей функцией, скорее всего, будет логарифм. Формула:
11 - log10(rand)
будет работать (с log10, являющимся логарифмом с основанием 10), так как это даст диапазоны вроде:
1 < rand < 10 = 9 < strength < 10
10 < rand < 100 = 8 < strength < 9
100 < rand < 1000 = 7 < strength < 8
etc.
, но значение rand должно быть в диапазоне от 1 до 10 ^ 10, что потребует большой случайности (больше, чем может справиться большинство случайных генераторов). Чтобы получить случайное число в этом диапазоне, вы можете умножить их вместе. 3 случайных числа могут управлять этим:
11 - log10(rand1 * rand2 * rand3)
с rand1, имеющим диапазон 1-10000, и rand2 и rand3, имеющим диапазон 1-1000. Это немного отклонило бы распределение от правильной пирамиды (хотя, скорее всего, в центре были бы цифры), поэтому оно может быть неподходящим.