package aima.learning.statistics; import java.util.ArrayList; import java.util.List; public class Neuron { private double bias; private ActivationFunction activationFuncton; private List inLinks, outLinks; private boolean inputAccepted; private double activation; public Neuron() { this.activationFuncton = new TanhActivationFunction(); this.bias = 1.0; inLinks = new ArrayList(); outLinks = new ArrayList(); inputAccepted = false; } public Neuron(double bias) { this(); this.bias = bias; } public Neuron(double bias, ActivationFunction activationFunction) { this(bias); this.activationFuncton = activationFunction; } public double bias() { return bias; } public double error(double value) { return value - activation; } public double netInput() { double sum = 0; for (Link link : inLinks) { sum += link.source().activation() * link.weight(); } sum += bias; return sum; } public double activation() { return activation; } public void update() { if (!inputAccepted) { double netInput = netInput(); activation = activationFuncton.activation(netInput); } } public List inLinks() { return inLinks; } public List outLinks() { return outLinks; } public void connectTo(Neuron n, double d) { Link link = new Link(this, n, d); this.outLinks.add(link); n.inLinks.add(link); } public List weights() { List weights = new ArrayList(); for (Link link : inLinks) { weights.add(link.weight()); } return weights; } public void acceptAsInput(double d) { inputAccepted = true; activation = d; } /** * @return Returns the activationFuncton. */ public ActivationFunction getActivationFuncton() { return activationFuncton; } public void setBias(double bias) { this.bias = bias; } }