示例#1
0
 public virtual void Activate()
 {
     SetNodeState(NodeState.Init);
     if (childNode != null)
     {
         childNode.Activate();
     }
 }
示例#2
0
    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);
            //}
        }
    }
示例#3
0
        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());
        }
示例#4
0
 public void Awake()
 {
     rootNode.Activate();
 }