Advertisement
Guest User

Exemplo de Implementação em C

a guest
Sep 22nd, 2017
65
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.01 KB | None | 0 0
  1. Exemplo de Implementação em C
  2. // dados de entrada
  3. float x1[12] = {-3,-2, 1,-2,-2, 0, 1,-1,-2.5,-2.0, 0,-3.5};
  4. float x2[12] = { 1,-2, 1, 2,-2, 2, 2,-3, 1.5,-2.5, 1, 2.0};
  5. // estado inicial dos vetores de peso
  6. float w1[4] = { 0, 1, 0,-1};
  7. float w2[4] = { 1, 0,-1, 0};
  8. // espaco de saida
  9. float S1[4] = { 0, 1, 1, 0};
  10. float S2[4] = { 1, 1, 0, 0};
  11. int iX = 0; // entrada atual
  12. int iter = 1; // iteracao atual
  13. int fConv = 90; // delimita iteracao da fase de convergencia
  14. int nD = 12; // numero de dados
  15. // encontra o neurônio vencedor pelo calculo da menor distancia
  16. // wV = neuronio vencedor
  17. wV = 0; // indice do neuronio vencedor
  18. float dist[4] = { 0, 0, 0, 0 }; // vetor de distancias
  19. for (int j=0; j<nN; j++)
  20. {
  21. // calcula distancia euclidiana
  22. dist[j]= sqrt( (pow(x1[at]-w1[j],2)) + (pow(x2[at]-w2[j],2)) );
  23. // verifica a menor distancia
  24. if (dist[j] <= dist[wV])
  25. wV = j;
  26. }
  27. // verifica entre todos os neuronios,
  28. // quais estao na regiao de vizinhanca ( wV = neuronio vencedor )
  29. for (int j=0; j<nN; j++)
  30. {
  31. // verifica se esta na regiao de vizinhanca
  32. // note que o calculo e feito no espaco de saida (S)
  33. distviz = sqrt( (pow(S1[wV]-S1[j],2)) + (pow(S2[wV]-S2[j],2)) );
  34. // se estiver dentro do raio (funcao de vizinhanca circular),
  35. // atualiza o vetor de peso
  36. if (distviz <= raio)
  37. {
  38. w1[j] = w1[j]+alpha*(x1[act]-w1[j]);
  39. w2[j] = w2[j]+alpha*(x2[act]-w2[j]);
  40. }
  41. }
  42. // escolhe nova entrada aleatoria entre 0 e nD (entre os dados)
  43. act = (int)(nD * rand() / (RAND_MAX + 1.0));
  44. iter++; // incrementa iteraçao
  45. if (iter == fConv) // quando entra na fase de Convergencia
  46. { alpha = 0.25; // atualiza parametros
  47. raio = 0.5;
  48. }
  49. // a cada duas iteracoes decrementa taxa de aprendizagem
  50. if (iter % 2 == 0)
  51. {
  52. if (iter < fConv) // decremento na fase de Ordenacao
  53. alpha-= 0.01;
  54. if (iter >= fConv) // decremento na fase de Convergencia
  55. alpha-= 0.001;
  56. if (alpha <=0) // protecao para alpha <= 0
  57. alpha-= 0.0005;
  58. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement