import numpy as np


def funcaoAtivacao(valor):
    #A função de ativação degrau bipolar
    if valor < 0.0:
        return -1
    else:
        return 1


numEpocas = 100000 #Numero de epocas
q = 6 #Números de amostras

#Atributos
peso = np.array([113, 122, 107, 98, 115, 120])
ph = np.array([6.8, 4.7, 5.2, 3.6, 3.9, 4.2])

#Bias
bias = 1

#Entrada do perceptron
x = np.vstack((peso, ph))
#Saída
y = np.array([-1, 1, -1, -1, 1, 1])

#Taxa de aprendizado
eta = 0.1

#Define o vetor de pesos
w = np.zeros([1, 3])

#Array para armazenar os erros
e = np.zeros(6)

for j in range(numEpocas):
    for k in range(q):
        #insere o bias no vetor de entrada
        xb = np.hstack((bias, x[:, k]))

        #Calcula o campo induzido
        v = np.dot(w, xb) #Equação 5


        #Calcular a saida do perceptron
        yr = funcaoAtivacao(v) #Equação 6

        #Calcula o erro: e = (y - yr)
        e[k] = y[k] - yr

        #Treinamento do perceptron
        w = w + eta*e[k]*xb


print(' Vetor de erros (e) = ' + str(e))
print(' Vetor da rede = ' + str(yr))

import numpy as np


def funcaoAtivacao(valor):
    #A função de ativação degrau bipolar
    if valor < 0.0:
        return -1
    else:
        return 1


numEpocas = 100000 #Numero de epocas
q = 6 #Números de amostras

#Atributos
peso = np.array([113, 122, 107, 98, 115, 120])
ph = np.array([6.8, 4.7, 5.2, 3.6, 3.9, 4.2])

#Bias
bias = 1

#Entrada do perceptron
x = np.vstack((peso, ph))
#Saída
y = np.array([-1, 1, -1, -1, 1, 1])

#Taxa de aprendizado
eta = 0.1

#Define o vetor de pesos
w = np.zeros([1, 3])

#Array para armazenar os erros
e = np.zeros(6)

for j in range(numEpocas):
    for k in range(q):
        #insere o bias no vetor de entrada
        xb = np.hstack((bias, x[:, k]))

        #Calcula o campo induzido
        v = np.dot(w, xb) #Equação 5


        #Calcular a saida do perceptron
        yr = funcaoAtivacao(v) #Equação 6

        #Calcula o erro: e = (y - yr)
        e[k] = y[k] - yr

        #Treinamento do perceptron
        w = w + eta*e[k]*xb


print(' Vetor de erros (e) = ' + str(e))
print(' Vetor da rede = ' + str(yr))

#A função de ativação degrau bipolar #Numero de epocas #Números de amostras #Atributos #Bias #Entrada do perceptron #Saída #Taxa de aprendizado #Define o vetor de pesos #Array para armazenar os erros #insere o bias no vetor de entrada #Calcula o campo induzido #Equação 5 #Calcular a saida do perceptron #Equação 6 #Calcula o erro: e = (y - yr) #Treinamento do perceptron