Advertisement
Guest User

Untitled

a guest
Oct 20th, 2018
74
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 3.15 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <conio.h>
  4. #include <time.h>
  5. #include <ctype.h>
  6.  
  7. #define TC 20
  8. #define TP 10
  9. #define TM 3
  10.  
  11. int perfeito[TC];
  12.  
  13. int cromossomo[TP][TC];
  14.  
  15. int desempenho[500];
  16. int ultimoIndex = 0;
  17.  
  18. //Contador de geracoes
  19. int geracao = 1;
  20.  
  21. void escrever()
  22. {
  23.     FILE *arq;
  24.     int teste,i;
  25.     arq = fopen("arquivo.txt","wb");
  26.     if(arq != NULL)
  27.     {
  28.        for(i=0;i<sizeof(desempenho);i++)
  29.        {
  30.          teste = fwrite(desempenho[i],sizeof(desempenho),1,arq);
  31.           if (teste !=1)
  32.            {
  33.               printf("erro ao salvar");
  34.               getch();
  35.             }
  36.           }
  37.             fclose(arq);
  38.        }
  39.           else
  40.           {
  41.              printf("erro ao abrir arquivo");
  42.           }
  43. }
  44.  
  45. void mutacao(int pai)
  46. {
  47.     for (int i=0; i<TP; i++)
  48.     {
  49.         if (i == pai) continue;
  50.         for (int j=0; j<TC; j++)
  51.         {
  52.             if (rand()%100 < TM)
  53.             {
  54.                 cromossomo[i][j] = rand()%4;
  55.             }
  56.         }
  57.     }
  58.  
  59.     //Printar ponpulacao
  60.     for (int k=0; k<TP; k++)
  61.     {
  62.         for (int m=0; m<TC; m++)
  63.         {
  64.             if (m==0 && k==0) printf("\n");
  65.             printf(" %d", cromossomo[k][m]);
  66.             if (m == TC - 1) printf("\n");
  67.         }
  68.     }
  69.  
  70.     //verificar();
  71. }
  72.  
  73.  
  74. void crossover(int pai)
  75. {
  76.  
  77.     for (int i=0; i<TC; i++)
  78.     {
  79.         for (int j=0; j<TP; j++)
  80.         {
  81.             if (j==pai) continue;
  82.  
  83.             int valor1 = cromossomo[pai][i];
  84.             int valor2 = cromossomo[j][i];
  85.  
  86.             cromossomo[j][i] = rand()%2?valor1:valor2;
  87.         }
  88.     }
  89.  
  90.     mutacao(pai);
  91.     fitness();
  92. }
  93.  
  94. void fitness()
  95. {
  96.     int pontuacao[TP];
  97.     int maiorPontuacao;
  98.     int pai;
  99.  
  100.     for (int i=0; i<TP; i++)
  101.     {
  102.         pontuacao[i] = 0;
  103.         for (int j=0; j<TC; j++)
  104.         {
  105.            if (cromossomo[i][j] == perfeito[j]) pontuacao[i]++;
  106.         }
  107.     }
  108.  
  109.     maiorPontuacao = pontuacao[0];
  110.  
  111.     for (int k=0; k<TP; k++)
  112.     {
  113.         if (pontuacao[k] >= maiorPontuacao)
  114.         {
  115.             maiorPontuacao = pontuacao[k];
  116.             pai = k;
  117.         }
  118.     }
  119.  
  120.     printf("Melhor cromossomo.:");
  121.     for (int b=0; b<TC; b++)
  122.     {
  123.         printf(" %d", cromossomo[pai][b]);
  124.     }
  125.     geracao++;
  126.     printf("\t %d \t %d", pontuacao[pai], geracao);
  127.  
  128.     if (pontuacao[pai] == TC)
  129.     {
  130.         printf("\n\nCriterio de parada atingido!!!");
  131.         //escrever();
  132.         getch();
  133.     }
  134.     else
  135.     {
  136.         desempenho[ultimoIndex] = pontuacao[pai];
  137.         crossover(pai);
  138.     }
  139.  
  140.  
  141. }
  142.  
  143.  
  144.  
  145. void gerarPopulacao()
  146. {
  147.     srand(time(NULL));
  148.     for(int i=0; i<TP; i++)
  149.     {
  150.         for (int j=0; j<TC; j++)
  151.         {
  152.             cromossomo[i][j] = rand()%4;
  153.         }
  154.     }
  155.  
  156.     printf("Populacao gerada.:\n\n");
  157.     for (int k=0; k<TP; k++)
  158.     {
  159.         for (int m=0; m<TC; m++)
  160.         {
  161.             printf(" %d", cromossomo[k][m]);
  162.             if (m == TC - 1) printf("\n");
  163.         }
  164.     }
  165.  
  166.     fitness();
  167.  
  168. }
  169.  
  170. int main()
  171. {
  172.     for (int x=0; x<TC; x++)
  173.     {
  174.         perfeito[x] = 1;
  175.     }
  176.     gerarPopulacao();
  177.     return 0;
  178. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement