/**
*
*/
package fmg.fmg8.endlAutomat.fitness;
import fmg.fmg8.umgebung2D.Roboter;
import fmg.fmg8.umgebung2D.Vektor2D;
/**
* @author aifb
*
*/
public class FitnessZahnrad implements FitnessVerfahren {
/**
* Berechnet eine tempor�re Fitness f�r den aktuellen Zustand des Roboters.
* Es wird der letzte Befehle betrachtet (erstes Element der Liste).
*
* @param rob Der Roboter, dessen Fitness berechnet werden soll.
*
* @return Die aktuelle tempor�re Fitness.
*/
@Override
public int fitness(final Roboter rob) {
// Kollisionen
int fitKoll = (int) ((double) rob.getAnzUnfaelle()
* rob.getPars().getAbzugUnfall().doubleValue());
rob.resetAnzUnf();
double abstand1, abstand2;
Vektor2D mitte1, mitte2;
// 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 -= 1;
}
// N�he zu Zahnrad belohnen.
mitte1 = rob.getUmg().getDynWaende()[47].mittelpunkt();
mitte2 = rob.getUmg().getDynWaende()[221].mittelpunkt();
abstand1 = rob.getPosition().distanz(mitte1);
abstand2 = rob.getPosition().distanz(mitte2);
fitCollAvoid *= abstand2 / abstand1;
return fitCollAvoid - fitKoll;
}
}