public static IList <Neuron> GetNeurons( INeuralGenome genome, ENeurType neurType) { return(genome.NeuronLst .Where(x => x.neurType == neurType) .ToArray()); }
protected float GetNetworkOutputAsNb(INeuralGenome genome, int inNb) { var outputs = genome.FeedNetwork(ToBits(inNb)); double result = 0; for (int i = 0; i < outputs.Count(); i++) { result += outputs[i] * Mathf.Pow(2, i); } return((float)result); }
public override void Init(INeuralGenome targetGenome) { base.Init(targetGenome); lastActivation = 0; columns = 0; distToNextColOnDeath = Vector2.zero; isDead = false; foreach (var neuron in genome.Neurons) { neuron.Value.Val = 0; } }
private double ParityFitness(INeuralGenome genome) { float error = 0; for (int i = 0; i < 8; i++) { var expected = (i % 2 == 0) ? 1 : 0; var output = (float)genome.FeedNetwork(ToBits(i))[0]; error += Mathf.Abs(expected - output); } genome.Fitness = 8 - error; return(error); }
private double CountingFitness(INeuralGenome genome) { float error = 0; for (int i = 0; i < 7; i++) { var next3Bit = i + 1; if (next3Bit >= 8) { next3Bit = 0; } error += Mathf.Abs(next3Bit - GetNetworkOutputAsNb(genome, i)); } //genome.Fitness = Mathf.Pow(8 - error + 1, fitenssPower); genome.Fitness = 8 - error; return(error); }
protected override double ComputeFitness(INeuralGenome genome) { float error = 0; for (int i = 0; i < 2; i++) { for (int j = 0; j < 2; j++) { var targetOutput = i ^ j; var output = genome.FeedNetwork(new double[2] { i, j })[0]; error += Mathf.Abs((float)(targetOutput - output)); } } genome.Fitness = Mathf.Pow(4 - error + 1, fitenssPower); return(error); }
protected override double ComputeFitness(INeuralGenome genome) { double error = 0; for (int i = 0; i < MaxCount; i++) { var bits = ToBits(i, MaxCount); var expected = OppositeBits(bits); var outputs = genome.FeedNetwork(bits); for (int j = 0; j < bits.Length; j++) { error += Mathf.Abs((float)(expected[j] - outputs[j])); } } genome.Fitness = -error; return(error); }
private void ConnectNode( RectTransform target, Neuron targetNeuron, INeuralGenome genome) { var outNeurons = genome.Network[targetNeuron] .Select(x => x.receiver); foreach (var neuronInnov in outNeurons) { var neuron = genome.Neurons[neuronInnov]; if (neuron == targetNeuron) { continue; } var conn = ConnectionManager.CreateConnection( target, nodes[neuron]); conn.points[0].weight = 0.6f; conn.points[1].weight = 0.6f; conn.line.widthMultiplier = connectionWidth; conn.points[0].direction = ConnectionPoint.ConnectionDirection.East; conn.points[1].direction = ConnectionPoint.ConnectionDirection.West; var synapse = genome.Network[targetNeuron] .First(x => x.receiver == neuronInnov); var gene = NeuralUtils.FindGene(genome.Genes, synapse); var color = GetColor(gene); conn.points[0].color = color; conn.points[1].color = color; if (!synapse.isEnabled) { conn.line.widthMultiplier *= 0.3f; } } }
public void DrawGenome(INeuralGenome genome) { RemoveAllNodes(); if (autoAdjustMaxWeight) { maxWeight = GetAverageWeight(genome.Genes); } int count = 0; foreach (var neuron in genome.NeuronLst) { var newNode = Instantiate(nodePrefab, nodesParent) .GetComponent <RectTransform>(); newNode.name = "Node " + count; var nodeText = neuron.innovNb.ToString(); if (neuron.neurType == ENeurType.bias) { nodeText = "bias" + nodeText; } else if (neuron.neurType == ENeurType.input) { nodeText = "in" + nodeText; } else if (neuron.neurType == ENeurType.output) { nodeText = "out" + nodeText; } newNode.GetChild(0).GetComponent <Text>().text = nodeText; nodes.Add(neuron, newNode); count++; } var inputNeurons = NeuralUtils.GetNeurons( genome, ENeurType.input); var outputNeurons = NeuralUtils.GetNeurons( genome, ENeurType.output); var bias = NeuralUtils.GetBias(genome); foreach (var kv in nodes) { ConnectNode(kv.Value, kv.Key, genome); if (inputNeurons.Contains(kv.Key)) { int i = inputNeurons.IndexOf(kv.Key) + 1; kv.Value.localPosition = inputNodesPos.localPosition + Vector3.down * distBetweenNodes * i; } else if (outputNeurons.Contains(kv.Key)) { int i = outputNeurons.IndexOf(kv.Key); kv.Value.localPosition = outputNodesPos.localPosition + Vector3.down * distBetweenNodes * i; } else if (bias == kv.Key) { kv.Value.localPosition = inputNodesPos.localPosition; } else { kv.Value.localPosition = GetPosOfNewNode(); } } }
protected override double ComputeFitness(INeuralGenome genome) { return(ParityFitness(genome)); }
public virtual void Init(INeuralGenome targetGenome) { genome = targetGenome; }
public void Init(INeuralGenome genome_, Transform target_) { genome = genome_; target = target_; }
public static Neuron GetBias(INeuralGenome genome) { return(genome.NeuronLst .FirstOrDefault(x => x.neurType == ENeurType.bias)); }
protected abstract double ComputeFitness(INeuralGenome genome);
protected override double ComputeFitness(INeuralGenome genome) { return(CountingFitness(genome)); }