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)); }
/// <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; }
/// <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; }
/// <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; } }
/// <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; } }
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)); }