Exemplo n.º 1
0
        public static void Main(string[] args)
        {
            GeneticSimulation environment = new GeneticSimulation();

            environment.RunEvolution();
            Console.ReadKey();
        }
Exemplo n.º 2
0
        public void TestGeneticSimulation()
        {
            simulation = new GeneticSimulation <BoolGene>(100, 5, new BoolGrowthLimitedFitness(), new AsymmetricCrossoverRecombinator(), new AlphaSelector(), new PieCakeSelector());
            //simulation.GeneDuplicationRate = 0.00001;
            simulation.SimulationTurn += new OnSimulationTurn(TestDelegate);
            simulation.RunSimulation();

            Assert.IsTrue(delegateRun);

            delegateRunCount = 0;
            simulation.RunSimulation(1000);

            Assert.AreEqual(1000, delegateRunCount, "Did not run 1000 times!");

            /* Assert.AreEqual(5.0, simulation.AverageFitness, 0.5, "This may occur, rerun Test and see if it keeps happening!");
             * Assert.AreEqual(5.0, simulation.MostSuccessfullIndividual.Fitness, "This may occur, rerun Test and see if it keeps happening!");*/

            simulation.ResetSimulation();
            delegateRunCount = 0;
            delegateRun      = false;
            simulation.GeneDuplicationRate = 0.01;

            simulation.RunSimulation();

            Assert.IsTrue(delegateRun);

            delegateRunCount = 0;
            simulation.RunSimulation(10);

            /*    Assert.AreEqual(10, delegateRunCount, "Did not run 10 times!");
             *  Assert.IsTrue(simulation.AverageChromosomeLength > 5, "Average Chromosome Lengtrh not > 5");                */
        }
Exemplo n.º 3
0
        public void Simple()
        {
            var sim = new GeneticSimulation <double[]>(
                org => 1 / (Math.Abs(10 - org.Genome.Sum()) + .01d),
                CommonGeneticFunctions.CreateSpawningCycleArray(new SampleOrg[] {
                new SampleOrg(new double[] { 1, 2, 3, 0 }),
                new SampleOrg(new double[] { 0, 1, 2 }),
                new SampleOrg(new double[] { 1, 0, 1 }),
            }),
                100);

            //var evolved = new List<SampleOrg>();
            //for (int simCount = 0; simCount < 1000; simCount ++)
            //{
            //    evolved = sim.Evolve().Cast<SampleOrg>().ToList();

            //}

            var evolved   = sim.Evolve(15);
            var finalSums = evolved.Select(o => o.Genome.Sum()).ToArray();
        }
Exemplo n.º 4
0
        /// <summary>
        /// Reset the simulation results
        /// </summary>
        /// <param name="sender">Sender Object</param>
        /// <param name="e">Event Object</param>
        private void btn_Zuruecksetzten_Click(object sender, EventArgs e)
        {
            avgLengthList.Clear();
            avgVariationList.Clear();
            avgFitnessList.Clear();
            maxFitnessList.Clear();
            minFitnessList.Clear();
            GenSim  = null;
            MoonSim = null;
            turn    = 0;
            cmb_Selector.Enabled         = true;
            cmb_Recombinator.Enabled     = true;
            txt_ChromosomeLength.Enabled = true;
            txt_Weight.Enabled           = true;
            txt_Height.Enabled           = true;
            txt_Engine.Enabled           = true;
            txt_MutationsRate.Enabled    = true;
            txt_LossRate.Enabled         = true;
            txt_DuplicationsRate.Enabled = true;
            dgv_Population.Rows.Clear();
            btn_Play.Enabled       = false;
            lbl_SpeedValue.Text    = "0";
            lbl_HeightValue.Text   = "0";
            lbl_ThrustValue.Text   = "0";
            lbl_TankValue.Text     = "0";
            chk_AVGFitness.Checked = true;
            chk_maxFitness.Checked = false;
            chk_minFitness.Checked = false;
            chk_Length.Checked     = false;
            chk_Live.Checked       = false;
            zgc_Simulationsgraph.GraphPane.GraphObjList.Clear();
            zgc_Simulationsgraph.AxisChange();
            zgc_Simulationsgraph.Invalidate();
            drawClearBackground();
            GraphPane p = zgc_Simulationsgraph.GraphPane;

            zgc_Simulationsgraph.ZoomOutAll(p);
            p.YAxisList[1].Scale.Max     = 10;
            p.YAxisList[1].Scale.MaxAuto = true;
        }
