Случайный выбор на основе веса с плавающей точкой в ​​PHP

Допустим, у меня есть массив со следующими значениями:

0.7523262
0.9232192
1.5824928
5.2362123

Каков наилучший способ случайного выбора значения из этого массива, чтобы чем выше значение, тем больше вероятность его выбора? Существуют общие функции для взвешенного выбора, но все они используют mt_rand(), которая не будет работать для чего-то подобного.

Например, значение 2,4652474 будет в два раза чаще, чем значение 1,2326237.

2 ответа

Решение

Я не знаю, является ли это лучшим способом, но вы можете выполнить то, что вы описываете, вычислив сумму всех записей в массиве, умножив ее на случайное число от нуля до единицы, чтобы получить цель, а затем вычислив промежуточную сумму для всех записей в массиве, пока эта сумма не превысит целевой показатель. Вернуть запись, которая превысила цель.

Вычислить случайное число между 0 и сумма всего массива.

Сортируйте массив так, чтобы младшие числа были первыми.

Начните суммировать массив слева. Когда сумма превышает случайное число, вы выбираете индекс, который вы достигли.

Если у вас, например, есть

Array = [1, 1.5, 2, 2.5]
Sum of Array = 7
Random = 4

Мы проверяем первый индекс. Это ниже 4так что мы бы добавили второй номер 1 + 1.5 = 2.5не выше 4 поэтому мы добавим еще один номер 2.5 + 2 = 4.5 который выше 4 поэтому мы выбираем третий индекс.

Другие вопросы по тегам