Files
cs8803p4/src/model/playerModel/node/SigmoidNode.java

59 lines
1.1 KiB
Java

package model.playerModel.node;
import java.util.Hashtable;
import model.playerModel.Node;
public class SigmoidNode implements Node {
// Training rate.
private final double A = .15;
private final Hashtable<Node, Double> dendrites = new Hashtable<Node, Double>();
private final double s = 1; // Slope paramater for the activation function.
// It's doing nothing right now, but I figured
// I'd implement it as a tweaking option.
private final double THRESHOLD = .5;
public void addNode(Node n, double weight) {
dendrites.put(n, weight);
}
@Override
public boolean axon() {
double sum = 0;
for (Node n : dendrites.keySet()) {
sum += n.axon() ? dendrites.get(n) : 0;
}
return (activation(sum) > THRESHOLD);
}
@Override
public void learn(boolean correct) {
for (Node n : dendrites.keySet()) {
if (correct && n.axon()) {
dendrites.put(n, dendrites.get(n) + A);
n.learn(correct);
}
}
}
private double activation(double sum) {
// Sigmoid function:
// 1/(1+(e^(-bt)))
double a = -1 * s * sum;
a = Math.exp(a);
a = 1 + a;
a = 1 / a;
return a;
}
}