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); }
/// <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; }
/// <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 MondlandungsSimulationEventArgs(Raumschiff raumschiff, int schub) { this.raumschiff = raumschiff; this.schub = schub; }