Beispiel #1
0
        public Calculator(Genome g)
        {
            data_structures.RandomHashSet <NodeGene>       nodes = g.Nodes;
            data_structures.RandomHashSet <ConnectionGene> cons  = g.Connections;

            Dictionary <int, Node> nodeHashMap = new Dictionary <int, Node>();

            foreach (NodeGene n in nodes.Data)
            {
                Node node = new Node(n.X);
                nodeHashMap[n.Innovation_number] = node;

                if (n.X <= 0.1)
                {
                    input_nodes.Add(node);
                }
                else if (n.X >= 0.9)
                {
                    output_nodes.Add(node);
                }
                else
                {
                    hidden_nodes.Add(node);
                }
            }

            hidden_nodes.Sort((x, y) => x.CompareTo(y));

            foreach (ConnectionGene c in cons.Data)
            {
                NodeGene from = c.From;
                NodeGene to   = c.To;

                Node node_from = nodeHashMap[from.Innovation_number];
                Node node_to   = nodeHashMap[to.Innovation_number];

                Connection con = new Connection(node_from, node_to);
                con.Weight  = c.Weight;
                con.Enabled = c.Enabled;

                node_to.Connections.Add(con);
            }
        }
Beispiel #2
0
        public virtual void mutate_link()
        {
            for (int i = 0; i < 100; i++)
            {
                NodeGene a = nodes.random_element();
                NodeGene b = nodes.random_element();

                if (a == null || b == null)
                {
                    continue;
                }
                if (a.X == b.X)
                {
                    continue;
                }

                ConnectionGene con;
                if (a.X < b.X)
                {
                    con = new ConnectionGene(a, b);
                }
                else
                {
                    con = new ConnectionGene(b, a);
                }

                if (connections.contains(con))
                {
                    continue;
                }

                con        = neat.getConnection(con.From, con.To);
                con.Weight = (GlobalRandom.NextDouble * 2 - 1) * neat.WEIGHT_RANDOM_STRENGTH;
                data_structures.RandomHashSet <Gene> hi = new data_structures.RandomHashSet <Gene>();
                hi.add_sorted(connections, con);
                return;
            }
        }