非均一な確率分布を実装する方法は?
質問
私は遺伝的アルゴリズムに不均一な確率分布を実装しようとしています。
遺伝子プログラムの実装では、3つの結果がある実験があり、各結果には確率が異なります。たとえば、1つの結果の確率は0.85、もう1つは0.01、最後の1つは0.14ですか?
PS:私は最近、それが確率の不均一な分布と呼ばれることを知るようになりました。私はそれをJavaで実装しています。誰もが不均一な問題の背後にある理論を伝えることができます。配布およびそれを実装するJavaパッケージ。
問題に関するこれ以上の情報が必要な場合は、お気軽にお問い合わせください!
前もって感謝します!
解決
単純な離散分布の場合、累積確率を使用して、目的の周波数で結果を返すサンプラーを作成できます。
Random r = new Random();
double v = r.nextDouble();
if (v <= 0.85) { return 0; }
if (v <= 0.86) { return 1; }
return 2;
これにより、0.85、0.01、および0.14の確率で数値0、1、および2が返されます。
不均一な確率分布に関する理論に関しては、このウィキペディアの記事から始めることができます 確率分布;ページの下部にある折りたたみ可能なセクションを特に覚えておいてください。異なる特性を持つ数十の不均一な分布(連続的および離散の両方)があることがわかります。
他のヒント
特定のケースでは、[0; 100)均一な分布を使用して、それがどの範囲に収まるかを確認します:[0; 85)、[85; 99)、[99、100)
あなたの説明に基づいて、あなたはフィットネス比例選択(ルーレットホイールの選択とも呼ばれる)について話しているように思えます。
http://en.wikipedia.org/wiki/roulette-wheel_selection
Nailxxの答えは、あなたがする必要があることのかなりコンパクトな説明だと思います。
参照してください遺伝的アルゴリズムのルーレット選択
ルーレットホイール選択アルゴリズム
私が間違っている場合は、あなたが役立つかもしれないいくつかのライブラリがあります:
http://www.ee.ucl.ac.uk/~mflanaga/java/stat.html
http://commons.apache.org/math/apidocs/org/apache/commons/math/random/package-summary.html