downChar = 97;%32; upChar = 123; string = 'ahoj ako sa mas'; stringSize = size(string,2); listOfNumInGroup = [2 3 4 5 6 7 8 9 10]; listOfNumInPopulation = [60 60 60 60 60 63 64 63 60]; X = 50; meanData = []; stdData = []; maxData = []; minData = []; for groupID = 1:size(listOfNumInGroup,2) numInGroup = listOfNumInGroup(:,groupID); numInPopulation = listOfNumInPopulation(:,groupID); statGenerations = []; for cycle = 1:X population = downChar + floor(rand(numInGroup,stringSize,numInPopulation/numInGroup)*(upChar-downChar+1)); population(find( population > 122 )) = 32; evolutionEnd = 0; numOfGeneration = 1; while evolutionEnd == 0 for k = 1:size(population,3) fitness = []; maxMy = []; minMy = []; for i = 1:numInGroup x = sum((string - population(i,:,k)) == 0); fitness = [fitness x]; end maxMy = find(fitness == max(fitness)); minMy = find(fitness == min(fitness)); if size(maxMy,2) > 1 a = maxMy(1 + floor(rand*(size(maxMy,2)))); else a = maxMy(1); end if size(minMy,2) > 1 b = minMy(1 + floor(rand*(size(minMy,2)))); else b = minMy(1); end population(b,:,k) = population(a,:,k); population(b,1 + floor(rand*(stringSize)),k) = downChar + floor(rand*(upChar-downChar+1)); population(b,find( population(b,:,k) > 122 ),k) = 32; if sum((string - population(b,:,k)) == 0) == stringSize evolutionEnd = 1; end end numOfGeneration = numOfGeneration + 1; end statGenerations = [statGenerations numOfGeneration]; end meanData = [meanData mean(statGenerations)]; stdData = [stdData std(statGenerations)]; maxData = [maxData max(statGenerations)]; minData = [minData min(statGenerations)]; 'done' end 'doneAll'