void make_parent(int t) { //if(!automatic) { p++; pmax=p; } if(!automatic || !run) { if(oldparents) { for(int i=0; i= pmax) { fillparent = 0; } } if(fillparent >= maxparents) { fillparent = 0; p = maxparents; pmax = p; } } void evolve() { println(pmax); displfitness=false; clear(); int j; //save untouched or manuell-parents if(!automatic) { oldparents = true; for(j=0; j1) { while(p2==p1) p2 = int(random(pmax)); rnum = int(random(parents[p1].symbols)); forrest[j].genotype[0] = parents[p1].genotype[0]; forrest[j].deg = ((int) random(2)==0) ? parents[p1].deg : parents[p2].deg; for(int i=0; iPI) forrest[j].deg=PI; //mutate deg } else { //println("mutate rule "+(rnum-5)); if((abc[rnum-5]>='A'&&abc[rnum-5]<='Z') || evolve_lowercase) forrest[j].substitute[rnum-5] = mutate(forrest[j].substitute[rnum-5]); } } } for(int i=0; i1) { r1 = int(random(input.length())); output = input.substring(0,r1) + input.substring(r1+1); } else output=input; } else if (rnum==4) { // add 1 random letter r1 = int(random(input.length())); output = input.substring(0,r1) + abc[int(random(abc.length))]+ input.substring(r1); } else if(rnum==5) { // add push/pop r1 = int(random(input.length()-1)); r2 = int(random(r1+1,input.length())); output = input.substring(0,r1)+'['+input.substring(r1,r2)+']'+input.substring(r2); } else output = input; return output; } void measure_fitness() { fitness_checker = true; } void clear() { for(int i=0; i0; i--) { if(forrest[ranking[i]].fitness > forrest[ranking[i-1]].fitness) { dummy = ranking[i]; ranking[i] = ranking[i-1]; ranking[i-1] = dummy; } } } add_fitness(); // eliminate duplicates of best one for(int i=t-1; i>0; i--) { for(int j=i-1; j>0; j--) { if(forrest[ranking[i]].genotype[g].equals(forrest[ranking[j]].genotype[g])) { //println(ranking[i]+"="+ranking[j]); forrest[ranking[i]].fitness = f_worst; forrest[ranking[i]].startup(); forrest[ranking[i]].fitness_check = false; } } } //shuffling again while(descending()==false) { for(int i=t-1; i>0; i--) { if(forrest[ranking[i]].fitness > forrest[ranking[i-1]].fitness) { dummy = ranking[i]; ranking[i] = ranking[i-1]; ranking[i-1] = dummy; } } } //clean out parent list fillparent = 0; for(int i=0; i