clear();

k = 5;

// NA -> numero de aminoacidos
NA = input("Digite o numero de aminoacidos: ");
// N = -> numero de individuos
N = input("Digite o numero de individuos: ");
// W -> numeros de realizacoes
W = input("Digite o numero de realizacoes: ");
p = proteina(NA);
ma = 15; // numero maximo de aminoacidos numa dobra

Pop = list();// populacao de individuos
for j=1:N
   Pop(j)= individuo(NA,20)';
end

xbasc();
scf(0);
xtitle("Histograma das aptidoes para o algoritmo genetico");
// inicio da exclusao de individuos nao aptos
for j=1:W
   NPop = list();   
   vnp = newpop(N);
   for i=1:N
      NPop(i) = Pop(vnp(i));
   end
   Pop2 = get_pop(NPop,N/2);// tomada metade da populacao
   Pop2b = list();
   for i = (N/2+1):N
      Pop2b(1+$) = NPop(i);
   end
   for i=1:N/2
      d = pep_dobra_repr(Pop2(i),p);
      V(i) = aptidao(d); // calculadas as aptidoes mais altas
   end
   [Vn,indices] = sort(V); // individuos selecionados por aptidao
   Pop3 = list();
   for i=1:N/2
      Pop3(i) = Pop2(indices(i));
   end
   Pop4 = list();
   Pop4 = get_pop(Pop3,N/4);// tomado 1/4 dos mais aptos
   Son = list();
   i = 1;
   while (i <= N/8+1)  // crossing over
      pai = ceil(0.25*N*rand());
      mae = ceil(0.25*N*rand());
      while (pai == mae) 
	  pai = ceil(0.25*N*rand());
      end
      [pep1,pep2] = crossover(Pop4(pai),Pop4(mae),N);
      Son($+1) = pep1;
      Son($+1) = pep2;
      i = i+1;
      
   end
   
   if length(Son) > length(Pop4) then
      Son($) = null();
   end
   //disp(length(Son));
   XY = list();
   XY = lstcat(Pop4,Son);
   YX = list();
   for i=1:length(XY)
      aind = XY(i);
      xpep = mutacao(aind);
      YX(i) = xpep;
   end
   //disp(length(YX));
   Fpop = list();
   Fpop = lstcat(Pop2b,YX);
   //disp(length(Fpop));
   for i=1:N
      d = pep_dobra_repr(Fpop(i),p);
      VF(i) = aptidao(d); // calculadas as aptidoes mais altas
   end
   Apt(j) = mean(VF);
   Std(j) = st_deviation(VF);
   if (j/10 == int(j/10)) then
      [xi,hxi]=histograma(VF',int(N/5)); 
      subplot(k,k,j/10);
      hxi=hxi/N;
      bar(hxi);
   end
   
   Pop = Fpop;
end


   
scf(1);
xbasc();
plot2d([1:W],Apt,-8);
errbar([1:W],Apt,Std/2,Std/2);
xtitle(" Aptidao media dos individuos para cada geracao ", "geracao", "Aptidao Media");
    
scf(2);
xbasc();
plot_pep(Fpop($));
       

 
