私は次のような数字のリストを持っています
$list = array(1,5,19,23,59,51,24)
実際のコードでは、これはデータベースから生成されるため、この配列は互いに異なる最大 500 個の数値を保持します。
データベース内のこれらの各数値には、発生する確率が記録されています。だから私は、1から500までの乱数を生成するための以前の実行からのデータを持っており、1000回のように生成された各数値の確率を記録しました。
数値と各数値の確率のリストができたので、確率に基づいてこれらの 500 の数値から乱数を生成する関数を書きたいと思います。
例えば:
number 1 has a chance of: 0.00123 //0.123%
number 6 has a chance of: 0.0421 //4.21%
number 11 has a chance of: 0.0133 //1.33%
したがって、変数 $finallist は次のようになります。
$finallist[1] = 0.00123;
$finallist[6] = 0.0421;
$finallist[11] = 0.0133;
ここで、関数を実行して $finallist をパラメーターとして渡すと、1 から 6 までの乱数を取得したいのですが、6 は 1 よりも出てくる可能性が高く、11 は 1 よりも出てくる可能性が高くなります。
確率に基づいて乱数を返す処理を行う関数をいくつか作成しましたが、パラメーターとして 1 つの値しか取りません。
private function randomWithProbability($chance, $num, $range = false)
{
/* first generate a number 0 and 1 and see if that number is in the range of chance */
$rand = $this->getRandomFloatValue(0, 1);
if ($rand <= $chance)
{
/* the number should be returned */
return $num;
}
else
{
/* otherwise return a random number */
if ($range !== false)
{
/* make sure that this number is not same as the number for which we specified the chance */
$rand = mt_rand(1, $range);
while ($rand == $num)
{
$rand = mt_rand(1, $range);
}
return $rand;
}
}
}
これを行うためのソリューション/アルゴリズムを誰かが知っている場合、またはPHPに組み込まれているものがあれば、大きな助けになります。どうもありがとう。