/// <summary> /// Create a neural network for XOR. /// </summary> public static void ProcessXor() { Console.WriteLine("Boolean XOR"); var inputs = new List <InputNeuron>(); inputs.Add(new InputNeuron()); inputs.Add(new InputNeuron()); var hidden1 = new List <RegularNeuron>(); hidden1.Add(new RegularNeuron(-0.5)); hidden1.Add(new RegularNeuron(-1.5)); hidden1[0].Parents.Add(new Connection(1, inputs[0])); hidden1[0].Parents.Add(new Connection(1, inputs[1])); hidden1[1].Parents.Add(new Connection(1, inputs[0])); hidden1[1].Parents.Add(new Connection(1, inputs[1])); var hidden2 = new RegularNeuron(0.5); hidden2.Parents.Add(new Connection(-1, hidden1[1])); var output = new RegularNeuron(-1.5); output.Parents.Add(new Connection(1, hidden1[0])); output.Parents.Add(new Connection(1, hidden2)); TruthTable(inputs, output); }
/// <summary> /// Create a neural network for NOT. /// </summary> public static void ProcessNot() { Console.WriteLine("Boolean NOT"); List<InputNeuron> inputs = new List<InputNeuron>(); inputs.Add(new InputNeuron()); RegularNeuron output = new RegularNeuron(0.5); output.Parents.Add(new Connection(-1, inputs[0])); TruthTable(inputs, output); }
/// <summary> /// Create a neural network for NOT. /// </summary> public static void ProcessNot() { Console.WriteLine("Boolean NOT"); var inputs = new List <InputNeuron>(); inputs.Add(new InputNeuron()); var output = new RegularNeuron(0.5); output.Parents.Add(new Connection(-1, inputs[0])); TruthTable(inputs, output); }
/// <summary> /// Create a neural network for OR. /// </summary> public static void ProcessOr() { Console.WriteLine("Boolean OR"); List <InputNeuron> inputs = new List <InputNeuron>(); inputs.Add(new InputNeuron()); inputs.Add(new InputNeuron()); RegularNeuron output = new RegularNeuron(-0.5); output.Parents.Add(new Connection(1, inputs[0])); output.Parents.Add(new Connection(1, inputs[1])); TruthTable(inputs, output); }
/// <summary> /// Display a truth table and query the neural network. /// </summary> /// <param name="inputs">The inputs.</param> /// <param name="output">The output.</param> public static void TruthTable(IList <InputNeuron> inputs, RegularNeuron output) { var v = new double[inputs.Count]; var done = false; while (!done) { for (var i = 0; i < inputs.Count; i++) { inputs[i].Value = v[i]; } var o = output.Compute(); Console.WriteLine(v + " : " + o); // Roll forward to next row var i2 = 0; while (i2 < v.Length) { v[i2] += 1; if (v[i2] > 1) { v[i2] = 0; i2 += 1; } else { break; } } if (i2 == v.Length) { done = true; } } }
/// <summary> /// Display a truth table and query the neural network. /// </summary> /// <param name="inputs">The inputs.</param> /// <param name="output">The output.</param> public static void TruthTable(IList<InputNeuron> inputs, RegularNeuron output) { var v = new double[inputs.Count]; var done = false; while (!done) { for (var i = 0; i < inputs.Count; i++) { inputs[i].Value = v[i]; } var o = output.Compute(); Console.WriteLine(v + " : " + o); // Roll forward to next row var i2 = 0; while (i2 < v.Length) { v[i2] += 1; if (v[i2] > 1) { v[i2] = 0; i2 += 1; } else { break; } } if (i2 == v.Length) { done = true; } } }
/// <summary> /// Create a neural network for AND. /// </summary> public static void ProcessAnd() { Console.WriteLine("Boolean AND"); var inputs = new List<InputNeuron>(); inputs.Add(new InputNeuron()); inputs.Add(new InputNeuron()); var output = new RegularNeuron(-1.5); output.Parents.Add(new Connection(1, inputs[0])); output.Parents.Add(new Connection(1, inputs[1])); TruthTable(inputs, output); }
/// <summary> /// Create a neural network for XOR. /// </summary> public static void ProcessXor() { Console.WriteLine("Boolean XOR"); var inputs = new List<InputNeuron>(); inputs.Add(new InputNeuron()); inputs.Add(new InputNeuron()); var hidden1 = new List<RegularNeuron>(); hidden1.Add(new RegularNeuron(-0.5)); hidden1.Add(new RegularNeuron(-1.5)); hidden1[0].Parents.Add(new Connection(1, inputs[0])); hidden1[0].Parents.Add(new Connection(1, inputs[1])); hidden1[1].Parents.Add(new Connection(1, inputs[0])); hidden1[1].Parents.Add(new Connection(1, inputs[1])); var hidden2 = new RegularNeuron(0.5); hidden2.Parents.Add(new Connection(-1, hidden1[1])); var output = new RegularNeuron(-1.5); output.Parents.Add(new Connection(1, hidden1[0])); output.Parents.Add(new Connection(1, hidden2)); TruthTable(inputs, output); }