Repräsentiert ein Raumschiff mit den Eigenschaften Treibstoff, Gewicht, Geschwindigkeit, Höhe und einem Raumfahrer
Esempio n. 1
0
        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);
        }
Esempio n. 4
0
 public MondlandungsSimulationEventArgs(Raumschiff raumschiff, int schub)
 {
     this.raumschiff = raumschiff;
     this.schub      = schub;
 }