現在の位置: ホーム> 最新記事一覧> lcg_value()分布関数と組み合わせて単純な確率モデルを作成する方法は?実用的な説明

lcg_value()分布関数と組み合わせて単純な確率モデルを作成する方法は?実用的な説明

gitbox 2025-06-17

確率理論と統計では、シミュレートされたランダムイベントには、特定の分布に一致する乱数の生成が必要になることがよくあります。 PHPによって提供されるLCG_Value()関数は、間隔[0,1)内に均等に分布する擬似ランダム浮動小数点数を生成できます。この記事では、分布関数と組み合わせてLCG_VALUE()を使用する方法を紹介し、単純な確率モデルを作成し、例を介してその有用な方法を実証します。


lcg_value()とは

LCG_VALUE()は、PHPで構築された擬似ランダム数生成関数です。これは、線形合同ジェネレーターに基づいており、[0、1)間隔で均等に分布している浮動小数点数を返します。この関数を使用して、均一なランダムイベントをシミュレートし、変換を通じてより複雑な分布を実現できます。

 <?php
$randNum = lcg_value();
echo $randNum; // 出力 0 到着 1 間の浮動小数点数
?>

分布関数を使用して確率モデルを作成します

確率モデルは、多くの場合、ランダム変数の累積分布関数(CDF)を定義します。ターゲット分布を備えたCDFがある場合F ( x ) F(x) 、その後、均一なランダム変数が与えられますU U n i f o r m ( 0 , 1 ) U \sim \mathrm{Uniform}(0,1) 、計算によるX = F ? 1 ( U ) X = F^{-1}(U) (つまり、逆関数変換)、ターゲット分布に一致するランダム変数を取得できます。

簡単に言えば:

  • lcg_value()を使用して、均一な乱数を生成しますU U

  • ターゲット分布を使用した逆CDF関数F ? 1 ( U ) F^{-1}(U) は、ターゲット分布の乱数に変換されます


実用的な例:離散確率分布の乱数を生成します

単純な離散ランダム変数があるとしますX X の値は{a、b、c}であり、対応する確率はそれぞれ{0.2、0.5、0.3}です。 lcg_value()を使用してこのランダム変数をシミュレートする方法は?

アイデアは次のとおりです。

  1. 離散分布(CDF)の累積分布関数を構築する

  2. 均一な乱数u = \ text {lcg_value}()を生成します

  3. によるとu u どの間隔落ちるかが出力するイベントを決定する

<?php
function sampleDiscrete() {
    $u = lcg_value();

    if ($u < 0.2) {
        return 'A'; // 0 <= u < 0.2
    } elseif ($u < 0.7) { // 0.2 <= u < 0.7 (0.2 + 0.5)
        return 'B';
    } else { // 0.7 <= u < 1
        return 'C';
    }
}

// テストを実行します
$results = ['A' => 0, 'B' => 0, 'C' => 0];
for ($i = 0; $i < 10000; $i++) {
    $sample = sampleDiscrete();
    $results[$sample]++;
}

print_r($results);
?>

実行後、統計結果は確率{0.2、0.5、0.3}に近似します。


実用的な例:指数関数的に分布した乱数を生成します

連続分布のために、ANTI-CDFメソッドも適用されます。たとえば、指数分布はですλ \lambda 、そのCDFは次のとおりです。

F ( x ) = 1 ? e ? λ x F(x) = 1 - e^{-\lambda x}

逆のCDFは次のとおりです。

F ? 1 ( u ) = ? ln ? ( 1 ? u ) λ F^{-1}(u) = -\frac{\ln(1-u)}{\lambda}

LCG_VALUE()を使用して、指数関数的に分布した乱数を生成する例:

 <?php
function sampleExponential($lambda) {
    $u = lcg_value();
    return -log(1 - $u) / $lambda;
}

// 测试出力
for ($i = 0; $i < 5; $i++) {
    echo sampleExponential(2) . "\n"; // lambda = 2
}
?>

要約します

  • lcg_value()は、均一に分布した乱数を生成します。これは確率シミュレーションの基礎です。

  • ターゲット分布またはその逆関数の累積分布関数(CDF)と組み合わせて、任意の分布を生成するランダム変数を変換できます。

  • 離散分布は間隔で分割され、逆のCDF変換によって連続分布が達成されます。

この方法は、シンプルで実用的であり、確率モデルとシミュレートされたランダムイベントの迅速な実装に適しています。

より詳細な使用法については、公式のPHPドキュメントhttps://gitbox.net/manual/en/function.lcg-value.phpを参照してください。