gpt4 book ai didi

java - GA : ArrayIndexOutOfBoundsException error 中的轮盘选择

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:17:44 25 4
gpt4 key购买 nike

基于 this answer我试过用遗传算法进行轮盘赌选择。

private static final int NUMBER_OF_TOURISTS = 20;

private static int[] roulette(int population[]) {
int sumProb = 0;
for (int i = 0; i < population.length; i++) {
sumProb += population[i];
}

int[] rouletteIndex = new int[NUMBER_OF_TOURISTS];
Random r = new Random();
for (int i = 0; i < NUMBER_OF_TOURISTS; i++) {
int numberRand = r.nextInt(sumProb);
//-------------------------------------------------------
int j = 0;
while (numberRand > 0) {
numberRand = numberRand - population[j];
j++;
}
rouletteIndex[i] = j-1;
//-------------------------------------------------------
}
return rouletteIndex;
}

之后我得到:

[6, 2, -1, 19, 13, 2, 14, 2, 6, 19, 7, 14, 18, 0, 1, 9, 13, 10, 7, 2]

“-1”?但是,当 j 应该始终大于 0 时。当 numberRand = 0 而不是 while 循环甚至一次都没有开始时会发生这种情况吗?但是如何解决这个问题呢?

最佳答案

Random.nextInt(int bound)返回 0(包括)到指定的边界(不包括)。

所以你的循环:

while (numberRand > 0) {
numberRand = numberRand - population[j];
j++;
}

如果 nextInt(int bound) 返回 0,则不会运行,导致 j 在以下位置为 0:rouletteIndex[i] = j-1;

关于java - GA : ArrayIndexOutOfBoundsException error 中的轮盘选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41716524/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com