Основано на this answer Я попытался сделать выбор колес рулетки в генетическом алгоритме.Выбор колесика рулетки в GA: ArrayIndexOutOfBoundsException error
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. Это случается, когда числоRand = 0 и цикл while не запускается ни разу? Но как это исправить?
Как я думал. Я просто: только если (j> 0), чем j = j-1; else j = 0 – PioPi0
Ну, в соответствии с ответом, который вы связали с вашей реализацией, имеет смысл. Но псевдокод не дает понять, что должно произойти, когда 'r = 0'. Я бы предложил 'rouletteIndex [i] = j == 0? 0: j - 1; 'как быстрое исправление. –