Witam,
Mam program który symuluje działanie Klasycznego Algorytmu Genetycznego.
Tablica String populacja[] posiada elementy w postaci np. ("001101001", "001101001").
Metoda "mutate2" polega na zamianie dowolnego losowego znaku w stringu w losowym elemencie tablicy populate na przeciwny (0->1; 1->0). Każdy element tablicy jest długości bytes*2 znaków.
przy populate[5] i mniejszych wszystko działa poprawnie algorytm wykonuje się kilkanaście tysięcy razy bez problemu.
Jednak dla tablic większych niz 5 wywala mi:
"Exception in thread "main" java.lang.NullPointerException"
ze wskazaniem na linię:
mutated = population[j].charAt(index);
i rzeczywiście w tablicy population pojawiają się null'e nie wiadomo skąd.
Kod metody:
public void mutate2(double prob, int bytes)
{
Date now = new Date();
int index;
String temp;
char mutated;
Random rndm = new Random(now.getTime());
for(int i=0; i<population.length*bytes*2; i++)
{
if(rndm.nextDouble()<prob)
{
int j;
j=rndm.nextInt(population.length);
index = rndm.nextInt(bytes*2);
mutated = population[j].charAt(index);
if(mutated=='1')
{
mutated='0';
}else
{
mutated='1';
}
temp=population[j].substring(0, index)+mutated+population[j].substring(index+1);
population[j]=temp;
}
}
}
kod algorytmu w lepszej formie z numerami linii tutaj:
http://wklej.to/lMnb
Dodam jeszcze, że po wyłączeniu mutacji, gdy działa tylko selekcja(ruletka) wszystko działa, wiec problem musi tkwić w metodzie mutate2