ホームページ > バックエンド開発 > PHPチュートリアル > PHP で重み付き乱数を生成するにはどうすればよいですか?

PHP で重み付き乱数を生成するにはどうすればよいですか?

Mary-Kate Olsen
リリース: 2025-01-03 08:40:08
オリジナル
259 人が閲覧しました

How to Generate Weighted Random Numbers in PHP?

PHP での加重乱数生成

質問:

乱数を生成するにはどうすればよいですか? 1 から 10 の間ですが、3、4、5 を選択する確率が高くなります。 PHP では 8、9、10 は何ですか?

答え:

この重み付けされたランダム性を実現するには、目的の結果をそれぞれその重みにマッピングする連想配列を利用できます。この場合、3、4、および 5 の重みが 8、9、および 10 よりも大きい (例: 3 - 50%、4 - 30%、5 - 20%) 配列を作成できます (例: 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 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート