PHPで重みつきの抽選ロジック

ロト7の抽選機を作った際によく当たる数字に重みづけをして確率を変えた方が
当たる確率あがるんじゃね!?ということで考えたロジックです。

さまざまな所でもう紹介されているので新鮮味はないですが参考程度になれば・・・

抽選対象の数字に当った回数をつけてそれをそのまま確率に反映しました。
サンプルで5個の数字にそれぞれ重み用の数字を割り当てて抽選しています。

<!–?php

//抽選対象
$entries = array(
“1” => 5,
“2” => 4,
“3” => 3,
“4” => 2,
“5” => 1,
);

//配列から1つの要素キーを抽選する

function array_rand_weighted($entries){
$sum = array_sum($entries);
$rand = rand(1, $sum);

foreach($entries as $key => $weight){
if (($sum -= $weight) < $rand) return $key;
}
}

// 抽選
$result_key = array_rand_weighted($entries);

print("$result_key");

?>

とりあえずきちんと動いているっぽかったです。

コメントする