-
Notifications
You must be signed in to change notification settings - Fork 0
/
Network.java
88 lines (76 loc) · 2.92 KB
/
Network.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
import java.util.Random;
import java.util.ArrayList;
class Network {
private ArrayList<ArrayList<Neuron>> net = new ArrayList<ArrayList<Neuron>>();
private float fitnessValue;
public static final int RANGE = 1;
public Network (int[] layers) {
for (int index = 0; index < layers.length; index++) {
ArrayList<Neuron> layer = new ArrayList<Neuron>();
net.add(layer);
}
fitnessValue = 0;
generateConnections(layers);
}
private void generateConnections (int[] layers) {
ArrayList<Neuron> prev = null;
for (int i = 0; i < net.size(); i++) {
ArrayList<Neuron> layer = net.get(i);
for (int j = 0; j < layers[i]; j++) {
Random random = new Random();
float bias = random.nextFloat() * RANGE;
bias = -(RANGE/2.0f) + bias;
Neuron neuron = new Neuron(bias); //set random bias
if (prev != null) {
for(Neuron prevNeuron : prev) {
float weight = random.nextFloat() * RANGE;
weight = -(RANGE/2.0f) + weight;
neuron.addConnection(prevNeuron, weight); //set random weight
}
}
layer.add(neuron);
}
//this layer is done populating. move to the next layer
prev = layer;
}
}
//send some values to the nodes, which will propogate through the network and end up at the outputs
private ArrayList<Float> calculateOutput (ArrayList<Float> inputValues) {
if (net.get(0).size() != inputValues.size()) {
//invalid number of inputs. they should be the same amount as inputs.length
return null;
}
//set values of all first layer neurons
//set the value of each neuron to each input
for (int index = 0; index < net.get(0).size(); index++) {
Neuron neuron = net.get(0).get(index);
neuron.setValue(inputValues.get(index));
//don't compute sigmoid value for first layer
}
//do for all other layers
for (int index = 1; index < net.size(); index++) {
for (Neuron neuron : net.get(index)) {
neuron.computeSigmoidValue();
}
}
//get the results!
ArrayList<Float> outputResults = new ArrayList<Float>();
for (Neuron neuron : net.get(net.size() - 1)) {
float finalValue = neuron.getValue();
outputResults.add(finalValue);
}
return outputResults;
}
public ArrayList<ArrayList<Neuron>> getNet() {
return net;
}
public float getFitness () {
return fitnessValue;
}
public void setFitness (float fitnessValue) {
this.fitnessValue = fitnessValue;
}
public void addFitness (float addValue) {
this.fitnessValue += addValue;
}
}