Java 如何选择范围内的随机数,但加权到该范围的一部分?(爪哇语)

Java 如何选择范围内的随机数,但加权到该范围的一部分?(爪哇语),java,random,apache-commons,Java,Random,Apache Commons,我想选择一个数字范围内的随机数,但权重是该范围的一部分。例如: Pick a random number between 1-10 If it is <= 6 Return a random number between 1-5 Else Return a random number between 6-10 EndIf 选择1-10之间的随机数 称重,使1-5比6-10可能高20% 这可能吗?我该怎么做呢?这取决于你希望概率分布的样子 例如: Pick a random

我想选择一个数字范围内的随机数,但权重是该范围的一部分。例如:

Pick a random number between 1-10
If it is <= 6
    Return a random number between 1-5
Else
    Return a random number between 6-10
EndIf
  • 选择1-10之间的随机数
  • 称重,使1-5比6-10可能高20%

  • 这可能吗?我该怎么做呢?

    这取决于你希望概率分布的样子

    例如:

    Pick a random number between 1-10
    If it is <= 6
        Return a random number between 1-5
    Else
        Return a random number between 6-10
    EndIf
    
    选择1-10之间的随机数
    
    如果是则会想到两种解决方案。首先,随机运行两次:

    java.utils.Random randomGenerator = new java.utils.Random();
    int random = randomGenerator.nextInt(11);
    if(random <= 6) { //This is 20% more
        random = randomGenerator.nextInt(5) + 1;
    } else {
        random = randomGenerator.nextInt(5) + 6;
    }
    
    java.utils.Random randomGenerator=new java.utils.Random();
    int random=randomGenerator.nextInt(11);
    如果(随机尝试以下方法:

    public int weightedRandom() {
      int rand = Math.floor(Math.random() * 5 + 1) // From 1 to 5
      if (Math.random() >= 0.6) {
        ++rand;
      }
      return rand;
    }
    

    要生成概率钟形曲线,滚动并求和多个骰子。然后减去平均值。如果结果为负,则重新滚动。滚动的骰子越多,权重越大

    这里有一种方法,完全未经测试

    float sum;
    do {
       sum = rollThreeDice(); // returns 3 to 18, with an average is 10.5
       sum -= 10.5;           // Now the range is 0 to 7.5, with the lower end being more likely.
       } while(sum < 0);
    return sum;
    
    浮点数;
    做{
    sum=rollThreeDice();//返回3到18,平均值为10.5
    sum-=10.5;//现在的范围是0到7.5,下限更可能。
    }和<0;
    回报金额;
    

    当然,你可以用任意数量的边掷骰子来产生所需的范围。你可以通过选择骰子的数量来控制频率曲线。

    你希望1是最有可能的,10是最不可能的,还是希望1-5是同样有可能的,6-10是同样有可能的?我玩各种骰子游戏。我从来没有考虑过我写了这个问题。所以给你+1!这正是我最后要做的!因为它有效,而且你在我之前就发布了它,我将此标记为答案。谢谢!