【发布时间】: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 > x && rand < 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