まず、私は数学で最大ではないので、それに関係する何の無知を許してください。私は、複数回の実行の確率に基づいてランダム性を維持しようとしていますが、失敗しています。私は、この入力を持つJSONObjectJavaの複数回の実行で確率をどのように維持することができますか
{
"option1": 25,
"option2":25,
"option3" :10,
"option4" :40
}
これは、割り当てられた確率に基づいて上記JSONObjectから値を選択して、私の関数である。
public static String selectRandomoptions(JSONObject options) {
String selectedOption = null;
if (options != null) {
int maxChance = 0;
for (String option : options.keySet()) {
maxChance += options.getInt(option);
}
if (maxChance < 100) {
maxChance = 100;
}
Random r = new Random();
Integer randomValue = r.nextInt(maxChance);
int chance = 0;
for (String option : options.keySet()) {
chance += options.getInt(option);
if (chance >= randomValue) {
selectedOption = options.toLowerCase();
break;
}
}
}
}
機能は、私が呼び出した場合、合理的な誤差の範囲内に振る舞いますそれは1回の実行(テストされた100回以上の呼び出し)の回数ですが、問題は私たちが分析プロセス/データを検証するためにイベントドリブンアプリケーションでサンプルデータを生成するために毎回これを実行していますが、少なくとも妥当なマージンの範囲内である程度予測可能であるか?
私はこれにどのようにアプローチするか考えている人はいますか?私はむしろ何かを維持する必要はありませんが、それが理にかなっていたり、複雑さや時間を減らしているなら、私はそれに反対しません。
予測性の点でどのようなことをお探しですか?あなたはいつも同じシーケンスか、同じ確率で同じことを望んでいますか? –
@Salixalba基本的にこの関数は、生成された一意のユーザーが私たちのシステムに送信するリクエストボディを生成し、複数の週にわたって24&200日(異なる時間単位のブロックに分割)の間の任意の場所にすることができます。一週間後または毎日後には、割り当てられた確率と密接に一致する生成された要求の数の結果が表示されることが予想されますが、非常に大きな変化があるようです。 – jonnie