예제 #1
0
        private void generateNewBtn_Click(object sender, EventArgs e)
        {
            //try
            //{
            //{
            status.Text = "Generating a new pop";
            int popC = int.Parse(populationCount.Text);
            List <NeuroNetGenome> population = new List <NeuroNetGenome>();

            for (int i = 0; i < popC; ++i)
            {
                CNeuroNetWrapper            net = new CNeuroNetWrapper(3, 1);
                CNeuroNetWrapper.Connection c   = new CNeuroNetWrapper.Connection(r.Next(net.InputsCount), r.Next(net.InputsCount, net.InputsCount + net.OutputsCount), (r.NextDouble() - r.NextDouble()) * 2);
                net.Connections.Add(c);
                population.Add(new NeuroNetGenome(net));
            }
            _results = teacher.AddNewGeneration(population);
            IndividualSelector.Maximum = (Decimal)population.Count;
            status.Text = "Generated a new pop";
            //}

            /*catch (System.Exception ex)
             * {
             *  MessageBox.Show("Input error.", "Input error", MessageBoxButtons.OK, MessageBoxIcon.Error);
             * }*/
        }
예제 #2
0
        public IGenome <CNeuroNetWrapper> ProceedStructuralMutation()
        {
            NeuroNetGenome copy = new NeuroNetGenome(this);

            CNeuroNetWrapper.Connection con = null;

            int maxCon = copy._neuroNet.Nodes.Count * (copy._neuroNet.Nodes.Count - copy._neuroNet.InputsCount);

            double chance = copy._neuroNet.Connections.Count / (double)maxCon;

            if (GenomeRandom.NextDouble() < chance)
            {
                do
                {
                    foreach (var c in copy._neuroNet.Connections)
                    {
                        if (GenomeRandom.NextDouble() < (1.0 / copy._neuroNet.Connections.Count))
                        {
                            con = c;
                            break;
                        }
                    }
                } while (con == null);

                int from = con.From;
                int to   = con.To;

                copy._neuroNet.Connections.Remove(con);

                int nodeId = copy._neuroNet.Nodes.Count;
                copy._neuroNet.AddNode(nodeId);

                copy._neuroNet.AddConnection(from, nodeId, (GenomeRandom.NextDouble() - GenomeRandom.NextDouble()) * 2);
                copy._neuroNet.AddConnection(nodeId, to, (GenomeRandom.NextDouble() - GenomeRandom.NextDouble()) * 2);
            }
            else
            {
                int from = GenomeRandom.Next(copy._neuroNet.Nodes.Count);
                int to   = GenomeRandom.Next(copy._neuroNet.InputsCount - 1, copy._neuroNet.Nodes.Count);

                copy._neuroNet.AddConnection(from, to, (GenomeRandom.NextDouble() - GenomeRandom.NextDouble()) * 2);
            }

            copy._structuralMutations   += 1;
            copy._nonStructuralMutations = 0;
            copy.ParentResult            = this.LastResult;

            return(copy);
        }