public virtual void Activate() { SetNodeState(NodeState.Init); if (childNode != null) { childNode.Activate(); } }
public void Awake() { var nodeQueue = new Queue <INode>(); nodeQueue.Enqueue(rootNode); while (nodeQueue.Count != 0) { INode node = nodeQueue.Dequeue(); node.Activate(); if (node.HasChild()) { nodeQueue.Enqueue(node.GetChildNode()); } //foreach (var childNode in node.GetChildNodeList()) { // if (childNode == null) { // continue; // } // nodeQueue.Enqueue(childNode); //} } }
public double[] Activate(double[] inputs, Func <double, double> activator = null) { // Reset any previous activations Nodes.ToList().ForEach(n => n.ResetActivation()); // Activate all of our input nodes Nodes.Where(n => n.Type == NodeType.Input).ToList().ForEach(n => n.Activate(inputs[n.ActivationIndex])); // Traverse the network and activate each node List <INode> activationQueue = Nodes.Where(n => !n.IsActivated).ToList(); // Set Activator activator = activator ?? Activators.ReLU; while (activationQueue.Any()) { INode node = activationQueue.First(); List <IGene> genes = Genes.Where(g => g.NodeIn == node && g.IsExpressed).ToList(); activationQueue.Remove(node); // Remove any genes with unactivated Node Outs if (genes.Any(g => !g.NodeOut.IsActivated)) { genes.RemoveAll(g => !g.NodeOut.IsActivated); // Re-activate this node later activationQueue.Add(node); } node.Activate(activator(genes.Sum(g => g.Weight * g.NodeOut.Activation))); } return(Nodes.Where(n => n.Type == NodeType.Output) .OrderBy(n => n.ActivationIndex) .Select(n => n.Activation) .ToArray()); }
public void Awake() { rootNode.Activate(); }