Exemplo n.º 5
0
        /// <summary>
        /// Simulationsergebnisse zurücksetzen
        /// </summary>
        /// <param name="sender">aufrufendes Objekt</param>
        /// <param name="e">EreignisObjekt</param>
        private void btn_Zuruecksetzten_Click(object sender, EventArgs e)
        {
            avgLengthList.Clear();
            avgVariationList.Clear();
            avgFitnessList.Clear();
            maxFitnessList.Clear();
            minFitnessList.Clear();
            GenSim  = null;
            MondSim = null;
            turn    = 0;
            cmb_Selektor.Enabled         = true;
            cmb_Rekombinator.Enabled     = true;
            txt_Chromosomlaenge.Enabled  = true;
            txt_Gewicht.Enabled          = true;
            txt_Hoehe.Enabled            = true;
            txt_Treibstoff.Enabled       = true;
            txt_Mutationsrate.Enabled    = true;
            txt_Verlustrate.Enabled      = true;
            txt_Duplikationsrate.Enabled = true;
            dgv_Population.Rows.Clear();
            btn_Abspielen.Enabled       = false;
            lbl_AktGeschwindigkeit.Text = "0";
            lbl_AktHoehe.Text           = "0";
            lbl_AktSchub.Text           = "0";
            lbl_AktTank.Text            = "0";
            chk_AVGFitness.Checked      = true;
            chk_maxFitness.Checked      = false;
            chk_minFitness.Checked      = false;
            chk_Laenge.Checked          = false;
            chk_Live.Checked            = false;
            zgc_Simulationsgraph.GraphPane.GraphObjList.Clear();
            zgc_Simulationsgraph.AxisChange();
            zgc_Simulationsgraph.Invalidate();
            drawClearBackground();
            GraphPane p = zgc_Simulationsgraph.GraphPane;

            zgc_Simulationsgraph.ZoomOutAll(p);
            p.YAxisList[1].Scale.Max     = 10;
            p.YAxisList[1].Scale.MaxAuto = true;
        }
Exemplo n.º 6
0
 /// <summary>
 /// Simulationsergebnisse zurücksetzen
 /// </summary>
 /// <param name="sender">aufrufendes Objekt</param>
 /// <param name="e">EreignisObjekt</param>
 private void btn_Zuruecksetzten_Click(object sender, EventArgs e)
 {
     avgLengthList.Clear();
     avgVariationList.Clear();
     avgFitnessList.Clear();
     maxFitnessList.Clear();
     minFitnessList.Clear();
     GenSim = null;
     MondSim = null;
     turn = 0;
     cmb_Selektor.Enabled = true;
     cmb_Rekombinator.Enabled = true;
     txt_Chromosomlaenge.Enabled = true;
     txt_Gewicht.Enabled = true;
     txt_Hoehe.Enabled = true;
     txt_Treibstoff.Enabled = true;
     txt_Mutationsrate.Enabled = true;
     txt_Verlustrate.Enabled = true;
     txt_Duplikationsrate.Enabled = true;
     dgv_Population.Rows.Clear();
     btn_Abspielen.Enabled = false;
     lbl_AktGeschwindigkeit.Text = "0";
     lbl_AktHoehe.Text = "0";
     lbl_AktSchub.Text = "0";
     lbl_AktTank.Text = "0";
     chk_AVGFitness.Checked = true;
     chk_maxFitness.Checked = false;
     chk_minFitness.Checked = false;
     chk_Laenge.Checked = false;
     chk_Live.Checked = false;
     zgc_Simulationsgraph.GraphPane.GraphObjList.Clear();
     zgc_Simulationsgraph.AxisChange();
     zgc_Simulationsgraph.Invalidate();
     drawClearBackground();
     GraphPane p = zgc_Simulationsgraph.GraphPane;
     zgc_Simulationsgraph.ZoomOutAll(p);
     p.YAxisList[1].Scale.Max = 10;
     p.YAxisList[1].Scale.MaxAuto = true;
 }
