#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Created on Thu Feb  4 15:12:54 2021

@author: ojacques
"""
import numpy as np

def saida(net):
    if net > 0.1:
        return 1
    return 0

Dados=np.array([[20,10,0],
                [80,60,1],
                [-20,10,1]],float)
l,c = Dados.shape
taxaAprendizagem=0.2
X=np.c_[np.ones(l),Dados[:,:-1]] # o primeiro elemento é o viés (1)
d = Dados[:,-1]
W=[0.1,0.1,0.1] #pesos iniciais para o viés e os dados
delta = 0 # o erro entre a saida supervisionada e a saida de treinamento, inicialmente zero
contZeros=0
quaseZero = 10**(-15)
#começando o treino do neurônio
it=1
while contZeros<5:
   if abs(delta) <= quaseZero:   # Atentar que dependendo da função e do tamanho da rede
       contZeros+=1              # pode não dar zero exato
   for r in range(l):
        x = X[r,:]
        net = W@x # wv.1 + w1.x1 + w2.x2
        Y = saida(net) #função de saida para disparar o neurônio
        delta = d[r]-Y #erro entre saida correta e saida calculada
        DeltaW=taxaAprendizagem*delta*x #valor a ser usado no ajuste dos pesos
        W = W+DeltaW #ajuste dos pesos
        it+=1
print("W: ")
print(W)
print('Iterações: %d ' %it)

        
     
        
 

