Redes Neurais Artificiais
De Aulas
Links relacionados: Inteligência Artificial
Neurônio Artificial Porta OU em C++11
1#include <iostream>
2
3using namespace std;
4
5class Neuronio
6{
7private:
8 int saida;
9 float N = 0.01;
10 int epocas = 100;
11 float peso[3];
12 int exemplo[4][4]
13 {
14 { -1, 0, 0, 0 },
15 { -1, 0, 1, 1 },
16 { -1, 1, 0, 1 },
17 { -1, 1, 1, 1 }
18 };
19public:
20 Neuronio();
21 void transferencia();
22 void treinamento_pesos(int j);
23 void treinamento();
24 int net(int j);
25 int executar(int x[2]);
26};
27
28Neuronio::Neuronio()
29{
30 for (int i = 0; i < 3; i++)
31 {
32 peso[i] = ((rand() % 200) - 100) / 100.0;
33 }
34}
35
36int Neuronio::net(int j)
37{
38 float y = 0;
39 for (int i = 0; i < 3; i++)
40 {
41 y += exemplo[j][i] * peso[i];
42 }
43 if (y > 0)
44 {
45 return 1;
46 }
47 return 0;
48}
49
50void Neuronio::treinamento_pesos(int j)
51{
52 for (int i = 0; i < 3; i++)
53 {
54 peso[i] = peso[i] + (N * (exemplo[j][3] - saida) * exemplo[j][i]);
55 }
56}
57
58void Neuronio::treinamento()
59{
60 int e = 0;
61 bool errou;
62 do
63 {
64 cout << "Epoca(" << e << ")" << endl;
65 errou = false;
66 for (int i = 0; i < 4; i++)
67 {
68 saida = net(i);
69 if (saida != exemplo[i][3])
70 {
71 treinamento_pesos(i);
72 errou = true;
73 }
74 cout << "...Pesos: " << peso[0] << " " << peso[1] << " " << peso[2] << endl;
75 }
76 e++;
77 }
78 while((e < epocas) && (errou));
79}
80
81int Neuronio::executar(int x[2])
82{
83 cout << "-1 * " << peso[0] << " + " << x[0] << " * " << peso[1] << " + " << x[1] << " + " << peso[2] << endl;
84 float y = (-1 * peso[0]) + (x[0] * peso[1]) + (x[1] * peso[2]);
85 if (y > 0)
86 {
87 return 1;
88 }
89 return 0;
90}
91
92int main()
93{
94 Neuronio n;
95 n.treinamento();
96 int continuar = 1;
97 while (continuar == 1)
98 {
99 int in[2];
100 cout << "x1: ";
101 cin >> in[0];
102 cout << "x2: ";
103 cin >> in[1];
104 cout << "retorno: " << n.executar(in) << endl;
105 cout << "continuar? ";
106 cin >> continuar;
107 }
108 return 0;
109}
Neurônio Artificial para Portas Lógicas em Java
1import java.util.*;
2
3public class Perceptron {
4 private double[] w = new double[3];
5 private double y = 0;
6 private double N = 0.1;
7 private final int BIAS = -1;
8 private final int MAX_EPOCAS = 1000;
9 private int operacao = 0;
10 private Random rand = new Random();
11 Scanner entrada;
12 private int[][] e = {
13 { 0, 0, 0, 0, 1, 1, 0 },
14 { 0, 1, 1, 0, 0, 1, 1 },
15 { 1, 0, 1, 0, 0, 1, 1 },
16 { 1, 1, 1, 1, 0, 0, 0 }
17 };
18
19 Perceptron(int op) {
20 if ((op >= 0) && (op < 5)) {
21 operacao = op + 2;
22 }
23 for (int i = 0; i < 3; i++) {
24 w[i] = ((rand.nextInt(20) + 1) / 10) - 1;
25 }
26 entrada = new Scanner(System.in);
27 }
28
29 int executar(int x1, int x2) {
30 // Somatorio NET
31 y = ((BIAS) * w[0]) + (x1 * w[1]) + (x2 * w[2]);
32 // Funcao de Transferencia
33 if (y > 0) {
34 return 1;
35 }
36 return 0;
37 }
38
39 boolean treinar() {
40 boolean treinou;
41 int epoca = 0;
42 do {
43 treinou = true;
44 for (int i = 0; i < 4; i++) {
45 int s = executar(e[i][0], e[i][1]);
46 if (s != e[i][operacao]) {
47 corrigirPeso(i, s);
48 treinou = false;
49 }
50 }
51 epoca++;
52 } while ((treinou == false) && (epoca < MAX_EPOCAS));
53 System.out.println("O algoritmo treinou " + epoca + " epocas...");
54 if (treinou == false) {
55 System.out.println("O algoritmo nao conseguiu convergir...");
56 }
57 return treinou;
58 }
59
60 void corrigirPeso(int exemplo, int saida) {
61 w[0] = w[0] + (N * (e[exemplo][operacao] - saida) * (BIAS));
62 w[1] = w[1] + (N * (e[exemplo][operacao] - saida) * e[exemplo][0]);
63 w[2] = w[2] + (N * (e[exemplo][operacao] - saida) * e[exemplo][1]);
64 }
65
66 void testar() {
67 boolean sair = false;
68 while (!sair) {
69 System.out.println("-- Digite 9 para sair --");
70 System.out.print("x1 : ");
71 int x1 = entrada.nextInt();
72 if (x1 == 9) {
73 sair = true;
74 } else {
75 System.out.print("x2 : ");
76 int x2 = entrada.nextInt();
77 int y = executar(x1, x2);
78 System.out.println(" y : " + y);
79 }
80 }
81 }
82
83 public static void main(String[] arguments) {
84 boolean erro = false;
85 if (arguments.length == 1) {
86 int op = Integer.valueOf(arguments[0]);
87 erro = ((op < 0) || (op > 4));
88 if (!erro) {
89 Perceptron p = new Perceptron(op);
90 if (p.treinar()) {
91 p.testar();
92 }
93 }
94 } else {
95 erro = true;
96 }
97 if (erro) {
98 System.out.println("Use: Perceptron <operacao>");
99 System.out.println("operacao:");
100 System.out.println("\t0 - ou");
101 System.out.println("\t1 - e");
102 System.out.println("\t2 - nao ou");
103 System.out.println("\t3 - nao e");
104 System.out.println("\t4 - ou exclusivo");
105 }
106 }
107}