Exemplo n.º 7
0
        /// <summary>
        /// Simulation starten
        /// </summary>
        /// <param name="sender">aufrufendes Objekt</param>
        /// <param name="e">EreignisObjekt</param>
        private void btn_Simuliere_Click(object sender, EventArgs e)
        {
            Cursor = Cursors.WaitCursor;
            btn_Simuliere.Enabled = false;
            btn_Zuruecksetzen.Enabled = false;
            btn_AutoSim.Enabled = false;
            btn_SimAbbrechen.Focus();
            //erster Durchlauf der Simulation
            if (GenSim == null)
            {
                btn_Abspielen.Enabled = true;
                txt_Chromosomlaenge.Enabled = false;
                cmb_Rekombinator.Enabled = false;
                cmb_Selektor.Enabled = false;
                txt_Gewicht.Enabled = false;
                txt_Hoehe.Enabled = false;
                txt_Treibstoff.Enabled = false;
                txt_Mutationsrate.Enabled = false;
                txt_Verlustrate.Enabled = false;
                txt_Duplikationsrate.Enabled = false;
                IntGene.MaxValue = Convert.ToInt32(txt_Treibstoff.Text);
                MondSim = new MondlandungsSimulation(Convert.ToInt32(txt_Hoehe.Text), Convert.ToInt32(txt_Treibstoff.Text), Convert.ToInt32(txt_Gewicht.Text), tsmi_RaumfahrerGewicht.Checked);
                GenSim = new GeneticSimulation<IntGene>(100, Convert.ToInt32(txt_Chromosomlaenge.Text), MondSim, recombinationProvider, selectionProvider);
                GenSim.SimulationTurn += OnSimulationTurn;
                GenSim.GeneMutationRate = Convert.ToDouble(txt_Mutationsrate.Text);
                GenSim.GeneDuplicationRate = Convert.ToDouble(txt_Duplikationsrate.Text);
                GenSim.GeneDropRate = Convert.ToDouble(txt_Verlustrate.Text);
            }
            //automatisierte Simulation bis Erreichen der Delta-Fitness
            if (sender == btn_AutoSim)
            {
                btn_SimAbbrechen.Focus();
                float fitnessGrenze = Convert.ToSingle(txt_Fitness.Text);
                float startFitness = GenSim.AverageFitness;
                while (fitnessGrenze + startFitness > GenSim.AverageFitness && !simulationAbbrechen)
                {
                    Application.DoEvents();
                    GenSim.RunSimulation();
                }
                simulationAbbrechen = false;
                btn_Simuliere.Enabled = true;
                btn_Zuruecksetzen.Enabled = true;
                btn_AutoSim.Enabled = true;
            }
            //einfache Simulation mit angegebener Rundenzahl
            else
                GenSim.RunSimulation(Convert.ToInt32(txt_Rundenazahl.Text));

            if (!closingApplication)
            {
                dgv_Population.Rows.Clear();

                dgv_Population.Rows.Add(GenSim.PoppulationSize);
                for (int i = 0; i < GenSim.PoppulationSize; i++)
                {
                    dgv_Population.Rows[i].Cells[0].Value = GenSim[i].GeneCount.ToString();
                    dgv_Population.Rows[i].Cells[1].Value = GenSim[i].ToString();
                    dgv_Population.Rows[i].Cells[2].Value = GenSim[i].Fitness.ToString();
                    dgv_Population.Rows[i].Tag = GenSim[i];
                }

                zgc_Simulationsgraph.AxisChange();
                zgc_Simulationsgraph.Invalidate();
                Cursor = Cursors.Default;
                btn_Simuliere.Enabled = true;
                btn_Zuruecksetzen.Enabled = true;
                btn_AutoSim.Enabled = true;
            }
        }
        public void TestGeneticSimulation()
        {
            simulation = new GeneticSimulation<BoolGene>(100, 5, new BoolGrowthLimitedFitness(), new AsymmetricCrossoverRecombinator(), new AlphaSelector() ,new PieCakeSelector());
            //simulation.GeneDuplicationRate = 0.00001;
            simulation.SimulationTurn += new OnSimulationTurn(TestDelegate);
            simulation.RunSimulation();

            Assert.IsTrue(delegateRun);

            delegateRunCount = 0;
            simulation.RunSimulation(1000);

            Assert.AreEqual(1000, delegateRunCount, "Did not run 1000 times!");

               /* Assert.AreEqual(5.0, simulation.AverageFitness, 0.5, "This may occur, rerun Test and see if it keeps happening!");
            Assert.AreEqual(5.0, simulation.MostSuccessfullIndividual.Fitness, "This may occur, rerun Test and see if it keeps happening!");*/

            simulation.ResetSimulation();
            delegateRunCount = 0;
            delegateRun = false;
            simulation.GeneDuplicationRate = 0.01;

            simulation.RunSimulation();

            Assert.IsTrue(delegateRun);

            delegateRunCount = 0;
            simulation.RunSimulation(10);

            /*    Assert.AreEqual(10, delegateRunCount, "Did not run 10 times!");
            Assert.IsTrue(simulation.AverageChromosomeLength > 5, "Average Chromosome Lengtrh not > 5");                */
        }
