/*
* Datei: PopSnapshot.java
* Autor(en): Lukas K�nig
* Java-Version: 1.4
* Erstellt (vor): 01.04.2008
*
* (c) Lukas K�nig, die Datei unterliegt der LGPL
* -> http://www.gnu.de/lgpl-ger.html
*/
package fmg.fmg8.statistik;
import java.io.Serializable;
import java.util.Iterator;
import java.util.List;
import fmg.fmg8.umgebung2D.Roboter;
import fmg.fmg8.umgebung2D.Vektor2D;
/**
* Serialisierbare Klasse zur Beschreibung eines Populationsschnappschusses.
*
* @author Lukas K�nig
*/
public class PopSnapshot implements Serializable {
/**
* Die Versions-ID vom 01.04.2008.
*/
private static final long serialVersionUID = 7723890308243806530L;
/**
* Liste von Roboterschnappsch�ssen.
*/
private RobSnapshot[] robSchnapp;
/**
* Die Verschiebungen der Gegenst�nde.
*/
private Vektor2D[] verschiebungen;
/**
* Identifikationsnummer des Schnappschusses. F�r Schnappsch�sse A, B zu
* den Zeitpunkten tA, tB MUSS immer gelten:
*
* - tA < tB => A.id < B.id und
* - A != B => A.id != B.id.
*/
private long id;
/**
* Der Konstruktor erzeugt Roboterschnappsch�sse f�r alle Roboter der
* Liste.
*
* @param roboter Liste von Robotern, von denen ein Schnappschuss
* gespeichert werden soll.
* @param ggstVerschbgn Die Verschiebungen der Gegenst�nde.
* @param ident Identifikationsnummer des
* Populationsschnappschusses.
* Bitte Kommentar zu Attribut beachten!
* @param autSp Ob die Automaten gespeichert werden sollen.
*/
public PopSnapshot(final List<Roboter> roboter,
final List<Vektor2D> ggstVerschbgn,
final long ident,
final boolean autSp) {
Roboter aktRob;
Vektor2D aktVersch;
Iterator<Roboter> it1 = roboter.iterator();
Iterator<Vektor2D> it2 = ggstVerschbgn.iterator();
this.verschiebungen = new Vektor2D[ggstVerschbgn.size()];
this.robSchnapp = new RobSnapshot[roboter.size()];
int i = 0;
while (it1.hasNext()) {
aktRob = it1.next();
this.robSchnapp[i] = new RobSnapshot(aktRob, autSp);
i++;
}
i = 0;
while (it2.hasNext()) {
aktVersch = it2.next();
this.verschiebungen[i] = new Vektor2D(aktVersch);
i++;
}
this.id = ident;
}
/**
* @return Returns the robSchnapp.
*/
public RobSnapshot[] getRobSchnapp() {
return this.robSchnapp;
}
/**
* @return Returns the id.
*/
public long getId() {
return this.id;
}
/**
* Die toString-Methode.
*
* @return Ausgabe des Objekts.
*/
public String toString() {
String s = "";
s = s + "Populations-Snapshot Nummer: " + this.id + "\n";
s = s + "============================";
for (int i = 0; i < this.robSchnapp.length; i++) {
s = s + this.robSchnapp[i] + "\n";
}
s = s + "\nVerschiebungen:";
if (this.verschiebungen != null) {
for (int i = 0; i < this.verschiebungen.length; i++) {
s = s + " " + this.verschiebungen[i];
}
}
return s;
}
/**
* Gibt die Summe der Fitnesswerte aller Robotersnapshots dieses
* Populationssnapshots zur�ck.
*
* @return Die Summe der Fitnesswerte.
*/
public long getFitSum() {
long sum = 0;
for (int i = 0; i < this.robSchnapp.length; i++) {
for (int j = 0; j < this.robSchnapp[i].getFitness().length; j++) {
sum += this.robSchnapp[i].getFitness()[j];
}
}
return sum;
}
/**
* @return Returns the verschiebungen.
*/
public Vektor2D[] getVerschiebungen() {
return this.verschiebungen;
}
}