Package fmg.fmg8.endlAutomat.fitness

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

/*
* Datei:            FitnessCollAvoid.java
* Autor(en):        Lukas K�nig
* Java-Version:     1.4
* Erstellt (vor): 09.04.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 sowie Kollision Avoidance.
*
* @author Lukas K�nig
*/
public class FitnessSwapHalfs implements FitnessVerfahren {

    /**
     * �berschreibung des Default-Konstruktors.
     */
    public FitnessSwapHalfs() {

    }
   
    /**
     * 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) {
        // Kollisionen
        int fitKoll = (int) ((double) rob.getAnzUnfaelle()
                 * rob.getPars().getAbzugUnfall().doubleValue());
        rob.resetAnzUnf();
       
        // Aus Collision avoidance (nur MOVE-Teil):
        int bef0 = ((Integer) rob.getBefehle().get(0)).intValue();
        String befehl0 = fmg.fmg8.umgebung2D.Konstanten.BEF[bef0].toUpperCase();
        int fitCollAvoid = 1;

        if (!befehl0.equals("MOV")) {
            fitCollAvoid--;
        }

        // Swap:
        int fitSwap;
       
        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 = 0;
        }

        rob.setLetztKoord(new Vektor2D(rob.getPosition()));
       
        return fitSwap + fitCollAvoid - fitKoll;
    }

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

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

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.