/// <summary> /// Weist dem Raumfahrer ein Raumschiff zu und lässt es ihn steuern. /// </summary> /// <param name="raumschiff">Das zuzuweisende Raumschiff</param> /// <returns>Ausgeführtes Kommando, also Schubkraft</returns> public int SteuereRaumschiff(Raumschiff raumschiff) { int schub = raumschiff.Beschleunigen(kommandoListe[naechstesKommando] as IntGene); if (++naechstesKommando == kommandoListe.Count) naechstesKommando = 0; return schub; }
public float ComputeFitness(ArrayList genes) { float fitness = 0.0f; Raumfahrer pilot = new Raumfahrer(genes); Raumschiff raumschiff = new Raumschiff(pilot, startHoehe, startTreibstoff, raumschiffGewicht, nutzeRaumfahrerGewicht); int schub = 0; while (raumschiff.Hoehe > 0) { schub = pilot.SteuereRaumschiff(raumschiff); raumschiff.SimuliereRunde(); if (SimulationTurn != null) SimulationTurn(this, new MondlandungsSimulationEventArgs(raumschiff, schub)); } /*if (SimulationTurn != null) SimulationTurn(this, new MondlandungsSimulationEventArgs(raumschiff, schub));*/ // Convert.ToInt32(Math.Sqrt((raumschiff.Hoehe * raumschiff.Hoehe))) + /*int toleranz = Convert.ToInt32(Math.Sqrt((raumschiff.Geschwindigkeit * raumschiff.Geschwindigkeit))) - 5; if (toleranz < 0) toleranz = 0;*/ //fitness = ((1000 + raumschiff.Geschwindigkeit) / 1000.0f * 0.9f) + (raumschiff.Treibstoff / (float) startTreibstoff * 0.1f); //fitness = 0.7f / (1.0f + toleranz/10) + (raumschiff.Treibstoff / (float)startTreibstoff * 0.3f); //fitness = 0.6f * Convert.ToInt32(Math.Pow(1.01, -toleranz)) + (raumschiff.Treibstoff / (float)startTreibstoff * 0.4f); fitness = 0.7f * Convert.ToSingle(Math.Pow(1.02f, raumschiff.Geschwindigkeit)) + (raumschiff.Treibstoff / (float)startTreibstoff * 0.3f); //fitness = 1 / (1.0f - raumschiff.Geschwindigkeit/10.0f); return fitness; }
public void TestRaumschiff() { ArrayList kommandos = new ArrayList(0); Raumfahrer pilot = new Raumfahrer(kommandos); Raumschiff schiff = new Raumschiff(pilot, 100, 100, 100, true); Assert.AreEqual(100, schiff.Treibstoff); Assert.AreEqual(100, schiff.Hoehe); Assert.AreEqual(100, schiff.Gewicht); }
public void TestRaumfahrer() { ArrayList kommandos = new ArrayList(10); for (int i = 0; i < 10; i++) kommandos.Add(new IntGene(1)); Raumfahrer pilot = new Raumfahrer(kommandos); Assert.AreEqual(10, pilot.Gewicht); Raumschiff schiff = new Raumschiff(pilot, 100, 100, 1, true); pilot.SteuereRaumschiff(schiff); Assert.AreEqual(100-1, schiff.Treibstoff); Assert.AreEqual(1, schiff.Geschwindigkeit); pilot.SteuereRaumschiff(schiff); Assert.AreEqual(100 - 2, schiff.Treibstoff); Assert.AreEqual(2, schiff.Geschwindigkeit); }
public MondlandungsSimulationEventArgs(Raumschiff raumschiff, int schub) { this.raumschiff = raumschiff; this.schub = schub; }