確率 重み付けランダム

よろしくおねがいします.

ブループリント以前に数学の話かもしれませんが、わからないところがあるので知恵を貸してください.

[random bool with weight]ノードを使用して確率に合わせてアイテムを選ぶシステムを作っています.

アイテムを見つけたらすぐに[Probabilitys_array]のLoop処理をBreakすることで,1つのアイテムを取り出せると考えたのですが,1000回試行して正しく機能しているか確認してみたところうまくいきませんでした.

Loop処理をBreakしない場合,それぞれ正しい確率で頻度で現れます. しかしコレではアイテムを複数取り出す可能性があるためだめです…

アイテムを見つけたらすぐにLoop処理をBreakする場合,配列のIndexが小さい方が選ばれる可能性が高いはずです.そのため,設定した確率通りに動作しません.
確率を小さい方から設定することで誤差が減りますが根本的には解決していません)

良い解決手段はありませんか?

何も見つからなかった場合のBool処理にミスが有りましたので修正しました.

すると, アイテムを見つけた場合は,それぞれ設定した確率でアイテムを見つけますが,
何もアイテムを見つけなかった場合が数多くあり,結果的に確率が合わなくなりました.
(数学的に正しい割合で何も見つけていない?)

そこで,何も見つけられなかった場合は,同じ構造体配列を見つけるまでループさせることで正しい確率でアイテムを見つけることができるようになりました.
確率が低いものしか入っていない場合,無限ループに近い処理になるため,実装にはもうひと工夫したほうがよい気がします

おそらく自分で解決できました.

[Probabilitys_array]に格納される順番が,昇順でも降順でも,(すべて同じでも)だめなのが原因だとわかっていました.
そのため.[Probabilitys_array]に格納する順番をランダムにすることで比較的目的の確率に近い結果が出ました.

ランダムに設定するとはいえ,1000回ループをする前に配列を決定してしまうと,
シードのついた?ランダムになってしまうため,1000回全てで配列を格納しています.
(2つの要素のIndexを一致させるために構造体にまとめました)

1000回ループさせると無駄で高負荷のように思えますが,通常ゲーム内で使うときはシャッフルして格納するのは1回だけなのでそこまで問題はないと思います.この手法が私のベストです.

しかし,1000回検査してもまだ確率が同じではありません.
よい解決方法があればお教えください.