Exemplo n.º 9
0
 /// <summary>
 /// Reset the simulation results
 /// </summary>
 /// <param name="sender">Sender Object</param>
 /// <param name="e">Event Object</param>
 private void btn_Zuruecksetzten_Click(object sender, EventArgs e)
 {
     avgLengthList.Clear();
     avgVariationList.Clear();
     avgFitnessList.Clear();
     maxFitnessList.Clear();
     minFitnessList.Clear();
     GenSim = null;
     MoonSim = null;
     turn = 0;
     cmb_Selector.Enabled = true;
     cmb_Recombinator.Enabled = true;
     txt_ChromosomeLength.Enabled = true;
     txt_Weight.Enabled = true;
     txt_Height.Enabled = true;
     txt_Engine.Enabled = true;
     txt_MutationsRate.Enabled = true;
     txt_LossRate.Enabled = true;
     txt_DuplicationsRate.Enabled = true;
     dgv_Population.Rows.Clear();
     btn_Play.Enabled = false;
     lbl_SpeedValue.Text = "0";
     lbl_HeightValue.Text = "0";
     lbl_ThrustValue.Text = "0";
     lbl_TankValue.Text = "0";
     chk_AVGFitness.Checked = true;
     chk_maxFitness.Checked = false;
     chk_minFitness.Checked = false;
     chk_Length.Checked = false;
     chk_Live.Checked = false;
     zgc_Simulationsgraph.GraphPane.GraphObjList.Clear();
     zgc_Simulationsgraph.AxisChange();
     zgc_Simulationsgraph.Invalidate();
     drawClearBackground();
     GraphPane p = zgc_Simulationsgraph.GraphPane;
     zgc_Simulationsgraph.ZoomOutAll(p);
     p.YAxisList[1].Scale.Max = 10;
     p.YAxisList[1].Scale.MaxAuto = true;
 }
Exemplo n.º 10
0
        public void Sin()
        {
            var rand = new Random();
            var net  = NeuralNetBuilder.From(new NeuralNetConfig()
            {
                InputLabels            = new string[] { "x" },
                OutputLabels           = new string[] { "y" },
                HiddenLayerCount       = 3,
                HiddenLayerNeuronCount = 3,
                //PreActivationFunction = (i, d) =>
                ActivationFunction = d => d > .5 ? 1 : 0
                                     //ActivationFunction = d => 1 / (1 + Math.Pow(Math.E, -d))
            });
            var trainingData = new List <Tuple <double, double> >();

            for (double i = 0; i < Math.PI * 2; i += .1)
            {
                var input  = i;
                var output = Math.Sin(i);
                //var normalizedOutput = output / Math.PI * 2;
                var normalizedOutput = .5 * (output + 1);
                var normalizedInput  = input / (Math.PI * 2);
                trainingData.Add(new Tuple <double, double>(normalizedInput, normalizedOutput));
            }

            var weightCount      = net.WeightCount;
            var biasCount        = net.BiasCount;
            var weightOrgSpawner = new SpawnFunction <double[]>(index =>
            {
                var data = new double[weightCount + biasCount];
                for (int i = 0; i < weightCount + biasCount; i++)
                {
                    var scale = i >= weightCount ? 1 : 1;
                    data[i]   = (rand.NextDouble()) * scale;
                }

                return(new Org(data));
            });

            var fitnessFunction = new FitnessFunction <double[]>(org =>
            {
                net.InitializeWeights(org.Genome.Take(weightCount).ToArray());

                net.InitializeBiases(org.Genome.Skip(weightCount).ToArray());

                var errorSum = trainingData.Select(trainingElement =>
                {
                    var input          = trainingElement.Item1;
                    var expectedOutput = trainingElement.Item2;

                    var actualOutput = net.Compute(new NamedValue[] { new NamedValue()
                                                                      {
                                                                          Name = "x", Value = input
                                                                      } });

                    var error          = expectedOutput - actualOutput[0].Value;
                    var convertedError = Math.Pow((Math.Abs(error) + 1), 2);

                    return(convertedError);
                }).Sum();
                //Trace.WriteLine(errorSum);
                return(1 / errorSum);
            });

            var geneticSim = new GeneticSimulation <double[]>(fitnessFunction, weightOrgSpawner, 50);

            var bestSet = geneticSim.Evolve(20000, false);
            var theBest = geneticSim.GetBest();

            net.InitializeWeights(theBest.Genome.Take(weightCount).ToArray());
            net.InitializeBiases(theBest.Genome.Skip(weightCount).ToArray());

            Trace.WriteLine("OUTPUT");
            trainingData.ForEach(t =>
            {
                var input          = t.Item1;
                var expectedOutput = t.Item2;

                var actualOutput = net.Compute(new NamedValue[] { new NamedValue()
                                                                  {
                                                                      Name = "x", Value = input
                                                                  } });

                var error = expectedOutput - actualOutput[0].Value;

                //Trace.WriteLine($"INPUT:{input} EXPECT:{expectedOutput} REAL:{actualOutput[0].Value} ERR:{error}");
                //Trace.WriteLine($"{input},{expectedOutput},{actualOutput[0].Value}");
                Trace.WriteLine($"{actualOutput[0].Value}");
            });
        }
