import java.util.*; import java.io.*; import java.lang.Math; class MancalaNetwork extends MancalaPlayer implements Cloneable { //constants private int NUM_BINS=3; private int MAX_STONES = 16; private int NUM_HIDDEN_NEURONS=10; private double LAMBDA=0.7; private double ALPHA=0.000001; //variables private Neuron[] inputNeurons; private Neuron[] hiddenNeurons; private Neuron outputNeuron; private Delta inputDelta; private Delta inputDeltaAcc; private Delta hiddenDelta; private Delta hiddenDeltaAcc; private Delta outputDelta; private Delta outputDeltaAcc; public int playerNum; public MancalaNetwork opp; //Constructor for new network public MancalaNetwork(int playerNum) { this.initNeurons(); this.playerNum = playerNum; } private void initNeurons() { //Input layer this.inputNeurons = new Neuron[2*this.NUM_BINS]; this.inputDelta = new Delta(2*this.NUM_BINS, this.MAX_STONES); this.inputDeltaAcc = new Delta(2*this.NUM_BINS, this.MAX_STONES); for (int i=0; i<2*this.NUM_BINS; ++i) this.inputNeurons[i] = new Neuron(this.MAX_STONES); //Hidden layer this.hiddenNeurons = new Neuron[this.NUM_HIDDEN_NEURONS]; this.hiddenDelta = new Delta(this.NUM_HIDDEN_NEURONS, 2*this.NUM_BINS); this.hiddenDeltaAcc=new Delta(this.NUM_HIDDEN_NEURONS, 2*this.NUM_BINS); for (int i=0; i max) max = Math.abs(this.weights[i]); } for (int i=0; i bestScore) { bestScore = tempScore; move = i; } } } this.bprop(bestScore-oldScore); this.updateDeltas(); //System.out.println("Move: "+move+"\nScore: "+bestScore); return move; } public void gameOver(Mancala mancala, double score) { double oldScore = this.scoreBoard(mancala); this.bprop(score-oldScore); this.updateDeltas(); this.updateNetwork(); /* for (int i=0; ipadding) System.err.println("TOO MANY STONES FOR NETWORK TO HANDLE ("+num+")"); double[] array = new double[padding]; for (int i=0; i