public static void subXor(NetworkGenome cppn) { DecodedNetworks decodedNetwork = (DecodedNetworks)null; double[] inputs = new double[4]; bool flag1 = true; inputs[0] = 1.0; inputs[1] = 0.0; inputs[2] = 0.0; inputs[3] = 0.0; decodedNetwork.SetInputs(inputs); decodedNetwork.ActivateNetwork(2); double[] outputs1 = decodedNetwork.GetOutputs(); cppn.Fitness = 0.0; cppn.Fitness += Math.Min(1.0, Math.Max(0.0, 1.0 - outputs1[0])); bool flag2 = flag1 && outputs1[0] < 0.5; decodedNetwork.Flush(); inputs[0] = 0.0; inputs[1] = 0.0; inputs[2] = 0.0; inputs[3] = 1.0; decodedNetwork.SetInputs(inputs); decodedNetwork.ActivateNetwork(2); double[] outputs2 = decodedNetwork.GetOutputs(); cppn.Fitness += Math.Min(1.0, Math.Max(0.0, 1.0 - outputs2[0])); bool flag3 = flag2 && outputs2[0] < 0.5; decodedNetwork.Flush(); inputs[0] = 0.0; inputs[1] = 1.0; inputs[2] = 0.0; inputs[3] = 0.0; decodedNetwork.SetInputs(inputs); decodedNetwork.ActivateNetwork(2); double[] outputs3 = decodedNetwork.GetOutputs(); cppn.Fitness += Math.Min(1.0, Math.Max(0.0, outputs3[0])); bool flag4 = flag3 && outputs3[0] >= 0.5; decodedNetwork.Flush(); inputs[0] = 0.0; inputs[1] = 0.0; inputs[2] = 1.0; inputs[3] = 0.0; decodedNetwork.SetInputs(inputs); decodedNetwork.ActivateNetwork(2); double[] outputs4 = decodedNetwork.GetOutputs(); cppn.Fitness += Math.Min(1.0, Math.Max(0.0, outputs4[0])); bool flag5 = flag4 && outputs4[0] >= 0.5; decodedNetwork.Flush(); if (!flag5) { return; } cppn.Fitness = 4.0; }
public static void Xor(object target) { NetworkGenome genome = target as NetworkGenome; double[] inputs = new double[2]; bool flag1 = true; DecodedNetworks decodedNetwork = DecodedNetworks.DecodeGenome(genome); inputs[0] = 0.0; inputs[1] = 0.0; decodedNetwork.SetInputs(inputs); decodedNetwork.ActivateNetwork(6); double[] outputs1 = decodedNetwork.GetOutputs(); genome.Fitness = 0.0; genome.Fitness += Math.Min(1.0, Math.Max(0.0, 1.0 - outputs1[0])); bool flag2 = flag1 && outputs1[0] < 0.5; decodedNetwork.Flush(); inputs[0] = 1.0; inputs[1] = 1.0; decodedNetwork.SetInputs(inputs); decodedNetwork.ActivateNetwork(6); double[] outputs2 = decodedNetwork.GetOutputs(); genome.Fitness += Math.Min(1.0, Math.Max(0.0, 1.0 - outputs2[0])); bool flag3 = flag2 && outputs2[0] < 0.5; decodedNetwork.Flush(); inputs[0] = 0.0; inputs[1] = 1.0; decodedNetwork.SetInputs(inputs); decodedNetwork.ActivateNetwork(6); double[] outputs3 = decodedNetwork.GetOutputs(); genome.Fitness += Math.Min(1.0, Math.Max(0.0, outputs3[0])); bool flag4 = flag3 && outputs3[0] >= 0.5; decodedNetwork.Flush(); inputs[0] = 1.0; inputs[1] = 0.0; decodedNetwork.SetInputs(inputs); decodedNetwork.ActivateNetwork(6); double[] outputs4 = decodedNetwork.GetOutputs(); genome.Fitness += Math.Min(1.0, Math.Max(0.0, outputs4[0])); bool flag5 = flag4 && outputs4[0] >= 0.5; decodedNetwork.Flush(); if (!flag5) { return; } genome.Fitness = 4.0; }
public static bool NormalXor(List <NetworkGenome> genomes, bool test) { double[] inputs = new double[2]; bool flag1 = false; foreach (NetworkGenome genome in genomes) { bool flag2 = true; DecodedNetworks decodedNetwork = DecodedNetworks.DecodeGenome(genome); inputs[0] = 0.0; inputs[1] = 0.0; decodedNetwork.SetInputs(inputs); decodedNetwork.ActivateNetwork(6); double[] outputs1 = decodedNetwork.GetOutputs(); genome.Fitness = 0.0; genome.Fitness += Math.Min(1.0, Math.Max(0.0, 1.0 - outputs1[0])); bool flag3 = flag2 && outputs1[0] < 0.5; decodedNetwork.Flush(); inputs[0] = 1.0; inputs[1] = 1.0; decodedNetwork.SetInputs(inputs); decodedNetwork.ActivateNetwork(6); double[] outputs2 = decodedNetwork.GetOutputs(); genome.Fitness += Math.Min(1.0, Math.Max(0.0, 1.0 - outputs2[0])); bool flag4 = flag3 && outputs2[0] < 0.5; decodedNetwork.Flush(); inputs[0] = 0.0; inputs[1] = 1.0; decodedNetwork.SetInputs(inputs); decodedNetwork.ActivateNetwork(6); double[] outputs3 = decodedNetwork.GetOutputs(); genome.Fitness += Math.Min(1.0, Math.Max(0.0, outputs3[0])); bool flag5 = flag4 && outputs3[0] >= 0.5; decodedNetwork.Flush(); inputs[0] = 1.0; inputs[1] = 0.0; decodedNetwork.SetInputs(inputs); decodedNetwork.ActivateNetwork(6); double[] outputs4 = decodedNetwork.GetOutputs(); genome.Fitness += Math.Min(1.0, Math.Max(0.0, outputs4[0])); bool flag6 = flag5 && outputs4[0] >= 0.5; decodedNetwork.Flush(); if (flag6) { genome.Fitness = 4.0; } flag1 = flag1 || flag6; } return(flag1); }
//by phillip static void MapWeights(NetworkGenome genome, DecodedNetworks cppn) { double[] coords = new double[4]; double[] output; LinkGene temp; SubstrateNodes source; SubstrateNodes target; int linkId = 0; for (int i = 1; i < genome.Links.Count; i++) { temp = genome.Links[i]; source = (SubstrateNodes)genome.Nodes[temp.Source]; target = (SubstrateNodes)genome.Nodes[temp.Target]; if (temp.Source != 0) { coords[0] = source.Coordinate[0]; coords[1] = source.Coordinate[1]; } else { coords[0] = target.Coordinate[0]; coords[1] = target.Coordinate[1]; } coords[2] = target.Coordinate[0]; coords[3] = target.Coordinate[1]; cppn.Flush(); cppn.SetInputs(coords); cppn.ActivateNetwork(5); output = cppn.GetOutputs(); if (source.Id != 0) { temp.Weight = output[0]; } else { temp.Weight = output[1]; } } if (saveSub) { NetworkGenome.SaveToFile(genome, "Sub.xml"); saveSub = false; } }
public static void XorCreate(NetworkGenome sub, DecodedNetworks cppn) { SubstrateNodes substrateNode1 = sub.Nodes.Find((Predicate <NodeGene>)(n => n.Type == NodeType.Output)) as SubstrateNodes; double[] inputs = new double[4]; int id = 0; for (int index = 0; index < sub.Nodes.Count - 1; ++index) { SubstrateNodes substrateNode2 = sub.Nodes[index] as SubstrateNodes; cppn.Flush(); inputs[0] = substrateNode2.Coordinate[0]; inputs[1] = substrateNode2.Coordinate[1]; inputs[2] = substrateNode1.Coordinate[0]; inputs[3] = substrateNode1.Coordinate[1]; cppn.SetInputs(inputs); cppn.ActivateNetwork(5); double[] outputs = cppn.GetOutputs(); sub.Links.Add(new LinkGene(id, substrateNode2.Id, substrateNode1.Id, outputs[0])); } }