%input=randi(100,2,input_num+1);
input_num = input('plz add num... :')
input_ar=floor(1 + (100-1+1) .* rand(2,input_num+1))
first_generation=zeros(100,input_num);
% try to make first generation
for z=1:100
first_generation(z,:)=randperm(input_num);
end
subplot(4,2,1:4)
plot(input_ar(1,first_generation(1,:)),input_ar(2, first_generation(1,:)),'*');
for k=1:500
if k==1||k==200||k==50||k==500
switch k
case 1
subplot(4,2,5)
case 50
subplot(4,2,6)
case 200
subplot(4,2,7)
case 500
subplot(4,2,8)
end
plot(input_ar(1,first_generation(1,:)),input_ar(2, first_generation(1,:)),'r');
title(['step = ',int2str(k)]);
end
%calculate distance
distance=zeros(1,100);
for i=1:100
for j=1:input_num
if(j~=input_num)
temp_x=(input_ar(1,first_generation(i,j))-input_ar(1,first_generation(i,j+1)))^2;
temp_y=(input_ar(2,first_generation(i,j))-input_ar(2,first_generation(i,j+1)))^2;
else
temp_x=(input_ar(1,first_generation(i,j))-input_ar(1,input_num+1))^2;
temp_y=(input_ar(2,first_generation(i,j))-input_ar(2,input_num+1))^2;
end
temp_dis=sqrt(temp_x+temp_y);
distance(1,i)=distance(1,i)+temp_dis;
end
end
%sort generation according to it's distance
generation=first_generation;
generation(:,input_num+1)=distance';
sort_generation=sortrows(generation,input_num+1);
for h=1:input_num
sort2_generation(:,h)=sort_generation(:,h);
end
%first operation :create shifted matrix: shiftsize is random
% shift_num=randi(input_num);
shift_num=floor(1 + (input_num-1+1) .* rand(1,1))
for p=50:99
sort2_generation(p,:)=circshift(sort2_generation(p ,:),[0 shift_num]);
end
%second operation : mutation
% mut(k,:)=randi(input_num,1,2);
mut(k,:)=floor(1 + (input_num-1+1) .* rand(1,2))
while(mut(k,1)==mut(k,2))
mut(k,:)=floor(1 + (input_num-1+1) .* rand(1,2))
% mut(k,:)=randi(input_num,1,2);
end
sort2_generation(100,mut(k,1))=sort2_generation(10 0,mut(k,1))+sort2_generation(100,mut(k,2));
sort2_generation(100,mut(k,2))=sort2_generation(10 0,mut(k,1))-sort2_generation(100,mut(k,2));
sort2_generation(100,mut(k,1))=sort2_generation(10 0,mut(k,1))-sort2_generation(100,mut(k,2));
%new generation
first_generation=sort2_generation;
end