Exemplo n.º 11
0
        /// <summary>
        /// Simulation start
        /// </summary>
        /// <param name="sender">Sender Object</param>
        /// <param name="e">Event Object</param>
        private void btn_Simuliere_Click(object sender, EventArgs e)
        {
            Cursor = Cursors.WaitCursor;
            btn_Simulate.Enabled = false;
            btn_Reset.Enabled    = false;
            btn_AutoSim.Enabled  = false;
            btn_SimAbort.Focus();
            //erster Durchlauf der Simulation
            if (GenSim == null)
            {
                btn_Play.Enabled             = true;
                txt_ChromosomeLength.Enabled = false;
                cmb_Recombinator.Enabled     = false;
                cmb_Selector.Enabled         = false;
                txt_Weight.Enabled           = false;
                txt_Height.Enabled           = false;
                txt_Engine.Enabled           = false;
                txt_MutationsRate.Enabled    = false;
                txt_LossRate.Enabled         = false;
                txt_DuplicationsRate.Enabled = false;
                IntGene.MaxValue             = Convert.ToInt32(txt_Engine.Text);
                MoonSim = new MondlandungsSimulation(Convert.ToInt32(txt_Height.Text), Convert.ToInt32(txt_Engine.Text), Convert.ToInt32(txt_Weight.Text), tsmi_SpacemanHeight.Checked);
                GenSim  = new GeneticSimulation <IntGene>(100, Convert.ToInt32(txt_ChromosomeLength.Text), MoonSim, recombinationProvider, selectionProvider);
                GenSim.SimulationTurn     += OnSimulationTurn;
                GenSim.GeneMutationRate    = Convert.ToDouble(txt_MutationsRate.Text);
                GenSim.GeneDuplicationRate = Convert.ToDouble(txt_DuplicationsRate.Text);
                GenSim.GeneDropRate        = Convert.ToDouble(txt_LossRate.Text);
            }
            //automatisierte Simulation bis Erreichen der Delta-Fitness
            if (sender == btn_AutoSim)
            {
                btn_SimAbort.Focus();
                float fitnessGrenze = Convert.ToSingle(txt_Fitness.Text);
                float startFitness  = GenSim.AverageFitness;
                while (fitnessGrenze + startFitness > GenSim.AverageFitness && !simulationAbort)
                {
                    Application.DoEvents();
                    GenSim.RunSimulation();
                }
                simulationAbort      = false;
                btn_Simulate.Enabled = true;
                btn_Reset.Enabled    = true;
                btn_AutoSim.Enabled  = true;
            }
            //einfache Simulation mit angegebener Rundenzahl
            else
            {
                GenSim.RunSimulation(Convert.ToInt32(txt_RoundNumber.Text));
            }

            if (!closingApplication)
            {
                dgv_Population.Rows.Clear();

                dgv_Population.Rows.Add(GenSim.PoppulationSize);
                for (int i = 0; i < GenSim.PoppulationSize; i++)
                {
                    dgv_Population.Rows[i].Cells[0].Value = GenSim[i].GeneCount.ToString();
                    dgv_Population.Rows[i].Cells[1].Value = GenSim[i].ToString();
                    dgv_Population.Rows[i].Cells[2].Value = GenSim[i].Fitness.ToString();
                    dgv_Population.Rows[i].Tag            = GenSim[i];
                }

                zgc_Simulationsgraph.AxisChange();
                zgc_Simulationsgraph.Invalidate();
                Cursor = Cursors.Default;
                btn_Simulate.Enabled = true;
                btn_Reset.Enabled    = true;
                btn_AutoSim.Enabled  = true;
            }
        }