예제 #1
0
        public FPropagateST(ChaoticSeer seer)
        {
            InputNodes  = new List <CalcNode>();
            HiddenNodes = new List <CalcNode>();
            OutputNodes = new List <CalcNode>();

            GeneHashSet <NodeGene>       _nodes       = seer.Nodes;
            GeneHashSet <ConnectionGene> _cons        = seer.Connections;
            Dictionary <int, CalcNode>   _nodeHashMap = new Dictionary <int, CalcNode>();

            foreach (NodeGene item in _nodes.Data)
            {
                CalcNode node = new CalcNode(item.X);
                _nodeHashMap.Add(item.InnovationNumber, node);

                if (item.X <= 0.1f)
                {
                    InputNodes.Add(node);
                }
                else if (item.X >= 0.9f)
                {
                    OutputNodes.Add(node);
                }
                else
                {
                    HiddenNodes.Add(node);
                }
            }
            HiddenNodes.Sort();                 //This thing is working correct
            foreach (ConnectionGene item in _cons.Data)
            {
                NodeGene from = item.From;
                NodeGene to   = item.To;

                CalcNode node_from = _nodeHashMap[from.InnovationNumber];
                CalcNode node_to   = _nodeHashMap[to.InnovationNumber];

                CalcConnection con = new CalcConnection(node_from, node_to)
                {
                    Weight    = item.Weight,
                    IsEnabled = item.IsEnabled
                };

                node_to.Connections.Add(con);
            }
        }
예제 #2
0
 public CalcConnection(CalcNode from, CalcNode to)
 {
     From = from;
     To   = to;
 }