Package fmg.fmg8.endlAutomat

Examples of fmg.fmg8.endlAutomat.Transition


     */
    protected void naechsterZustand() {
        int aktion;
        int parameter;
        LinkedList<Transition> bedingungen;
        Transition aktBed;
        ZInfo zusatz;
        int folgeZ = 0;
        Iterator<Transition> it;
        int i = 0;
       
        while (i < this.conds.length) {
            if (this.conds[i].evaluiere(this)) {
                if (this.initial || i != this.aktAut) {
                    this.aktAut = i;
                    this.vAut[this.aktAut].setzeChanged();
                    this.vAut[this.aktAut].notifyObservers(
                            new Integer(this.aktAut));
                    this.initial = false;
                }
                break;
            }
            i++;
        }
       
        this.expAktZyklen++;
        this.fitAktZyklen[this.aktAut]++;
        this.fitRedAktZyklen[this.aktAut]++;
        this.aktivZyklen[this.aktAut]++;
        this.mutAktZyklen++;
        this.condMutAktZyklen++;
       
        if (this.fitRedAktZyklen[this.aktAut] > this.fitRedZyklen) {
            this.setFitness(this.aktAut,
                            (int) ((double) this.getFitness()[this.aktAut]
                                    / this.fitRedWert));
            this.fitRedAktZyklen[this.aktAut] = 0;
        }
       
        if (this.fitAktZyklen[this.aktAut] > this.fitZyklen) {
            this.befehle.clear();
            this.befehle.add(new Integer(this.lastBf));

            this.setFitness(this.aktAut,
                            this.getFitness()[this.aktAut]
                            + this.fitVs[this.aktAut].fitness(
                                    (Roboter) this));

            this.fitAktZyklen[this.aktAut] = 0;
        }

//        if (this.pars.getEvol().booleanValue()) {
        if (this.umg.getSimulation().isEvolution()) {
            if (this.mutAktZyklen > this.mutZyklen) {
                this.mutV = true;
                this.mutiere();
                this.mutAktZyklen = 0;
                this.mutV = false;
            } else {
                this.mutV = false;
            }
           
            if (this.condMutAktZyklen > this.pars.getCondMutZyk()) {
                this.mutiereBeds();
                this.condMutAktZyklen = 0;
            }
        }
       
        if (this.aktZustand[this.aktAut] == null) {
            this.aktZustand[this.aktAut]
                            = this.vAut[this.aktAut].holeStartzustand();
        }

        if (this.isSelektiert()) {
            if (this.aktZustand[this.aktAut] != null) {
                this.vAut[this.aktAut].setzeChanged();
                this.vAut[this.aktAut].notifyObservers(
                        this.aktZustand[this.aktAut]);
            }
        }

        if (this.aktZustand[this.aktAut] != null) {
            zusatz = (ZInfo) this.aktZustand[this.aktAut].getInfo();
            aktion = zusatz.getAktion();
            parameter = zusatz.getParam();

            this.gesamtAktion(aktion, parameter);
           
            this.lastBf = aktion;
           
            bedingungen = zusatz.getBeds();
            it = bedingungen.iterator();
            this.aktZustand[this.aktAut] = null;
            while (it.hasNext() && folgeZ == 0) {
                aktBed = (Transition) it.next();
                if (aktBed.evaluiere(this)) {
                    folgeZ = aktBed.getFolgezustand();
                    this.aktZustand[this.aktAut]
                        = this.vAut[this.aktAut].holeKnoten(
                                new Integer(folgeZ));
                }
            }
View Full Code Here


        Condition zwischBed;
        int numOrig1, numOrig2;
        int idlBefehl;
        EndlicherAutomat[] eas = new EndlicherAutomat[endAuts.length];
        LinkedList<Transition> trans;
        Transition tran;
        String[] args = {"log 4"};
       
        if (endAuts == null
                || conds == null
                || endAuts.length != conds.length
                || endAuts.length == 0) {
            SonstMeth.log(SonstMeth.LOG_ERROR,
                          "Gesamtautomat konnte nicht erzeugt werden.",
                          new Parametersatz(args));
        }
       
        for (int i = 0; i < eas.length; i++) {
            eas[i] = new EndlicherAutomat();
            eas[i].erzeugeAusSequenz(
                    endAuts[i].erzeugeStringSeq(),
                    fmg.fmg8.endlAutomat.translator.Konstanten.STD_TRANSL_BE,
                    false);
           
            if (eas[i].istLeer()) {
                eas[i].einfuegenKnoten(Integer.MAX_VALUE,
                        SonstMeth.posSuch(
                                fmg.fmg8.umgebung2D.Konstanten.BEF,
                                "stp"),
                        1,
                        1);
               
                eas[i].setStart(eas[i].holeKnoten(Integer.MAX_VALUE));
            }
        }
       
        // Neue Knoten zuordnen.
        for (int i = 0; i < eas.length; i++) {
            knotZuord[i] = new HashMap<Integer, Integer>();
           
            knot = new ArrayList<Integer>(eas[i].holAdj().keySet());
            it = knot.iterator();

            while (it.hasNext()) {
                aktKnNum = it.next();
                aktKn = eas[i].holeKnoten(aktKnNum);
                info = aktKn.getInfo();
                neu.einfuegenKnoten(lfdNr,
                                    info.getAktion(),
                                    info.getParam(),
                                    info.getAlter());
               
                knotZuord[i].put(aktKnNum, lfdNr);
                lfdNr++;
            }
        }
       
        // Neue Kanten INTER Automaten zuordnen.
        for (int i = 0; i < eas.length; i++) {
            zielKn = eas[i].holeStartzustand();
           
            if (zielKn != null) {
                zielKnNum = (Integer) knotZuord[i].get(zielKn.holeName());
                neuBed = SonstMeth.ausFormatBed(conds[i].formatted());
                for (int j = 0; j < i; j++) {
                    zwischBed = SonstMeth.ausFormatBed(conds[j].formatted());
                    zwischBed.negiere();
                    neuBed = new InnerNode(neuBed,
                                           zwischBed,
                                           fmg.fmg8.endlAutomat.Konstanten.UND);
                }
               
                for (int j = 0; j < eas.length; j++) {
                    if (j != i) {
                        knot = new ArrayList<Integer>(
                                eas[j].holAdj().keySet());
                        it = knot.iterator();
                       
                        while (it.hasNext()) {
                            aktKnNum = (Integer) knotZuord[j].get(it.next());
                            neu.einfuegKante(aktKnNum, zielKnNum, neuBed, 1);
                        }
                    }
                }
            }
        }

        // Neue Kanten INTRA Automaten zuordnen.
        for (int i = 0; i < eas.length; i++) {
            knot1 = new ArrayList<Integer>(eas[i].holAdj().keySet());
            it1 = knot1.iterator();
           
            while (it1.hasNext()) {
                numOrig1 = it1.next();
                aktKnNum = (Integer) knotZuord[i].get(numOrig1);
                aktKn = eas[i].holeKnoten(numOrig1);
               
                if (aktKn.getInfo() != null
                        && aktKn.getInfo().getBedingungen() != null) {
                    trans = aktKn.getInfo().getBedingungen();
                    it3 = trans.iterator();
                   
                    while (it3.hasNext()) {
                        tran = it3.next();
                        numOrig2 = tran.getFolgezustand();
                        zielKnNum = (Integer) knotZuord[i].get(numOrig2);
                        aktBed = tran.getCond();
                       
                        if (aktBed != null) {
                            neu.einfuegKante(aktKnNum, zielKnNum, aktBed, 1);
                        }
                    }
View Full Code Here

            int koordX = this.links;
            int koordY = this.oben;
           
            int kX;
            int kY;
            Transition bed;
            int folgeZustand;
            String bedingung;
            int xAusgleich;
            int zaehler = 0;
           
            // Knoten
            it = knotenListe.iterator();
            while (it.hasNext()) {
                knot = it.next();

                if (this.gesetzteKn.containsKey(knot.holeName())) {
                    kX = (int) this.gesetzteKn.get(knot.holeName()).x;
                    kY = (int) this.gesetzteKn.get(knot.holeName()).y;
                    this.setzeKnoten(knot,
                                     darstellung,
                                     kX,
                                     kY,
                                     (Knoten) ausgKn);

                    if (g.istStartZ(knot)) {
                        darstellung.hinzuPfeil(kX - 60,
                                               kY - 60,
                                               kX - 45,
                                               kY - 45,
                                               0.5,
                                               false);
                    }
                } else {
                    this.setzeKnoten(knot,
                                     darstellung,
                                     koordX,
                                     koordY,
                                     (Knoten) ausgKn);

                    this.gesetzteKn.put(knot.holeName(),
                                        new Vektor2D(koordX, koordY));

                    if (g.istStartZ(knot)) {
                        darstellung.hinzuPfeil(koordX - 60,
                                               koordY - 60,
                                               koordX - 45,
                                               koordY - 45,
                                               0.5,
                                               false);
                    }

                    zaehler++;
                   
                    if (zaehler < Math.ceil(Math.sqrt(knAnzahl))) {
                        koordX = koordX + gitterX;
                    } else {
                        koordX = this.links;
                        koordY = koordY + gitterY;
                        zaehler = 0;
                    }
                }
            }

            // Kanten
            it1 = knotenListe.iterator();
            while (it1.hasNext()) {
                knot1 = (Knoten) it1.next();
                koord1 = (Vektor2D) this.gesetzteKn.get(knot1.holeName());

                it2 = (new ArrayList<Integer>(
                                knot1.holeNachfolger().keySet())).iterator();
                while (it2.hasNext()) {
                    boolean gebogen = true;
                   
                    knot2 = g.holeKnoten((Integer) it2.next());
                    koord2 = (Vektor2D) this.gesetzteKn.get(knot2.holeName());
                    Condition cond
                        = knot1.getInfo().getTransZuZustand(
                                knot2.holeName()).get(0).getCond();
                    double staerke = SonstMeth.condStrength(cond,
                                                   Konstanten.STAERKE_ERST,
                                                   Konstanten.STAERKE_ZWEIT);
                   
                    if (koord1.distanz(koord2) < 140
                            && !koord1.equals(koord2)) {
                        gebogen = false;
                    }
                   
                    darstellung.hinzuPfeil(
                            (int) koord1.x,
                            (int) koord1.y,
                            (int) koord2.x,
                            (int) koord2.y,
                            staerke,
                            gebogen);
                }
            }

            // Kantenbeschriftungen
            it1 = knotenListe.iterator();
            while (it1.hasNext()) {
                int kantAlter;
                knot1 = (Knoten) it1.next();
                koord1 = this.gesetzteKn.get(knot1.holeName());

                it3 = ((ZInfo)
                                knot1.getInfo()).getBeds().iterator();
                while (it3.hasNext()) {
                    Polygon p = new Polygon();
                    bed = it3.next();
                    folgeZustand = bed.getFolgezustand();
                    kantAlter = bed.getAlter();
                    bedingung = bed.getCond().toString();
                    knot2 = g.holeKnoten(new Integer(folgeZustand));
                    koord2 = this.gesetzteKn.get(knot2.holeName());

                    p.addPoint((int) koord1.x, (int) koord1.y);
                    p.addPoint((int) koord2.x, (int) koord2.y);
View Full Code Here

        String bed;
        int folgeZustand;
        int kantAlter;
        ZInfo zusatz;
        Iterator<Transition> it;
        Transition bedingung;
        String istStart = "";

        this.loescheSelKnot();
        this.aktKnot = knot;

        if (this.aktKnot != null) {
            zusatz = (ZInfo) this.aktKnot.getInfo();

            it = zusatz.getBeds().iterator();
            while (it.hasNext()) {
                bedingung = (Transition) it.next();
                bed = bedingung.getCond().toString();
                folgeZustand = bedingung.getFolgezustand();
                kantAlter = bedingung.getAlter();
                this.ktList.add(bed
                                  + "-"
                                  + folgeZustand
                                  + " ("
                                  + kantAlter
View Full Code Here

     * @param event  Das Event.
     */
    public void itemStateChanged(final ItemEvent event) {
        int pos;
        ZInfo zusatz;
        Transition bed;

        if (event.getSource() == this.ktList) {
            pos = ((Integer) event.getItem()).intValue();
            this.kantenEinstell.setEnabled(true);

            if (this.ktList.getSelectedItem() != null) {
                if (this.ktList.getSelectedItem().equals(
                        Messages.getString("SteuerFenster.KanteNeu"))) {
                    this.beding.setText(
                        Messages.getString("SteuerFenster.Bedingung"));
                    this.folgeZust.setText(
                        Messages.getString("SteuerFenster.FolgeZ"));
                    this.ktAlter.setText(
                        Messages.getString("SteuerFenster.KantAlter"));
                } else {
                    zusatz = (ZInfo) this.aktKnot.getInfo();
                    bed = (Transition) zusatz.getBeds().get(pos);
                    this.beding.setText(bed.getCond().toString());
                    this.folgeZust.setText("" + bed.getFolgezustand());
                    this.ktAlter.setText("" + bed.getAlter());
                }
            }
        } else if (event.getSource() == this.grAuswahl) {
            this.waehleGraph(this.grAuswahl.getSelectedIndex());
            this.selKn(this.aktGrph.getAktSelKnot());
View Full Code Here

        Condition zwischBed;
        int numOrig1, numOrig2;
        int idlBefehl;
        EndlicherAutomat[] eas = new EndlicherAutomat[endAuts.length];
        LinkedList<Transition> trans;
        Transition tran;
        String[] args = {"log 4"};
       
        if (endAuts == null
                || conds == null
                || endAuts.length != conds.length
                || endAuts.length == 0) {
            SonstMeth.log(SonstMeth.LOG_ERROR,
                          "Gesamtautomat konnte nicht erzeugt werden.",
                          new Parametersatz(args));
        }
       
        for (int i = 0; i < eas.length; i++) {
            eas[i] = new EndlicherAutomat();
            eas[i].erzeugeAusSequenz(
                    endAuts[i].erzeugeStringSeq(),
                    fmg.fmg8.endlAutomat.translator.Konstanten.STD_TRANSL_BE,
                    false);
           
            if (eas[i].istLeer()) {
                eas[i].einfuegenKnoten(Integer.MAX_VALUE,
                        SonstMeth.posSuch(
                                fmg.fmg8.umgebung2D.Konstanten.BEF,
                                "stp"),
                        1,
                        1);
               
                eas[i].setStart(eas[i].holeKnoten(Integer.MAX_VALUE));
            }
        }
       
        // Neue Knoten zuordnen.
        for (int i = 0; i < eas.length; i++) {
            knotZuord[i] = new HashMap<Integer, Integer>();
           
            knot = new ArrayList<Integer>(eas[i].holAdj().keySet());
            it = knot.iterator();

            while (it.hasNext()) {
                aktKnNum = it.next();
                aktKn = eas[i].holeKnoten(aktKnNum);
                info = aktKn.getInfo();
                neu.einfuegenKnoten(lfdNr,
                                    info.getAktion(),
                                    info.getParam(),
                                    info.getAlter());
               
                knotZuord[i].put(aktKnNum, lfdNr);
                lfdNr++;
            }
        }
       
        // Neue Kanten INTER Automaten zuordnen.
        for (int i = 0; i < eas.length; i++) {
            zielKn = eas[i].holeStartzustand();
           
            if (zielKn != null) {
                zielKnNum = (Integer) knotZuord[i].get(zielKn.holeName());
                neuBed = SonstMeth.ausFormatBed(conds[i].formatted());
                for (int j = 0; j < i; j++) {
                    zwischBed = SonstMeth.ausFormatBed(conds[j].formatted());
                    zwischBed.negiere();
                    neuBed = new InnerNode(neuBed,
                                           zwischBed,
                                           fmg.fmg8.endlAutomat.Konstanten.UND);
                }
               
                for (int j = 0; j < eas.length; j++) {
                    if (j != i) {
                        knot = new ArrayList<Integer>(
                                eas[j].holAdj().keySet());
                        it = knot.iterator();
                       
                        while (it.hasNext()) {
                            aktKnNum = (Integer) knotZuord[j].get(it.next());
                            neu.einfuegKante(aktKnNum, zielKnNum, neuBed, 1);
                        }
                    }
                }
            }
        }

        // Neue Kanten INTRA Automaten zuordnen.
        for (int i = 0; i < eas.length; i++) {
            knot1 = new ArrayList<Integer>(eas[i].holAdj().keySet());
            it1 = knot1.iterator();
           
            while (it1.hasNext()) {
                numOrig1 = it1.next();
                aktKnNum = (Integer) knotZuord[i].get(numOrig1);
                aktKn = eas[i].holeKnoten(numOrig1);
               
                if (aktKn.getInfo() != null
                        && aktKn.getInfo().getBedingungen() != null) {
                    trans = aktKn.getInfo().getBedingungen();
                    it3 = trans.iterator();
                   
                    while (it3.hasNext()) {
                        tran = it3.next();
                        numOrig2 = tran.getFolgezustand();
                        zielKnNum = (Integer) knotZuord[i].get(numOrig2);
                        aktBed = tran.getCond();
                       
                        if (aktBed != null) {
                            neu.einfuegKante(aktKnNum, zielKnNum, aktBed, 1);
                        }
                    }
View Full Code Here

            = new ArrayList<Integer>(alleBeds.keySet());
        LinkedList<Transition> aktBeds;
        Integer aktKnoten;
        Iterator<Transition> it;
        String aktBed;
        Transition vollstBed;
        Integer fZustand;
        int pruefIndex;
       
        while (alleKnoten.size() > 0) {
            pruefIndex = this.rand.nextInt(alleKnoten.size());
            aktKnoten = alleKnoten.get(pruefIndex);
            aktBeds = alleBeds.get(aktKnoten);
           
            it = aktBeds.iterator();
            while (it.hasNext()) {
                vollstBed = (Transition) it.next();
                aktBed = vollstBed.getCond().formatted();
                if (aktBed.charAt(1) == fmg.fmg8.endlAutomat.Konstanten.FALSE) {
                    fZustand = new Integer(vollstBed.getFolgezustand());
                    ea.entferneKante(aktKnoten, fZustand, vollstBed);
                    return true;
                }
            }
           
View Full Code Here

     * @param ea  Der zu mutierende Automat.
     * @return  Ob eine Bedingung mutiert wurde.
     */
    public final boolean mutationBedA(final EndlicherAutomat ea) {
        ArrayList<Transition> bedingungen = ea.getBedListe();
        Transition aktBed;
        String aktString;
        String neuString = "";
        int pos;
        int zufallsindex;
        ArrayList<Character> zeichen = new ArrayList<Character>(2);
        zeichen.add(new Character(fmg.fmg8.endlAutomat.Konstanten.FALSE));
        zeichen.add(new Character(fmg.fmg8.endlAutomat.Konstanten.GL));
        zeichen.add(new Character(fmg.fmg8.endlAutomat.Konstanten.UNGF));
        zeichen.add(new Character(fmg.fmg8.endlAutomat.Konstanten.KLGL));
        zeichen.add(new Character(fmg.fmg8.endlAutomat.Konstanten.GRGL));
        zeichen.add(new Character(fmg.fmg8.endlAutomat.Konstanten.KL));
        zeichen.add(new Character(fmg.fmg8.endlAutomat.Konstanten.GR));
        zeichen.add(new Character(fmg.fmg8.endlAutomat.Konstanten.NUNGF));
        zeichen.add(new Character(fmg.fmg8.endlAutomat.Konstanten.UGL));
        zeichen.add(new Character(fmg.fmg8.endlAutomat.Konstanten.TRUE));
        boolean links = this.rand.nextBoolean();
        boolean oben = this.rand.nextBoolean();
        boolean var1 = this.rand.nextBoolean();
        boolean var2 = !var1 || this.rand.nextBoolean();
        String string1;
        String string2;

        if (bedingungen.size() > 0) {
            zufallsindex = this.rand.nextInt(bedingungen.size());
            aktBed = (Transition) bedingungen.get(zufallsindex);
            aktString = aktBed.getCond().formatted();

            pos = this.indexZeichen(aktString,
                                    zeichen);
            if (aktString.charAt(pos)
                    == fmg.fmg8.endlAutomat.Konstanten.FALSE) {
                if (var1) {
                    int variable1 = SonstMeth.glVertZwischen(
                            SonstMeth.minVar(this.modus),
                            SonstMeth.maxVar(this.modus),
                            this.rand);
                   
                    string1 = " " 
                        + fmg.fmg8.endlAutomat.Konstanten.EING + " "
                        + fmg.fmg8.sonstiges.SonstMeth.normZahl(variable1);
                } else {
                    int nummer1 = this.rand.nextInt(255) + 1;
                    string1 = fmg.fmg8.sonstiges.SonstMeth.normZahl(nummer1);
                }

                if (var2) {
                    int variable2 = SonstMeth.glVertZwischen(
                            SonstMeth.minVar(this.modus),
                            SonstMeth.maxVar(this.modus),
                            this.rand);
                   
                    string2 = " "
                        + fmg.fmg8.endlAutomat.Konstanten.EING + " "
                        + fmg.fmg8.sonstiges.SonstMeth.normZahl(variable2);
                } else {
                    int nummer2 = this.rand.nextInt(255) + 1;
                    string2 = fmg.fmg8.sonstiges.SonstMeth.normZahl(nummer2);
                }

                neuString = aktString.substring(0, pos - 1)
                            + string1
                            + " " + fmg.fmg8.endlAutomat.Konstanten.GL + " "
                            + string2
                            + aktString.substring(pos + 2);
            }

            if (aktString.charAt(pos) == fmg.fmg8.endlAutomat.Konstanten.GL) {
                if (links) {
                    int lGrenze;
                    int rGrenze;
                    if (pos >= 6 && aktString.charAt(pos - 6)
                        == fmg.fmg8.endlAutomat.Konstanten.EING) {
                        lGrenze = pos - 7;
                    } else {
                        lGrenze = pos - 4;
                    }
                    if (aktString.charAt(pos + 3)
                            == fmg.fmg8.endlAutomat.Konstanten.EING) {
                            rGrenze = pos + 8;
                        } else {
                            rGrenze = pos + 5;
                    }
                    neuString = aktString.substring(0, lGrenze)
                        + " " + fmg.fmg8.endlAutomat.Konstanten.FALSE + " "
                        + aktString.substring(rGrenze);
                } else {
                    neuString = aktString.substring(0, pos)
                                + fmg.fmg8.endlAutomat.Konstanten.UNGF
                                + aktString.substring(pos + 1);
                }
            }

            if (aktString.charAt(pos) == fmg.fmg8.endlAutomat.Konstanten.UNGF) {
                if (links) {
                    neuString = aktString.substring(0, pos)
                                + fmg.fmg8.endlAutomat.Konstanten.GL
                                + aktString.substring(pos + 1);
                } else {
                    if (oben) {
                        neuString = aktString.substring(0, pos)
                                    + fmg.fmg8.endlAutomat.Konstanten.KLGL
                                    + aktString.substring(pos + 1);
                    } else {
                        neuString = aktString.substring(0, pos)
                                    + fmg.fmg8.endlAutomat.Konstanten.GRGL
                                    + aktString.substring(pos + 1);
                    }
                }
            }

            if (aktString.charAt(pos) == fmg.fmg8.endlAutomat.Konstanten.KLGL) {
                if (links) {
                    neuString = aktString.substring(0, pos)
                                + fmg.fmg8.endlAutomat.Konstanten.UNGF
                                + aktString.substring(pos + 1);
                } else {
                    neuString = aktString.substring(0, pos)
                                + fmg.fmg8.endlAutomat.Konstanten.KL
                                + aktString.substring(pos + 1);
                }
            }

            if (aktString.charAt(pos) == fmg.fmg8.endlAutomat.Konstanten.GRGL) {
                if (links) {
                    neuString = aktString.substring(0, pos)
                                + fmg.fmg8.endlAutomat.Konstanten.UNGF
                                + aktString.substring(pos + 1);
                } else {
                    neuString = aktString.substring(0, pos)
                                + fmg.fmg8.endlAutomat.Konstanten.GR
                                + aktString.substring(pos + 1);
                }
            }

            if (aktString.charAt(pos) == fmg.fmg8.endlAutomat.Konstanten.KL) {
                if (links) {
                    neuString = aktString.substring(0, pos)
                                + fmg.fmg8.endlAutomat.Konstanten.KLGL
                                + aktString.substring(pos + 1);
                } else {
                    neuString = aktString.substring(0, pos)
                                + fmg.fmg8.endlAutomat.Konstanten.NUNGF
                                + aktString.substring(pos + 1);
                }
            }

            if (aktString.charAt(pos) == fmg.fmg8.endlAutomat.Konstanten.GR) {
                if (links) {
                    neuString = aktString.substring(0, pos)
                                + fmg.fmg8.endlAutomat.Konstanten.GRGL
                                + aktString.substring(pos + 1);
                } else {
                    neuString = aktString.substring(0, pos)
                                + fmg.fmg8.endlAutomat.Konstanten.NUNGF
                                + aktString.substring(pos + 1);
                }
            }

            if (aktString.charAt(pos)
                    == fmg.fmg8.endlAutomat.Konstanten.NUNGF) {
                if (links) {
                    if (oben) {
                        neuString = aktString.substring(0, pos)
                                    + fmg.fmg8.endlAutomat.Konstanten.KL
                                    + aktString.substring(pos + 1);
                    } else {
                        neuString = aktString.substring(0, pos)
                                    + fmg.fmg8.endlAutomat.Konstanten.GR
                                    + aktString.substring(pos + 1);
                    }
                } else {
                    neuString = aktString.substring(0, pos)
                                + fmg.fmg8.endlAutomat.Konstanten.UGL
                                + aktString.substring(pos + 1);
                }
            }

            if (aktString.charAt(pos) == fmg.fmg8.endlAutomat.Konstanten.UGL) {
                if (links) {
                    neuString = aktString.substring(0, pos)
                                + fmg.fmg8.endlAutomat.Konstanten.NUNGF
                                + aktString.substring(pos + 1);
                } else {
                    int lGrenze;
                    int rGrenze;
                    if (pos >= 6 && aktString.charAt(pos - 6)
                        == fmg.fmg8.endlAutomat.Konstanten.EING) {
                        lGrenze = pos - 7;
                    } else {
                        lGrenze = pos - 4;
                    }
                    if (aktString.charAt(pos + 3)
                            == fmg.fmg8.endlAutomat.Konstanten.EING) {
                            rGrenze = pos + 8;
                        } else {
                            rGrenze = pos + 5;
                    }
                    neuString = aktString.substring(0, lGrenze)
                        + " "
                        + fmg.fmg8.endlAutomat.Konstanten.TRUE
                        + " "
                        + aktString.substring(rGrenze);
                }
            }

            if (aktString.charAt(pos) == fmg.fmg8.endlAutomat.Konstanten.TRUE) {
                if (var1) {
                    int variable1 = SonstMeth.glVertZwischen(
                            SonstMeth.minVar(this.modus),
                            SonstMeth.maxVar(this.modus),
                            this.rand);
                   
                    string1 = " "
                        + fmg.fmg8.endlAutomat.Konstanten.EING
                        + " "
                        + fmg.fmg8.sonstiges.SonstMeth.normZahl(variable1);
                } else {
                    int nummer1 = this.rand.nextInt(255) + 1;
                    string1 = fmg.fmg8.sonstiges.SonstMeth.normZahl(nummer1);
                }

                if (var2) {
                    int variable2 = SonstMeth.glVertZwischen(
                            SonstMeth.minVar(this.modus),
                            SonstMeth.maxVar(this.modus),
                            this.rand);
                   
                    string2 = " "
                        + fmg.fmg8.endlAutomat.Konstanten.EING
                        + " "
                        + fmg.fmg8.sonstiges.SonstMeth.normZahl(variable2);
                } else {
                    int nummer2 = this.rand.nextInt(255) + 1;
                    string2 = fmg.fmg8.sonstiges.SonstMeth.normZahl(nummer2);
                }

                neuString = aktString.substring(0, pos - 1)
                            + string1
                            + " " + fmg.fmg8.endlAutomat.Konstanten.UGL + " "
                            + string2
                            + aktString.substring(pos + 2);
            }

            aktBed.setBedingung(neuString);
            return true;
        }
       
        return false;
    }
View Full Code Here

     * @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 = (Transition) bedingungen.get(zufallsindex);
            aktString = aktBed.getCond().formatted();
           
            pos = this.indexZeichenfolge(aktString,
                                         fmg.fmg8.endlAutomat.Konstanten.UND,
                                         fmg.fmg8.endlAutomat.Konstanten.TRUE);
           
            if (pos < 0) {
                pos = this.indexZeichenfolge(
                        aktString,
                        fmg.fmg8.endlAutomat.Konstanten.ODER,
                        fmg.fmg8.endlAutomat.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,
                    fmg.fmg8.endlAutomat.Konstanten.TRUE,
                    fmg.fmg8.endlAutomat.Konstanten.UND);

            if (pos < 0) {
                pos = this.indexZeichenfolge(
                        aktString,
                        fmg.fmg8.endlAutomat.Konstanten.FALSE,
                        fmg.fmg8.endlAutomat.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,
                                         fmg.fmg8.endlAutomat.Konstanten.ODER,
                                         fmg.fmg8.endlAutomat.Konstanten.TRUE);
            if (pos < 0) {
                pos = this.indexZeichenfolge(aktString,
                        fmg.fmg8.endlAutomat.Konstanten.UND,
                        fmg.fmg8.endlAutomat.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,
                                         fmg.fmg8.endlAutomat.Konstanten.TRUE,
                                         fmg.fmg8.endlAutomat.Konstanten.ODER);
            if (pos < 0) {
                pos = this.indexZeichenfolge(aktString,
                        fmg.fmg8.endlAutomat.Konstanten.FALSE,
                        fmg.fmg8.endlAutomat.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);
        }
View Full Code Here

        // 1. Suche pos mit BED[pos] = UND oder BED[pos] = ODER.
        // 2. Falls so ein pos ex.: zuf�llig Fall 2 oder Fall 3.
        //    Sonst: Fall 1.
       
        ArrayList<Transition> bedingungen = ea.getBedListe();
        Transition aktBed;
        String aktString;
        String neuString = "";
        int posLKlammer;
        int posRKlammer;
        int pos;
        int zufallsindex;
        ArrayList<Character> zeichen = new ArrayList<Character>(2);
        zeichen.add(new Character(fmg.fmg8.endlAutomat.Konstanten.UND));
        zeichen.add(new Character(fmg.fmg8.endlAutomat.Konstanten.ODER));
        boolean und = this.rand.nextBoolean();
        boolean fallZwei = this.rand.nextBoolean();
        boolean erzwingeFall1 = this.rand.nextInt(5) == 0;
       
        if (bedingungen.size() > 0) {
            zufallsindex = this.rand.nextInt(bedingungen.size());
           
            aktBed = (Transition) bedingungen.get(zufallsindex);
            aktString = aktBed.getCond().formatted();

            pos = this.indexZeichen(aktString,
                                    zeichen);
            if (pos < 0 || erzwingeFall1) {
                // Fall 1
                if (und) {
                    neuString = " " + fmg.fmg8.endlAutomat.Konstanten.KA + " "
                        + " " + fmg.fmg8.endlAutomat.Konstanten.TRUE + " "
                        + " " + fmg.fmg8.endlAutomat.Konstanten.UND + " "
                        + aktString
                        + " " + fmg.fmg8.endlAutomat.Konstanten.KZ + " ";
                } else {
                    neuString =
                        " " + fmg.fmg8.endlAutomat.Konstanten.KA + " "
                        + " " + fmg.fmg8.endlAutomat.Konstanten.FALSE + " "
                        + " " + fmg.fmg8.endlAutomat.Konstanten.ODER + " "
                        + aktString
                        + " " + fmg.fmg8.endlAutomat.Konstanten.KZ + " ";
                }
               
            } else {
                // Fall 2 oder 3
                posLKlammer = this.findeKlLinks(aktString, pos);
                posRKlammer = this.findeKlRechts(aktString, pos);
                if (fallZwei && und) {
                    neuString = aktString.substring(0, posLKlammer + 2)
                        + " " + fmg.fmg8.endlAutomat.Konstanten.KA + " "
                        + " " + fmg.fmg8.endlAutomat.Konstanten.TRUE + " "
                        + " " + fmg.fmg8.endlAutomat.Konstanten.UND + " "
                        + aktString.substring(
                                posLKlammer + 2,
                                pos - 1)
                        + " " + fmg.fmg8.endlAutomat.Konstanten.KZ + " "
                        + aktString.substring(pos - 1);
                }

                if (fallZwei && !und) {
                    neuString = aktString.substring(0, posLKlammer + 2)
                        + " " + fmg.fmg8.endlAutomat.Konstanten.KA + " "
                        + " " + fmg.fmg8.endlAutomat.Konstanten.FALSE + " "
                        + " " + fmg.fmg8.endlAutomat.Konstanten.ODER + " "
                        + aktString.substring(
                                posLKlammer + 2,
                                pos - 1)
                        + " " + fmg.fmg8.endlAutomat.Konstanten.KZ + " "
                        + aktString.substring(pos - 1);
                }
               
                if (!fallZwei && und) {
                    neuString =
                        aktString.substring(0, pos + 2)
                        + " " + fmg.fmg8.endlAutomat.Konstanten.KA + " "
                        + aktString.substring(
                                pos + 2,
                                posRKlammer - 1)
                        + " " + fmg.fmg8.endlAutomat.Konstanten.UND + " "
                        + " " + fmg.fmg8.endlAutomat.Konstanten.TRUE + " "
                        + " " + fmg.fmg8.endlAutomat.Konstanten.KZ + " "
                        + aktString.substring(posRKlammer - 1);
                }

                if (!fallZwei && !und) {
                    neuString = aktString.substring(0, pos + 2)
                    + " " + fmg.fmg8.endlAutomat.Konstanten.KA + " "
                    + aktString.substring(
                            pos + 2,
                            posRKlammer - 1)
                    + " " + fmg.fmg8.endlAutomat.Konstanten.ODER + " "
                    + " " + fmg.fmg8.endlAutomat.Konstanten.FALSE + " "
                    + " " + fmg.fmg8.endlAutomat.Konstanten.KZ + " "
                    + aktString.substring(posRKlammer - 1);
                }
            }

            aktBed.setBedingung(neuString);
           
            return true;
        }
       
        return false;
View Full Code Here

TOP

Related Classes of fmg.fmg8.endlAutomat.Transition

Copyright © 2018 www.massapicom. 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.