* @param ea Der zu mutierende Automat.
* @return Ob eine Bedingung mutiert wurde.
*/
public final boolean mutationBedBeinfacher(final EndlicherAutomat ea) {
ArrayList<Transition> bedingungen = ea.getBedListe();
Transition aktBed;
String aktString;
String neuString;
int posLKlammer;
int posRKlammer;
int pos;
int zufallsindex;
while (bedingungen.size() > 0) {
zufallsindex = rand.nextInt(bedingungen.size());
aktBed = bedingungen.get(zufallsindex);
aktString = aktBed.getCond().formatted();
pos = this.indexZeichenfolge(aktString,
eas.simulation.spatial.sim2D.marbSimulation.Konstanten.UND,
eas.simulation.spatial.sim2D.marbSimulation.Konstanten.TRUE);
if (pos < 0) {
pos = this.indexZeichenfolge(
aktString,
eas.simulation.spatial.sim2D.marbSimulation.Konstanten.ODER,
eas.simulation.spatial.sim2D.marbSimulation.Konstanten.FALSE);
}
if (pos >= 0) {
posLKlammer = this.findeKlLinks(aktString, pos);
posRKlammer = pos + 3;
neuString = aktString.substring(0, posLKlammer - 1)
+ aktString.substring(posLKlammer + 2,
pos - 4)
+ aktString.substring(posRKlammer + 2);
aktBed.setBedingung(neuString);
return true;
}
pos = this.indexZeichenfolge(
aktString,
eas.simulation.spatial.sim2D.marbSimulation.Konstanten.TRUE,
eas.simulation.spatial.sim2D.marbSimulation.Konstanten.UND);
if (pos < 0) {
pos = this.indexZeichenfolge(
aktString,
eas.simulation.spatial.sim2D.marbSimulation.Konstanten.FALSE,
eas.simulation.spatial.sim2D.marbSimulation.Konstanten.ODER);
}
if (pos >= 0) {
posLKlammer = pos - 3;
posRKlammer = this.findeKlRechts(aktString, pos);
neuString = aktString.substring(0, pos - 7)
+ aktString.substring(pos + 2,
posRKlammer - 1)
+ aktString.substring(posRKlammer + 2);
aktBed.setBedingung(neuString);
return true;
}
pos = this.indexZeichenfolge(aktString,
eas.simulation.spatial.sim2D.marbSimulation.Konstanten.ODER,
eas.simulation.spatial.sim2D.marbSimulation.Konstanten.TRUE);
if (pos < 0) {
pos = this.indexZeichenfolge(aktString,
eas.simulation.spatial.sim2D.marbSimulation.Konstanten.UND,
eas.simulation.spatial.sim2D.marbSimulation.Konstanten.FALSE);
}
if (pos >= 0) {
posLKlammer = this.findeKlLinks(aktString, pos);
posRKlammer = pos + 3;
neuString = aktString.substring(0, posLKlammer - 1)
+ aktString.substring(pos - 1, pos + 2)
+ aktString.substring(posRKlammer + 2);
aktBed.setBedingung(neuString);
return true;
}
pos = this.indexZeichenfolge(aktString,
eas.simulation.spatial.sim2D.marbSimulation.Konstanten.TRUE,
eas.simulation.spatial.sim2D.marbSimulation.Konstanten.ODER);
if (pos < 0) {
pos = this.indexZeichenfolge(aktString,
eas.simulation.spatial.sim2D.marbSimulation.Konstanten.FALSE,
eas.simulation.spatial.sim2D.marbSimulation.Konstanten.UND);
}
if (pos >= 0) {
posLKlammer = pos - 6;
posRKlammer = this.findeKlRechts(aktString, pos);
neuString = aktString.substring(0, posLKlammer - 1)
+ aktString.substring(pos - 4, pos - 1)
+ aktString.substring(posRKlammer + 2);
aktBed.setBedingung(neuString);
return true;
}
bedingungen.remove(zufallsindex);
}