public NeuralNetwork(int input, int hidden, int output) { this.layers = new int[] {input, hidden, output}; df = new DecimalFormat("#0.000#"); ef = new DecimalFormat("#"); /** Create all neurons and connections Connections are created in the neuron class */ for (int i = 0; i < layers.length; i++) { if (i == 0) { // input layer for (int j = 0; j < layers[i]; j++) { Neuron neuron = new Neuron(); inputLayer.add(neuron); } } else if (i == 1) { // hidden layer for (int j = 0; j < layers[i]; j++) { Neuron neuron = new Neuron(); neuron.addInConnectionsS(inputLayer); neuron.addBiasConnection(bias); hiddenLayer.add(neuron); } } else if (i == 2) { // output layer for (int j = 0; j < layers[i]; j++) { Neuron neuron = new Neuron(); neuron.addInConnectionsS(hiddenLayer); neuron.addBiasConnection(bias); outputLayer.add(neuron); } } else { System.out.println("!Error NeuralNetwork init"); } } // initialize random weights for (Neuron neuron : hiddenLayer) { ArrayList<Connection> connections = neuron.getAllInConnections(); for (Connection conn : connections) { double newWeight = getRandom(); conn.setWeight(newWeight); } } for (Neuron neuron : outputLayer) { ArrayList<Connection> connections = neuron.getAllInConnections(); for (Connection conn : connections) { double newWeight = getRandom(); conn.setWeight(newWeight); } } // reset id counters Neuron.counter = 0; Connection.counter = 0; if (isTrained) { trainedWeights(); updateAllWeights(); } }