# Univerzitet u Novom Sadu, Fakultet tehničkih nauka, Novi Sad, Srbija
# Studijski program OAS Informacioni inženjering
# Predmet Metode i tehnike nauke o podacima

# Pomoćni sadržaj


# %% Biblioteke

import random as rand
import numpy as np


# %% Klasa

class NeuronVU:
    def __init__(self, težine, prag, fakt):
        self.težine = težine
        self.prag = prag
        self.fakt = fakt
    
    def računanje_pročišćenog_ulaza(self, ulaz):
        return (self.težine * ulaz).sum() + self.prag
    
    def računanje_izlaza(self, ulaz):
        return self.fakt((self.težine * ulaz).sum() + self.prag)


# %% Upotreba

rand.seed(78)
broj_decimala = 2

def stepenasta_binarna(ulaz):
    return 1 if ulaz >= 0 else 0

veličina_ulaza = 5

težine = np.array([round(rand.uniform(-1, 1), broj_decimala) 
                   for i in range(veličina_ulaza)])
prag = round(rand.random(), broj_decimala)

neuron = NeuronVU(težine, prag, stepenasta_binarna)

for i in range(50):
    ulaz = np.array([round(rand.uniform(-100, 100), broj_decimala) 
                     for i in range(veličina_ulaza)])
    pročišćeni_ulaz = neuron.računanje_pročišćenog_ulaza(ulaz)
    izlaz = neuron.računanje_izlaza(ulaz)
    print("ulaz     = {}".format(ulaz))
    print("težine   = {}".format(neuron.težine))
    print("prag     = {}".format(neuron.prag))
    print("pr. ulaz = {}".format(pročišćeni_ulaz))
    print("izlaz    = {}".format(izlaz))
    print()

