Package fmg.fmg8.endlAutomat.fitness

Source Code of fmg.fmg8.endlAutomat.fitness.FitnessOnlyGate

/*
* Datei:            FitnessCollAvoid.java
* Autor(en):        Lukas K�nig
* Java-Version:     1.4
* Erstellt (vor): 24.09.2008
*
* (c) Lukas K�nig, die Datei unterliegt der LGPL
* -> http://www.gnu.de/lgpl-ger.html
*/

package fmg.fmg8.endlAutomat.fitness;

import fmg.fmg8.umgebung2D.GlobaleVariablen;
import fmg.fmg8.umgebung2D.Roboter;
import fmg.fmg8.umgebung2D.Umgebung;
import fmg.fmg8.umgebung2D.Vektor2D;

/**
* Fitnessberechnung anhand von der Anzahl an Wechseln zwischen den H�lften
* des Spielfeldes.
*
* @author Lukas K�nig
*/
public class FitnessOnlyGate implements FitnessVerfahren {

    /**
     * �berschreibung des Default-Konstruktors.
     */
    public FitnessOnlyGate() {
        throw new RuntimeException("Fitness nicht ausgew�hlt.");
    }
   
    /**
     * Berechnet, in welcher H�lfte des Feldes (links / rechts) sich ein
     * Punkt befindet.
     *
     * @param feld  Das Feld.
     * @param pkt   Die Position des Punktes.
     * @return  Ob sich der Punkt in der linken H�lfte befindet.
     */
    private boolean haelfte(final Umgebung feld,
                            final Vektor2D pkt) {
        return pkt.x < ((double) feld.getFeld().length) / 2.0;
    }
   
    /**
     * Berechnet den Fitnesssnapshot.
     *
     * @param rob  Der Roboter, dessen Fitness berechnet werden soll.
     *
     * @return  die Fitness.
     */
    public int fitness(final Roboter rob) {
        // Swap:
        int fitSwap;
        long aktivSeitLetzt = rob.getAktivZyklen(rob.getAktAutNum());
        int faktor = (int) aktivSeitLetzt / 10;

        rob.resetAktivZyk(rob.getAktAutNum());
       
        if (rob.getLetztKoord() == null) {
            rob.setLetztKoord(new Vektor2D(rob.getPosition()));
        }
       
        if (this.haelfte(rob.getUmg(), rob.getLetztKoord())
            != this.haelfte(rob.getUmg(), rob.getPosition())) {
            fitSwap = 10;
            GlobaleVariablen.setGateCount(GlobaleVariablen.getGateCount() + 1);
        } else {
            fitSwap = -1;
        }
       
        rob.setLetztKoord(new Vektor2D(rob.getPosition()));
       
        return fitSwap * faktor;
    }

    /**
     * Die toString-Methode.
     *
     * @return Die Ausgabe.
     */
    public String toString() {
        return "FitnessSwapHalfs";
    }
}
TOP

Related Classes of fmg.fmg8.endlAutomat.fitness.FitnessOnlyGate

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.