Exemplo n.º 1
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;
 }
        public void TestMondlandungsSimulation()
        {
            ArrayList kommandos = new ArrayList(10);
            for (int i = 0; i < 10; i++)
                kommandos.Add(new IntGene(1));

            MondlandungsSimulation sim = new MondlandungsSimulation(100, 100, 1, true);
            Assert.AreEqual(10, sim.TestComputeFitness(kommandos));
        }
Exemplo n.º 3
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;
            }
        }