Случайный выбор на основе веса с плавающей точкой в 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
поэтому мы выбираем третий индекс.