【问题标题】:Java: Applying probability constraints on Random() [closed]Java:对 Random() 应用概率约束 [关闭]
【发布时间】:2016-03-02 07:05:37
【问题描述】:

我从来没有特别精通 Java 随机函数。

我正在使用

int myrandom = ThreadLocalRandom.current().nextInt(x, y+1)

将在变量 x 和 y 之间计算 myrandom 的值。

它自身的值并不完全相关,我可能只是将其设置为 0 和 1000,然后运行一个算法来解释该值。

        for(int i = 0; i < 4; i++){

            if( randmods[i].gtr_less(choice) ){
                choice = i;
                break;

            }else{
                continue;

            }
        }

功能简单的地方:

public boolean gtr_less(int value){

    if(value > mod_min && value < mod_max){
        return true;

    }else{

        return false;
    }

}

基本方法是使用if(rand &gt; x &amp;&amp; rand &lt; y)评估所有可能性

问题是,我想将我放置在每个范围内的修饰符限制在 0-1000 之间。

所以如果是 10 例,它们是:

Z>0 && Z100 && Z200 && Z

...等等,我想将约束更改为 Z>0 && Z110 Z

如您所见,也可能猜到,以这种方式处理数据是一件非常痛苦的事情,我确信一定有更好的方法来做到这一点,可能使用模数。

主要问题是当我只想更改一个时,我必须修改 /all/ 的情况。当我必须将默认值恢复为一个而不是其他时,事情会变得相当复杂。

我的数学技能不是那么敏锐,因此感谢任何帮助。

【问题讨论】:

  • 目前还不清楚您要达到的目标。您是说要生成随机数并将它们放入不同大小的箱中以定制与每个箱相关的概率吗?为简单起见,假设范围为 [0..9]。如果我有 5 个宽度为 2 的箱子,那么每个箱子都有 20% 的机会被选中。如果我制作 3 个宽度为 3、5 和 2 的箱子,那么这些箱子的概率分别为 30%、50% 和 20%。这是你想要做的吗?
  • @JimGarrison 是的,我相信就是这样。
  • @JimGarrison 实际上,就是这样。只有箱的数量是可变的,它们的长度也是可变的。这就是让事情变得复杂的原因。
  • @JimGarrison 如果你想一想,每次你增加一个 bin 的大小,每个 bin 的大小都必须减小,否则值会超出范围。
  • @JimGarrison 这是一个非常复杂的解决方案,我愿意这样做,但我想确保没有更好的数学解决方案。我要做的就是将修饰符放在给定 bin 的 %likelihood 上。

标签: java random constraints artificial-intelligence probability


【解决方案1】:

这是一种方法。

  1. 确定 bin 的大小以实现所需的分布。
  2. 确定所有箱子大小的总和,称之为n
  3. 分配一个int[] slots = new int[n];
  4. 预填充数组,使每个槽都包含 bin 编号
  5. 生成一个介于0和n-1之间的随机数,称为x
  6. slots[x]读取bin号

【讨论】:

  • 等等,不,还是同样的问题。
  • x 和 y 代表值,如果我只放大一个而不重新调整其他大小,则 bin 之间会有重叠。
  • 所以你必须对事物进行缩放以保持相对概率。您仍然可以使用这种方法动态地做事。您必须在 某处 确定 bin 宽度和相对概率,最简单的方法是提供 bin 宽度列表。那些你必须自己计算,因为只有你知道你想要什么相对概率。 实现的最简单方法是仅输入 bin 宽度并使用我概述的过程。您让算法将 bin 宽度转换为数据结构以便快速访问。
  • 垃圾箱的大小发生变化。这就是问题。如果箱是 A、B、C 和 D,全部为 25%,如果我想将 A 增加到 30%,即使我增加了数组的最大大小,所有的 x,y 值都必须更改。除非你有幸在最后增加了一个垃圾箱。
  • 我没有看到解决方案,但我不知道......也许你把它编码出来?
猜你喜欢
  • 2022-09-29
  • 2012-11-07
  • 2013-07-18
  • 2012-08-22
  • 2012-12-30
  • 1970-01-01
  • 2021-10-08
  • 2017-03-28
  • 1970-01-01
相关资源
最近更新 更多