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

PHP で重み付けされた確率を使用して乱数を生成するにはどうすればよいですか?

Susan Sarandon
Susan Sarandonオリジナル
2024-12-08 21:32:11784ブラウズ

How Can I Generate Random Numbers in PHP with Weighted Probabilities?

PHP での重み付き確率によるランダム結果の生成

PHP での乱数の生成については十分に文書化されています。ただし、事前定義された確率でランダム化を実現するには、追加のアプローチが必要です。この質問は、8、9、10 よりも 3、4、5 を取得する確率が高く、1 ~ 10 の間のランダムな値を生成することに焦点を当てています。

@Allain の提案からインスピレーションを得て、カスタム関数が開発されました。 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 の乱数生成器 (mt_rand()) と累積確率アプローチを組み合わせて利用することにより、関数は配列からランダムな値を選択します。割り当てられた確率に基づいて。これにより、ユーザー定義のバイアスを含むランダムな結果の生成が可能になり、さまざまなアプリケーションにとって多用途かつ効果的なツールになります。

以上がPHP で重み付けされた確率を使用して乱数を生成するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。