/*
* Datei: Roboter.java
* Autor(en): Lukas K�nig
* Java-Version: 6.0
* Erstellt: 13.03.2009
*
* (c) Lukas K�nig, die Datei unterliegt der LGPL
* -> http://www.gnu.de/lgpl-ger.html
*/
package fmg.fmg8.umgebung2D;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.util.LinkedList;
import java.util.Random;
import fmg.fmg8.earleyErkenner.EarleyErkenner;
import fmg.fmg8.endlAutomat.AutomatenNummer;
import fmg.fmg8.endlAutomat.EndlicherAutomat;
import fmg.fmg8.endlAutomat.conditions.Condition;
import fmg.fmg8.endlAutomat.mutation.CondMutVerfahren;
import fmg.fmg8.endlAutomat.script.Script;
import fmg.fmg8.endlAutomat.script.ScriptInterpreter;
import fmg.fmg8.endlAutomat.translator.Konstanten;
import fmg.fmg8.endlAutomat.translator.Translator;
import fmg.fmg8.sonstiges.SonstMeth;
import fmg.fmg8.statistik.Parametersatz;
/**
* @author Lukas K�nig
*/
public class Roboter extends RobEinfach {
/**
* Die aktuellen Translatoren.
*/
private Translator[] translatoren;
/**
* Die Codes der Translatoren (i.A. nicht in der Standardkodierung).
*/
private LinkedList<Integer>[] transCodes;
/**
* Ob der Translator bei der n�chsten Mutation mutiert werden soll.
*/
private boolean mutT;
/**
* Das Mutationsverfahren f�r den Translator.
*/
private CondMutVerfahren mutArtTrans;
/**
* Die Zyklen zwischen zwei Translator-Mutationen.
*/
private long mutTransZyklen;
/**
* Die Zyklen seit der letzten Translatormutation.
*/
private long mutTransAktZyk;
/**
* Die aktuelle Zyklenzahl seit dem letzten Zur�cksetzen auf den Memory-
* Wert f�r die Verhaltensautomaten.
*/
private long aktMemZykVerh;
/**
* Die aktuelle Zyklenzahl seit dem letzten Zur�cksetzen auf den Memory-
* Wert f�r die Translatorautomaten.
*/
private long aktMemZykTrans;
/**
* Die �bersetzer f�r die entsprechenden besten Automaten in
* der Standardkodierung. Beide Listen (Verhalten und Translator) k�nnen
* immer nur denselben �bersetzer zum Zeitpunkt des Speicherns gehabt
* haben, daher wird zwischen diesen nicht unterschieden.
*/
private LinkedList<Integer>[] besteStdTrans;
/**
* Die zur bisher besten Fitness geh�renden Automaten in der aktuellen
* Kodierung.
*/
private LinkedList<Integer>[] besteStdVerh;
/**
* Die zur bisher besten Fitness geh�renden Automaten in der aktuellen
* Kodierung.
*/
private LinkedList<Integer>[] besteVerhAut;
/**
* Die zur bisher besten Fitness geh�renden Automaten.
*/
private LinkedList<Integer>[] besteTransAut;
/**
* Die bisher besten Fitnesswerte.
*/
private int[] besteFit;
/**
* Initialisierung �ber vorhandene Automatensequenzen. Die Position wird
* nicht gesetzt.
*
* @param seqs Die Automatensequenzen, �ber die initialisiert werden
* soll.
* @param cond Die zu den Automaten geh�renden Bedingungen.
* @param umgebung Die Umgebung des Roboters.
* @param ident Die Identifikationsnummer.
* @param params Der Parametersatz.
* @param zufall Der Zufallsgenerator.
* @param sel Ob der Roboter selektiert ist.
* @param obs Ein VisMantel-Observer.
* @param scriInt Ein Scriptinterpreter.
* @param trans Die Translatoren.
*/
public Roboter(
final String[] seqs,
final Condition[] cond,
final Umgebung umgebung,
final int ident,
final Parametersatz params,
final Random zufall,
final boolean sel,
final VisMantel obs,
final ScriptInterpreter scriInt,
final Translator[] trans) {
this(
0,
0,
0,
fmg.fmg8.umgebung2D.Konstanten.ROB_AUSDEHNUNG_X,
fmg.fmg8.umgebung2D.Konstanten.ROB_AUSDEHNUNG_Y,
umgebung,
null,
null,
null,
ident,
params,
zufall,
sel,
obs,
scriInt,
seqs.length,
trans);
this.erzeugeAusSequenzen(
seqs,
cond,
null,
false);
}
/**
* Normaler Konstruktor.
*
* @param x X-Koordinate der Startposition des Roboters.
* @param y Y-Koordinate der Startposition des Roboters.
* @param wink Winkel der Startposition des Roboters.
* @param xAusd X-Wert der Startausdehnung (sollte i.A. auch sp�ter
* nicht ver�ndert werden).
* @param yAusd Y-Wert der Startausdehnung (s.o.).
* @param umgebung Die Umgebung des Roboters.
* @param earl Der Earley-Erkenner.
* @param mutVerh Die Mutation f�r Verhaltensautomaten.
* @param mutTrans Die Mutation f�r Translatoren.
* @param ident Die Identifizierungsnummer.
* @param params Der Parametersatz.
* @param zufall Der Zufallsgenerator.
* @param sel Ob der Roboter zu Beginn selektiert ist.
* @param obs Ein VisMantel-Observer.
* @param scriInt Der Scriptinterpreter.
* @param autAnzahl Die Anzahl der Automaten, die der Roboter besitzt.
* @param trans Die Translatoren.
*/
@SuppressWarnings(value = { "unchecked" })
public Roboter(
final double x,
final double y,
final double wink,
final double xAusd,
final double yAusd,
final Umgebung umgebung,
final EarleyErkenner earl,
final CondMutVerfahren mutVerh,
final CondMutVerfahren mutTrans,
final int ident,
final Parametersatz params,
final Random zufall,
final boolean sel,
final VisMantel obs,
final ScriptInterpreter scriInt,
final int autAnzahl,
final Translator[] trans) {
super(x, y, wink, xAusd, yAusd, umgebung, earl, mutVerh, ident, params,
zufall, sel, obs, scriInt, autAnzahl);
this.aktMemZykVerh = 0;
this.aktMemZykTrans = 0;
this.mutArtTrans = mutTrans;
if (trans != null) {
this.translatoren = trans;
}
this.transCodes = new LinkedList[this.translatoren.length];
this.mutT = false;
this.mutTransAktZyk = 0;
this.mutTransZyklen = this.getPars().getMutTransZyk();
this.initAuts(autAnzahl);
}
/**
* Initialisiert alle Variablen, die zu jedem Automaten separat Daten
* speichern (Arrays) oder von einer �nderung der Automatenanzahl
* betroffen sein k�nnen.
*
* @param anzAuts Die Anzahl der Automaten.
*/
@Override
@SuppressWarnings(value = { "unchecked" })
protected void initAuts(final int anzAuts) {
super.initAuts(anzAuts);
this.besteFit = new int[anzAuts];
if (this.translatoren == null) {
this.translatoren = new Translator[anzAuts];
}
this.transCodes = new LinkedList[anzAuts];
this.besteStdTrans = new LinkedList[anzAuts];
this.besteTransAut = new LinkedList[anzAuts];
this.besteVerhAut = new LinkedList[anzAuts];
this.besteStdVerh = new LinkedList[anzAuts];
for (int i = 0; i < anzAuts; i++) {
this.besteFit[i] = 0;
this.besteStdTrans[i] = null;
this.besteTransAut[i] = null;
this.besteVerhAut[i] = null;
this.besteStdVerh[i] = null;
if (this.translatoren[i] == null) {
this.translatoren[i] = new Translator(
fmg.fmg8.endlAutomat.translator.Konstanten.STD_TRANS_STR,
new ScriptInterpreter(
this.getPars(),
ScriptInterpreter.MODUS_VERHALTEN),
this.getPars());
}
this.transCodes[i] = this.translatoren[i].erzeugeSequenz();
}
}
/**
* @return Returns the active tAutomat.
*/
public Translator getAktTAut() {
return this.translatoren[this.getAktAutNum()];
}
/**
* @return Ein Array der Stringsequenzen der Translatoren des Roboters.
*/
private String[] erzStdStrTrans() {
String[] sequenzen = new String[this.getVAut().length];
for (int i = 0; i < sequenzen.length; i++) {
sequenzen[i] = this.translatoren[i].erzeugeStringSeq();
}
return sequenzen;
}
/**
* @return Die Translatoren in Standardkodierung.
*/
public String[] getTransStdCodes() {
String[] stdString = new String[this.translatoren.length];
for (int i = 0; i < this.translatoren.length; i++) {
stdString[i] = this.translatoren[i].erzeugeStringSeq();
}
return stdString;
}
/**
* Erzeugt die Translatoren aus Sequenzen, wobei die �bergebenen
* Translatoren zugrunde gelegt werden.
*
* @param seqs Die Translatorcodes.
* @param trans Die Translatoren (wenn null, wird null weitergegeben).
* @param pruefen Ob die �bersetzer gepr�ft werden sollen.
*/
@SuppressWarnings(value = { "unchecked" })
public void erzTransAusSeqs(
final String[] seqs,
final Translator[] trans,
final boolean pruefen) {
this.translatoren = new Translator[seqs.length];
this.transCodes = new LinkedList[seqs.length];
Translator[] trans2 = trans;
if (trans2 == null) {
trans2 = new Translator[seqs.length];
}
for (int i = 0; i < translatoren.length; i++) {
this.erzTransAusSeq(i, seqs[i], trans2[i], pruefen);
}
}
/**
* Erzeugt einen Translator aus einer Sequenz, wobei der �bergebene
* Translator als �bersetzer dient.
*
* @param transNum Die Nummer des zu erzeugenden Translators.
* @param seq Die Translatorcodes.
* @param trans Die Translatoren (wenn null, wird null weitergegeben).
* @param pruefen Ob die �bersetzer gepr�ft werden sollen.
*/
public void erzTransAusSeq(
final int transNum,
final String seq,
final Translator trans,
final boolean pruefen) {
String bereinigt;
// int altMod = SonstMeth.MODUS_UNGUELTIG;
// if (trans != null) {
// altMod = trans.getModus();
// trans.setModus(SonstMeth.MODUS_TRANSLATOR);
// }
this.translatoren[transNum] = new Translator(
"",
new ScriptInterpreter(
this.getPars(),
ScriptInterpreter.MODUS_VERHALTEN),
this.getPars());
this.translatoren[transNum].erzeugeAusSequenz(seq, trans, pruefen);
bereinigt = (new EndlicherAutomat()).bereinige(seq);
this.transCodes[transNum] = SonstMeth.listSeqAusString(bereinigt);
// if (trans != null) {
// trans.setModus(altMod);
// }
}
/**
* L�dt die Automaten mit Translatoren und Bedingungen.
*
* @param graphName Der Name der Datei (mit Pfad nach stdPfad) ohne
* Endung.
*/
@Override
public void ladeAuts(final String graphName) {
String pfad = this.getPars().getStdPfad() + File.separator;
FileInputStream fs;
ObjectInputStream is;
String datRawName = pfad + graphName + ".";
String[] transSequenzen = null;
Translator[] trans;
super.ladeAuts(graphName);
try {
fs = new FileInputStream(
datRawName + fmg.fmg8.graphVis.Konstanten.TRANS_ENDUNG);
is = new ObjectInputStream(fs);
transSequenzen = (String[]) is.readObject();
is.close();
} catch (final Exception e) {
SonstMeth.log(SonstMeth.LOG_WARNING,
"Translator(en) nicht gefunden: "
+ datRawName
+ fmg.fmg8.graphVis.Konstanten.TRANS_ENDUNG,
this.getPars());
}
if (transSequenzen == null) {
return;
}
// Unn�tig??
trans = new Translator[transSequenzen.length];
for (int i = 0; i < trans.length; i++) {
trans[i] = fmg.fmg8.endlAutomat.translator.Konstanten.STD_TRANSL_BE;
}
// Erzeuge Translatoren.
for (int i = 0; i < trans.length; i++) {
trans[i] = fmg.fmg8.endlAutomat.translator.Konstanten.STD_TRANSL_TR;
}
this.erzTransAusSeqs(transSequenzen, trans, false);
}
/**
* Speichert die Automaten mit Translatoren und Bedingungen.
*
* @param graphName Der Name der Datei (mit Pfad nach stdPfad) ohne
* Endung.
*/
@Override
public void speichereAuts(final String graphName) {
String pfad = this.getPars().getStdPfad() + File.separator;
FileOutputStream fs;
ObjectOutputStream os;
super.speichereAuts(graphName);
try {
// Speichere Translatoren
fs = new FileOutputStream(
pfad
+ graphName
+ "."
+ fmg.fmg8.graphVis.Konstanten.TRANS_ENDUNG);
os = new ObjectOutputStream(fs);
os.writeObject(this.erzStdStrTrans());
os.close();
} catch (Exception e) {
throw new RuntimeException(e);
}
}
/**
* @return Ob der Translator mutiert werden soll.
*/
public boolean isMutT() {
return this.mutT;
}
/**
* Mutiert den zu <code>this</code> geh�renden aktiven Verhaltens- und /
* oder Translator-Automaten. Wenn zu einem Automaten kein Translator
* definiert ist, wird dieser mit dem Standardtranslator f�r Translatoren
* belegt.
*/
public void mutiere() {
int i = this.getAktAutNum();
LinkedList<Integer> old;
LinkedList<Integer> first;
LinkedList<Integer> firstTrans;
int zyklen = 0;
if (this.isMutV()) {
this.getMutVerh().mutiere(this);
this.translatoren[i].setModus(SonstMeth.MODUS_VERHALTEN);
this.getVAut()[i].erzeugeAusSequenz(
SonstMeth.stringAusListSeq(this.getVerhCodes()[i]),
this.translatoren[i],
false);
}
if (this.isMutT()) {
firstTrans = new LinkedList<Integer>();
firstTrans.addAll(this.getTransCodes()[i]);
this.getMutTrans().mutiere(this);
this.translatoren[i].setModus(SonstMeth.MODUS_TRANSLATOR);
old = this.translatoren[i].erzeugeSequenz();
first = old;
this.translatoren[i].erzeugeAusSequenz(
SonstMeth.stringAusListSeq(this.transCodes[i]),
this.translatoren[i],
false);
while (!old.equals(this.translatoren[i].erzeugeSequenz())) {
zyklen++;
old = this.translatoren[i].erzeugeSequenz();
this.translatoren[i].erzeugeAusSequenz(
SonstMeth.stringAusListSeq(this.transCodes[i]),
this.translatoren[i],
false);
SonstMeth.log(
SonstMeth.LOG_OUTPUT,
"Translatormutation " + zyklen + " f�r Roboter "
+ this.getId()
+ " (Translatorcode-Bytes: "
+ this.translatoren[i].erzeugeSequenz().size()
+ ")",
this.getPars());
// DEBUG:
if (this.translatoren[i].erzeugeSequenz().size() > 1000000) {
System.exit(0);
}
// EO DEBUG.
if (zyklen > fmg.fmg8.umgebung2D.Konstanten.TRANS_WIEDERHOL) {
break;
}
// if (this.translatoren[i].erzeugeSequenz().size() > max) {
// max = this.translatoren[i].erzeugeSequenz().size();
// }
// System.out.println();
// System.out.println(" " + 1);
// System.out.println(this.translatoren[i].erzeugeSequenz().size() + "/" + max);
// System.out.println(this.translatoren[i].getAdjazenzliste().size());
// for (int k = 0; k < this.translatoren[i].getAlleBedingungen().size(); k++) {
// if (this.translatoren[i].getAlleBedingungen().get(k) != null)
// for (int l = 0; l < this.translatoren[i].getAlleBedingungen().get(k).size(); l++) {
// System.out.println(k + "/" + l + ": " + this.translatoren[i].getAlleBedingungen().get(k).get(l).getCond());
// }
// }
}
if (old.size() == 0) {
this.translatoren[i].erzeugeAusSequenz(
this.translatoren[i].ausgabe(first),
Konstanten.STD_TRANSL_TR,
false);
this.setTransCode(i, firstTrans);
SonstMeth.log(
SonstMeth.LOG_OUTPUT,
"Translator zur�ckgesetzt f�r Roboter "
+ this.getId()
+ " (Translatorcode-Bytes: "
+ this.translatoren[i].erzeugeSequenz().size()
+ ")",
this.getPars());
}
}
if (this.isSelektiert()) {
this.getAktVAut().setzeChanged();
this.getAktVAut().notifyObservers(
new AutomatenNummer(
this.getAktVAut().erzeugeStringSeq(),
this.getAktAutNum()));
}
}
/**
* Geht in den n�chsten Zustand �ber.
*/
@Override
public void naechsterZustand() {
super.naechsterZustand();
this.mutTransAktZyk++;
this.aktMemZykVerh++;
this.aktMemZykTrans++;
if (this.getUmg().getSimulation().isEvolution()) {
// Verhaltensautomaten auf Memory zur�cksetzen.
if (this.aktMemZykVerh > this.getPars().getMemIntVerh()) {
this.resetToBestVerh();
this.aktMemZykVerh = 0;
}
// Translatoren auf Memory zur�cksetzen.
if (this.aktMemZykTrans > this.getPars().getMemIntTrans()) {
this.resetToBestTrans();
this.aktMemZykTrans = 0;
}
// Mutiere Translator, falls Evolution UND erreichte Zyklenzahl.
if (this.mutTransAktZyk > this.mutTransZyklen) {
this.mutT = true;
this.mutiere();
this.mutTransAktZyk = 0;
this.mutT = false;
}
}
}
/**
* Setzt die Verhaltensautomaten auf die vormals besten zur�ck
* und setzt die Fitness bei den Automaten auf 0, die sich durch die Aktion
* ver�ndert haben (dies bitte beachten!).
*
* ACHTUNG: Zur �bersetzung wird der vormals beste Translator benutzt.
* Daher wird der beste Translator immer bei Fitnessver�nderungen
* gespeichert, auch wenn nur f�r Verhaltensautomaten Memory aktiviert
* ist. Der beste Translator �berschreibt in dieser Methode aber nicht
* den aktuellen Translator.
*/
private void resetToBestVerh() {
// System.out.println("MEMORY");
for (int i = 0; i < this.getVAut().length; i++) {
// if (this.getFitness()[i] <= 0
// && this.getFitness()[i] < this.besteFit[i]
// && this.besteFit[i] > 0) {
if (this.getFitness()[i] < this.besteFit[i]
&& this.besteFit[i] > 0) {
// Erzeugen des alten Verhaltens.
this.erzeugeAusSequenz(
i,
SonstMeth.stringAusListSeq(this.besteStdVerh[i]),
null,
null,
false);
// Wiederherstellen des alten Verhaltenscodes.
this.getVerhCodes()[i].clear();
this.getVerhCodes()[i].addAll(this.besteVerhAut[i]);
// TODO: �berpr�fen, ob diese Zuweisung die beste ist.
this.setFitness(i, 0);
SonstMeth.log(SonstMeth.LOG_OUTPUT,
"Verhaltensautomat "
+ i
+ " auf besten zur�ckgesetzt (Roboter "
+ this.getId()
+ ").",
this.getPars());
} else if (this.getFitness()[i] > this.besteFit[i]) {
// Unkorrekter Fall.
this.setzeBeste();
SonstMeth.log(SonstMeth.LOG_ERROR,
"Beste Fitness war nicht korrekt "
+ "gesetzt (Methode: Roboter.resetToBest).",
this.getPars());
}
}
}
/**
* Setzt die Translatorautomaten auf die vormals besten zur�ck
* und setzt die Fitness bei den Automaten auf 0, die sich durch die Aktion
* ver�ndert haben (dies bitte beachten!).
*/
private void resetToBestTrans() {
for (int i = 0; i < this.translatoren.length; i++) {
// if (this.getFitness()[i] <= 0
// && this.getFitness()[i] < this.besteFit[i]
// && this.besteFit[i] > 0) {
if (this.getFitness()[i] < this.besteFit[i]
&& this.besteFit[i] > 0) {
// Erzeuge alten Translator aus Standardcode.
this.erzTransAusSeq(
i,
SonstMeth.stringAusListSeq(this.besteStdTrans[i]),
fmg.fmg8.endlAutomat.translator.Konstanten.STD_TRANSL_TR,
false);
this.getTranslatoren()[i].setModus(SonstMeth.MODUS_VERHALTEN);
// Wiederherstellen des alten Translatorcodes.
this.transCodes[i].clear();
this.transCodes[i].addAll(this.besteTransAut[i]);
// TODO: �berpr�fen, ob diese Zuweisung die beste ist.
this.setFitness(i, 0);
SonstMeth.log(SonstMeth.LOG_OUTPUT,
"Translator "
+ i
+ " auf besten zur�ckgesetzt (Roboter "
+ this.getId()
+ ").",
this.getPars());
} else if (this.getFitness()[i] > this.besteFit[i]) {
// Unkorrekter Fall.
this.setzeBeste();
SonstMeth.log(SonstMeth.LOG_ERROR,
"Beste Fitness war nicht korrekt "
+ "gesetzt (Methode: Roboter.resetToBest).",
this.getPars());
}
}
}
/**
* Setzt den Fitnesswert eines Automaten.
*
* @param autNum Die Nummer des Automaten.
* @param wert Der Wert, auf den gesetzt wird.
*/
@Override
public void setFitness(final int autNum, final int wert) {
super.setFitness(autNum, wert);
this.setzeBeste();
}
/**
* Setzt die Fitnesswerte aller Automaten.
*
* @param werte Die werte.
*/
public void setFitness(final int[] werte) {
for (int i = 0; i < werte.length; i++) {
this.setFitness(i, werte[i]);
}
}
/**
* Setzt BESTE Fitness und Codes aller Automaten neu, falls deren
* aktuelle Fitness den besten Wert aller Zeiten hat. Alle Automaten werden
* als Integer-Sequenzen in der aktuellen Kodierung und als
* Standardsequenzen gespeichert.
* Dieser Vorgang wird nur f�r die Automaten durchgef�hrt f�r die
* Memory aktiviert ist (f�r Translatoren auch, wenn nur f�r Verhaltens-
* automaten Memory aktiviert ist) und nur falls Evolution aktiviert ist.
*/
private void setzeBeste() {
if (!this.getUmg().getSimulation().isEvolution()) {
return;
}
for (int i = 0; i < this.getVAut().length; i++) {
if (this.getFitness()[i] > this.besteFit[i]) {
this.besteFit[i] = this.getFitness()[i];
if (this.besteTransAut[i] == null) {
this.besteTransAut[i] = new LinkedList<Integer>();
}
if (this.besteVerhAut[i] == null) {
this.besteVerhAut[i] = new LinkedList<Integer>();
}
if (this.besteStdTrans[i] == null) {
this.besteStdTrans[i] = new LinkedList<Integer>();
}
if (this.besteStdVerh[i] == null) {
this.besteStdVerh[i] = new LinkedList<Integer>();
}
/*
* Speichere aktuelle Translatorencodes, falls Memory f�r sie
* oder f�r die Verhaltensautomaten aktiviert ist.
*/
if (this.getPars().getMemIntTrans()
<= this.getPars().getExpLen()
|| this.getPars().getMemIntVerh()
<= this.getPars().getExpLen()) {
this.besteTransAut[i].clear();
this.besteTransAut[i].addAll(this.transCodes[i]);
this.besteStdTrans[i].clear();
this.besteStdTrans[i].addAll(this.translatoren[i]
.erzeugeSequenz());
}
/*
* Speichere aktuelle Verhaltenscodes, falls Memory f�r sie
* aktiviert ist.
*/
if (this.getPars().getMemIntVerh()
<= this.getPars().getExpLen()) {
this.besteVerhAut[i].clear();
this.besteVerhAut[i].addAll(this.getVerhCodes()[i]);
this.besteStdVerh[i].clear();
this.besteStdVerh[i].addAll(this.erzeugeSequenz(i));
}
// /*
// * Falls mindestens ein Automat neu gesetzt wurde, setze auch
// * den Translator-Standardcode neu.
// */
// if (this.getPars().getMemIntTrans()
// <= this.getPars().getExpLen()
// || this.getPars().getMemIntVerh()
// <= this.getPars().getExpLen()) {
//
// this.besteStdTrans[i].clear();
// this.besteStdTrans[i].addAll(this.translatoren[i]
// .erzeugeSequenz());
// }
}
}
}
/**
* @return Die Translatoren.
*/
public Translator[] getTranslatoren() {
return this.translatoren;
}
/**
* Gibt die Codes der Translatorautomaten zur�ck.
*
* @return Die Codes der Translatorautomaten.
*/
public LinkedList<Integer>[] getTransCodes() {
return this.transCodes;
}
/**
* @param tC Setzt die Translatorcodes.
*/
public void setTransCodes(final LinkedList<Integer>[] tC) {
this.transCodes = tC;
}
/**
* Setzt einen Translatorcode.
*
* @param autNum Die Nummer des Translator-Automaten.
* @param seq Der Code des Translators.
*/
public void setTransCode(final int autNum, final LinkedList<Integer> seq) {
this.transCodes[autNum] = seq;
}
/**
* @param tc Setzt den aktiven Translatorcode.
*/
public void setAktTCode(final LinkedList<Integer> tc) {
this.transCodes[this.getAktAutNum()] = tc;
}
/**
* @return Das Mutationsverfahren f�r Verhalten.
*/
@Deprecated
public CondMutVerfahren getMut() {
return super.getMut();
}
/**
* @return Das Mutationsverfahren f�r das Roboterverhalten.
*/
public CondMutVerfahren getMutVerh() {
return super.getMut();
}
/**
* @return Das Mutationsverfahren f�r den Verhaltens�bersetzer.
*/
public CondMutVerfahren getMutTrans() {
return this.mutArtTrans;
}
/**
* @param fitness Die Fitness.
*/
@Deprecated
public void setFitVerboten(final int fitness) {
super.setFitness(0, fitness);
}
/**
* Testmethode.
*
* @param args Parameter.
*/
@Deprecated
public static void main(String[] args) {
Parametersatz params = new Parametersatz(args);
params.ergaenze();
String seqCode
= "001 110 100 101 000 012 099 001 000 007 000 000 002 001 000 " +
"012 099 002 000 004 000 000 005 001 000 000 000 014 105 100 " +
"001 000 012 099 001 000 004 000 000 010 001 000 012 099 001 " +
"000 007 000 000 004 001 000 000 000 013 108 100 001 000 012 " +
"099 001 000 004 000 000 010 001 000 012 099 001 000 007 000 " +
"000 004 001 000 000 000 012 111 001 001 000 012 099 001 251 " +
"007 000 000 014 001 000 012 099 001 000 004 000 000 005 001 " +
"000 000 000 011 111 001 001 000 012 099 001 000 004 000 000 " +
"010 001 000 012 099 001 000 007 000 000 004 001 000 000 000 " +
"010 111 001 001 000 012 099 001 000 004 000 000 009 001 000 " +
"012 099 012 000 008 000 000 012 001 000 012 099 012 000 009 " +
"000 012 099 001 000 007 000 010 000 000 013 001 000 000 000 " +
"009 111 001 001 000 012 099 001 000 004 000 000 006 001 000 " +
"012 099 001 000 007 000 000 007 001 000 000 000 008 103 101 " +
"100 000 012 099 001 000 007 000 000 004 001 000 012 099 001 " +
"000 004 000 000 010 001 000 000 000 009 104 101 100 000 012 " +
"099 001 000 007 000 000 011 001 000 012 099 001 000 004 000 " +
"000 254 001 000 000 000 006 111 001 001 000 012 099 001 000 " +
"007 000 000 001 001 000 012 099 001 000 004 000 000 005 001 " +
"000 000 000 005 106 101 102 000 000 000 004 107 100 001 000 " +
"012 099 001 000 007 000 000 004 001 000 012 099 001 000 004 " +
"000 000 010 001 000 000 000 003 102 101 100 000 012 099 001 " +
"000 007 000 000 008 001 000 012 099 001 000 004 000 000 005 " +
"001 000 000 000 002 101 101 100 000 012 099 001 000 007 000 " +
"000 003 254 000 012 099 001 000 004 000 000 005 001 000 000";
String transCode
= "001, 110, 100, 101, 000, 012, 099, 001, 000, 007, 000, 000, " +
"002, 001, 000, 012, 099, 002, 000, 004, 000, 000, 005, 001, " +
"000, 000, 000, 254, 106, 001, 001, 000, 000, 000, 014, 105, " +
"100, 001, 000, 012, 099, 001, 000, 004, 000, 000, 010, 001, " +
"000, 012, 099, 001, 000, 007, 000, 000, 004, 001, 000, 000, " +
"000, 013, 108, 100, 001, 000, 012, 099, 001, 000, 004, 000, " +
"000, 010, 001, 000, 012, 099, 001, 000, 007, 000, 000, 004, " +
"001, 000, 000, 000, 012, 111, 001, 001, 000, 012, 099, 001, " +
"000, 009, 007, 000, 012, 101, 000, 007, 000, 011, 000, 000, " +
"014, 001, 000, 012, 099, 001, 000, 004, 000, 000, 005, 001, " +
"000, 000, 000, 011, 111, 001, 001, 000, 012, 099, 001, 000, " +
"004, 000, 000, 010, 001, 000, 012, 099, 001, 000, 007, 000, " +
"000, 004, 001, 000, 000, 000, 010, 111, 001, 001, 000, 012, " +
"099, 001, 000, 004, 000, 000, 009, 001, 000, 012, 099, 012, " +
"000, 008, 000, 000, 012, 001, 000, 012, 099, 012, 000, 009, " +
"000, 012, 099, 001, 000, 007, 000, 010, 000, 000, 013, 001, " +
"000, 000, 000, 009, 104, 101, 100, 000, 012, 099, 001, 000, " +
"004, 000, 000, 006, 001, 000, 012, 099, 001, 000, 007, 000, " +
"000, 007, 001, 000, 012, 099, 001, 000, 007, 000, 000, 011, " +
"001, 000, 012, 099, 001, 000, 004, 000, 000, 254, 001, 000, " +
"000, 000, 008, 103, 101, 100, 000, 012, 099, 001, 000, 007, " +
"000, 000, 004, 001, 000, 012, 099, 001, 000, 004, 000, 000, " +
"010, 001, 000, 000, 000, 007, 106, 001, 001, 000, 000, 000, " +
"006, 111, 001, 001, 000, 012, 099, 001, 000, 007, 000, 000, " +
"001, 001, 000, 012, 099, 001, 000, 004, 000, 000, 005, 001, " +
"000, 000, 000, 005, 106, 101, 102, 000, 000, 000, 004, 107, " +
"100, 001, 000, 012, 099, 001, 000, 007, 000, 000, 004, 001, " +
"000, 012, 099, 001, 000, 004, 000, 000, 010, 001, 000, 000, " +
"000, 003, 102, 101, 100, 000, 012, 099, 001, 000, 007, 000, " +
"000, 008, 001, 000, 012, 099, 001, 000, 004, 000, 000, 005, " +
"001, 000, 000, 000, 002, 101, 101, 100, 000, 012, 099, 001, " +
"000, 007, 000, 000, 003, 001, 000, 012, 099, 001, 000, 004, " +
"000, 000, 005, 001, 000, 000, 000";
Translator trans = new Translator(
transCode,
new ScriptInterpreter(params, SonstMeth.MODUS_TRANSLATOR),
params);
Script s = trans.translate(new EndlicherAutomat().bereinige(seqCode));
ScriptInterpreter sInt = new ScriptInterpreter(params, SonstMeth.MODUS_TRANSLATOR);
EndlicherAutomat ea = new EndlicherAutomat();
sInt.generateAutomaton(ea, s);
// System.out.println(ea.erzeugeSequenz().size());
System.exit(0);
LinkedList<Integer> seq = ea.erzeugeSequenz();
System.out.println();
int zwisch = 0;
LinkedList<String> array = new LinkedList<String>();
String seqInt = "";
for (Integer i : seq) {
zwisch++;
seqInt = seqInt + i + ", ";
if (zwisch % 100 == 0) {
array.add(seqInt);
seqInt = "";
}
if (zwisch % 10000 == 0) {
System.out.print(".");
}
}
SonstMeth.speichereTextAusArray("graphen", "sequenz2.txt", array, params);
}
}