PHP 中的加权随机数生成
问题:
如何生成随机数介于 1 和 10 之间,但与选择数字 3、4 和 5 相比,选择数字 3、4 和 5 的概率更高PHP 中的 8、9 和 10?
答案:
要实现这种加权随机性,您可以利用关联数组将每个所需结果映射到其权重。在这种情况下,您可以创建一个数组,其中 3、4 和 5 的权重(例如,3 - 50%、4 - 30%、5 - 20%)高于 8、9 和 10(例如,8 - 10) %, 9 - 5%, 10 - 5%)。
根据分配的权重,您可以生成使用 mt_rand 在权重总和范围内的随机数。然后,循环遍历数组并从随机数中减去每个权重值,直到其变为负数。使随机数为负数的权重对应的数组键就是期望的结果。
这是一个实现这种加权随机性的 PHP 函数:
/** * getRandomWeightedElement() * Utility function for getting random values with weighting. * Pass in an associative array, such as array('A'=>5, 'B'=>45, 'C'=>50) * An array like this means that "A" has a 5% chance of being selected, "B" 45%, and "C" 50%. * The return value is the array key, A, B, or C in this case. Note that the values assigned * do not have to be percentages. The values are simply relative to each other. If one value * weight was 2, and the other weight of 1, the value with the weight of 2 has about a 66% * chance of being selected. Also note that weights should be integers. * * @param array $weightedValues */ function getRandomWeightedElement(array $weightedValues) { $rand = mt_rand(1, (int) array_sum($weightedValues)); foreach ($weightedValues as $key => $value) { $rand -= $value; if ($rand <= 0) { return $key; } } }
以上是如何在 PHP 中生成加权随机数?的详细内容。更多信息请关注PHP中文网其他相关文章!