「1」の時間を10%、「2」を時間の30%、「3」を他の60%の時間をランダムに選択したいとします。私は、Javaでこれらの確率に基づいて無作為にサンプリングする方法があるのだろうかと思っています。確率の確率でJavaを生成する方法
ありがとうございます
「1」の時間を10%、「2」を時間の30%、「3」を他の60%の時間をランダムに選択したいとします。私は、Javaでこれらの確率に基づいて無作為にサンプリングする方法があるのだろうかと思っています。確率の確率でJavaを生成する方法
ありがとうございます
この方法はすべての言語で適用されます。ちょうど大きな乱数を取得し、次にいくつかの数のモードを取って、範囲を確認してください。
Random rand = new Random();
int r = rand.nextInt(10000000);
int m = r % 10;
if (m < 1) return 1; // 10 %
else if (m < 4) return 2; // 30 %
else return 3; // 60 %
私はtheresのそのための方法を考えていない、あなただけの包括的な1-10から乱数を生成して、1,2またはを選択し、以下の
のような回避策を実行する必要がありますランダムチャンスの確率に応じて、
if (random_number == 1)
{
result = 1;
}
else if (random_number <= 4)
{
result = 2;
}
else
{
result = 3;
}
メソッドがあります。 'nextDouble'は0から1.0の間で一様に分布した数値を返します。それを使って選択することができます。 – ChiefTwoPencils
まず、0.0と1.0の間に均等に分布する倍精度を生成します。次に希望の確率に対応するサブ範囲に範囲(0.0 < X < 1.0)分割:
:(。rng
はjava.util.Random
のインスタンスである)
double rand = rng.nextDouble();
if (rand < .1) {
return 1;
} else if (rand < .1 + .3) {
return 2;
} else {
return 3;
}
この方法は、容易にターゲット確率の任意のセットに一般化することができます。
これを試してください。
static final int[] RATES = { 1, 2, 2, 2, 3, 3, 3, 3, 3, 3 };
と
Random random = new Random();
int result = RATES[random.nextInt(RATES.length)];
** "確率に基づいてランダムな番号" ** ---それは、ランダムな数字は(あまりにも技術取得せずに)とにかくあるものではありませんか? – byxor
1から100の間の乱数を生成することができます。結果が1-10の場合は1、結果が10-40の場合は2、結果が40より大きい場合は3を返します。 – bhspencer
配列 ' {1、2、2、2、3、3、3、3} 'またはリストをシャッフルして1つを選択する –