Package fmg.fmg8.umgebung2D

Examples of fmg.fmg8.umgebung2D.Roboter


    /**
     * Deselektiert alle Roboter in der Liste der Akteure der Umgebung.
     */
    private void deselektiereAlle() {
        Iterator<Roboter> it = this.umgebung.getAkteure().iterator();
        Roboter rob;
        while (it.hasNext()) {
            rob = it.next();
            rob.setSelektiert(false);
        }
        if (this.eltTraceB != null) {
            this.eltTraceB.deselektiereAlle();
        }
    }
View Full Code Here


     * und (TODO!) setzt die im Sensorfenster eingetragenen Sensoren als
     * Konstante Sensoren f�r den Roboter.
     */
    private void setzeSensoren() {
        Iterator<Roboter> it = this.umgebung.getAkteure().iterator();
        Roboter aktRob;
        while (it.hasNext()) {
            aktRob = it.next();
            if (aktRob.isSelektiert()
                    && this.sensFenster != null
                    && this.sensorFenster.isVisible()) {
   
                // Zeigt die berechneten Sensoren im Sensorfenster an.
                for (int i = 0; i < Konstanten.SENSOR_ANZAHL_BERECHNET; i++) {
                    this.sensorFenster.setSensor(i, aktRob.getSensorWert(i));
                }
               
                this.sensorFenster.setFitness(aktRob.getFitString());
            }
        }
       
//            // Setze die konstanten Sensoren auf die im Fenster eingetragenen
//            // Werte.
View Full Code Here

        Condition zCond;
        int aktion;
        int param;      
        int alt;
        boolean istStart;
        Roboter aktRob;
        Condition[] condListe = new Condition[rob.length];
        int j = -1;
       
        /*
         * Ersetzt alle Vorkommnisse von <code>null</code> im Array rob durch
         * g�ltige im Array weiter vorne stehende Roboter. Dabei wird die
         * Liste der Roboter VOR dem ersten Vorkommnis von <code>null</code>
         * immer wieder �ber das Array gelegt und die null-Werte werden
         * �berschrieben:
         *
         * [1 3 null null null null] => [1 3 1 3 1 3].
         *
         * Wenn nach dem ersten Vorkommnis von <code>null</code> ein g�ltiger
         * Roboter vorkommt (dies ist kein erw�nschter Fall), dann wird er
         * im Array belassen.
         */
        for (int i = 0; i < rob.length; i++) {
            if (rob[i] == null) {
                if (j < 0) {
                    j = i;
                }
                rob[i] = rob[i % j];
            }
        }
       
        for (int i = 0; i < rob.length; i++) {
            if (rob[i].getFitness()[0] > 0) {
                vert.add(new Long(rob[i].getFitness()[0]));
            } else {
                vert.add(new Long(0));
            }
        }

        aktRob = (Roboter) MathMeth.randVerteilung(rob, vert, this.rand);
        zustaende = aktRob.vAuts()[0].getKnList();
        fitness = aktRob.getFitness()[0];
       
        vorhandenAll = true;
       
        it = zustaende.iterator();
        while (it.hasNext()) {
            aktName = (Integer) it.next();
            for (int i = 0; i < rob.length; i++) {
                zwischKnoten = rob[i].vAuts()[0].holeKnoten(aktName);
                if (zwischKnoten != null) {
                    knotenListe[i] = zwischKnoten;
                } else {
                    vorhandenAll = false;
                    break;
                }
            }
           
            if (vorhandenAll) {
                zKnoten = (Knoten) MathMeth.randVerteilung(knotenListe,
                                                           vert,
                                                           this.rand);
            } else {
                zKnoten = aktRob.vAuts()[0].holeKnoten(aktName);
            }
           
            aktion = ((ZInfo) zKnoten.getInfo()).getAktion();
            param = ((ZInfo) zKnoten.getInfo()).getParam();
            alt = ((ZInfo) zKnoten.getInfo()).getAlter();
            istStart = ((ZInfo) zKnoten.getInfo()).istStartZ();
           
            kind.einfuegenKnoten(aktName, aktion, param, alt);
            if (istStart) {
                kind.setStart(kind.holeKnoten(aktName));
            }
        }
       
        it1 = zustaende.iterator();
        while (it1.hasNext()) {
            kn1 = (Integer) it1.next();
            it2 = zustaende.iterator();
            while (it2.hasNext()) {
                kn2 = (Integer) it2.next();
               
                vorhandenAll = true;
                if (aktRob.vAuts()[0].kanteExistiert(kn1, kn2)) {
                    for (int i = 0; i < rob.length; i++) {
                        if (rob[i].vAuts()[0].kanteExistiert(kn1, kn2)) {
                            condListe[i] = rob[i].vAuts()[0].getCondZuTrans(kn1,
                                                                           kn2);
                        } else {
                            vorhandenAll = false;
                            break;
                        }
                    }
                   
                    if (vorhandenAll) {
                        zCond = (Condition) MathMeth.randVerteilung(condListe,
                                                                    vert,
                                                                    this.rand);
                    } else {
                        zCond = aktRob.vAuts()[0].getCondZuTrans(kn1, kn2);
                    }
                   
                    kind.einfuegKante(kn1, kn2, zCond, 1);
                }
            }
        }

        /*
         * TODO: Alter der Knoten UND Kanten.
         */
       
        int[] fits = new int[1];
        String[] codes = new String[1];
        fits[0] = (int) fitness;
        codes[0] = kind.erzeugeStringSeq();
       
        robC[0] = new RobCode(
                id,
                fits,
                codes,
                aktRob.getConds(),
                aktRob.getTransStdCodes(),
                SonstMeth.stringAusListSeqs(aktRob.getTransCodes()),
                SonstMeth.stringAusListSeqs(aktRob.getVerhCodes()));
       
        return robC;
    }
View Full Code Here

     * @return  Die rekombinierte Population.
     */
    public ArrayList<RobCode> rekombiniere(final ArrayList<Roboter> pop) {
        ArrayList<RobCode> kindPop = new ArrayList<RobCode>();
        Roboter[] eltern;
        Roboter aktRob;
        Iterator<Roboter> it = pop.iterator();

        while (it.hasNext()) {
            aktRob = it.next();
            eltern = aktRob.getEltern().holeNahe(aktRob.getPosition().x,
                                                 aktRob.getPosition().y,
                                                 this.pars.getRekAnzEltern());
           
            for (int i = 0; i < this.pars.getRekAnzKinder().intValue(); i++) {
                kindPop.add(this.rekombEinz(eltern)[0]);
            }
View Full Code Here

     *
     * @return  Der mutierte Roboter.
     */
    @Override
    public boolean mutiere(final Roboter rob) {
        Roboter rob2;
        LinkedList<Integer> verhSeq;
        LinkedList<Integer> tranSeq;
       
        if (!rob.getClass().equals(Roboter.class)) {
            throw new RuntimeException(
                    "F�r 'MutationSEQ' ist eine Instanz der Klasse Roboter"
                    + " erforderlich. Gefunden wurde: " + rob.getClass());
        }
       
        rob2 = (Roboter) rob;
       
        if (this.mutVerh && rob2.isMutV()) {
            verhSeq = this.mut.mutiere(
                        rob2.getVerhCodes()[rob2.getAktAutNum()]);
            rob2.setAktVCode(verhSeq);
        }
        if (this.mutTrans && rob2.isMutT()) {
            tranSeq = this.mut.mutiere(
                        rob2.getTransCodes()[rob2.getAktAutNum()]);
            rob2.setAktTCode(tranSeq);
        }
       
        return (rob2.isMutV() || rob2.isMutT());
    }
View Full Code Here

        Knoten zwischKnoten;
        boolean vorhandenAll;
        Iterator<Integer> it;
        Iterator<Integer> it1;
        Iterator<Integer> it2;
        Roboter aktRob = null;
        EndlicherAutomat[] kind;
        ArrayList<Integer> zustaende;
        RobCode[] robC = new RobCode[1];
        Knoten[] knotList = new Knoten[rob.length];
        Condition[] condListe = new Condition[rob.length];
        ArrayList<Long> vert = new ArrayList<Long>(rob.length);
       
        if (rob.length <= 0 || rob[0] == null) {
            SonstMeth.log(SonstMeth.LOG_ERROR,
                          "Kein Roboter zum Rekombinieren �bergeben ("
                          + this + ")",
                          this.pars);
        }
       
        id = rob[0].getId();
        kind = new EndlicherAutomat[rob[0].vAuts().length];
       
        /*
         * Ersetzt alle Vorkommnisse von <code>null</code> im Array rob durch
         * g�ltige im Array weiter vorne stehende Roboter. Dabei wird die
         * Liste der Roboter VOR dem ersten Vorkommnis von <code>null</code>
         * immer wieder �ber das Array gelegt und die null-Werte werden
         * �berschrieben:
         *
         * [1 3 null null null null] => [1 3 1 3 1 3].
         *
         * Wenn nach dem ersten Vorkommnis von <code>null</code> ein g�ltiger
         * Roboter vorkommt (dies ist allerdings kein erw�nschter Fall), dann
         * wird er im Array belassen.
         */
        anzRobs = -1;
        for (int i = 0; i < rob.length; i++) {
            if (rob[i] == null) {
                if (anzRobs < 0) {
                    anzRobs = i;
                }
                rob[i] = rob[i % anzRobs];
            }
        }

        fitness = new int[rob[0].vAuts().length];
       
        for (int i = 0; i < rob[0].vAuts().length; i++) {
            vert.clear();
           
            // Erzeuge Wahrscheinlichkeitsverteilung fitnessproportional.
            for (int j = 0; j < rob.length; j++) {
                if (rob[j].getFitness()[i] > 0) {
                    vert.add(new Long(rob[j].getFitness()[i]));
                } else {
                    vert.add(new Long(0));
                }
            }
           
            aktRob = (Roboter) MathMeth.randVerteilung(rob, vert, this.rand);
            zustaende = aktRob.vAuts()[i].getKnList();
            fitness[i] = aktRob.getFitness()[i];

            kind[i] = new EndlicherAutomat();
            vorhandenAll = true;
           
            // Zust�nde einf�gen.
            it = zustaende.iterator();
            while (it.hasNext()) {
                aktName = it.next();
                for (int j = 0; j < rob.length; j++) {
                    zwischKnoten = rob[j].vAuts()[i].holeKnoten(aktName);
                    if (zwischKnoten != null) {
                        knotList[j] = zwischKnoten;
                    } else {
                        vorhandenAll = false;
                        break;
                    }
                }

                if (vorhandenAll) {
                    zwischKnoten = (Knoten) MathMeth.randVerteilung(knotList,
                                                                    vert,
                                                                    this.rand);
                } else {
                    zwischKnoten = aktRob.vAuts()[i].holeKnoten(aktName);
                }
               
                aktion = ((ZInfo) zwischKnoten.getInfo()).getAktion();
                param = ((ZInfo) zwischKnoten.getInfo()).getParam();
                alt = ((ZInfo) zwischKnoten.getInfo()).getAlter();

                kind[i].einfuegenKnoten(aktName, aktion, param, alt);
            }

            kind[i].setStartBeliebig(); // Setze auf ersten vorh. Knoten.
            if (aktRob.vAuts()[i].holeStartzustand() != null) {
                // Setze auf Startkn, falls vorhanden.
                kind[i].setStart(aktRob.vAuts()[i].holeStartzustand());
            }
           
            // Kanten einf�gen.
            it1 = zustaende.iterator();
            while (it1.hasNext()) {
                kn1 = (Integer) it1.next();
                it2 = zustaende.iterator();
                while (it2.hasNext()) {
                    kn2 = (Integer) it2.next();
                   
                    vorhandenAll = true;
                    if (aktRob.vAuts()[i].kanteExistiert(kn1, kn2)) {
                        for (int j = 0; j < rob.length; j++) {
                            if (rob[j].vAuts()[i].kanteExistiert(kn1, kn2)) {
                                condListe[j] = rob[j].vAuts()[i].getCondZuTrans(
                                                                        kn1,
                                                                        kn2);
                            } else {
                                vorhandenAll = false;
                                break;
                            }
                        }
                       
                        if (vorhandenAll) {
                            zCond = (Condition) MathMeth.randVerteilung(
                                                                    condListe,
                                                                    vert,
                                                                    this.rand);
                        } else {
                            zCond = aktRob.vAuts()[i].getCondZuTrans(kn1, kn2);
                        }
                       
                        kind[i].einfuegKante(kn1, kn2, zCond, 1);
                    }
                }
            }

        }

        String[] codes = new String[rob[0].vAuts().length];
       
        for (int i = 0; i < rob[0].vAuts().length; i++) {
            codes[i] = kind[i].erzeugeStringSeq();
        }
       
       
        // Erzeuge W'keits-Vert. fitprop. f�r Bedingungen.
        vert.clear();
        for (int j = 0; j < rob.length; j++) {
            if (rob[j].getFitSum() > 0) {
                vert.add(new Long(rob[j].getFitSum()));
            } else {
                vert.add(new Long(0));
            }
        }
       
        aktRob = (Roboter) MathMeth.randVerteilung(rob, vert, this.rand);
       
        robC[0] = new RobCode(
                id,
                fitness,
                codes,
                aktRob.getConds(),
                aktRob.getTransStdCodes(),
                SonstMeth.stringAusListSeqs(aktRob.getTransCodes()),
                SonstMeth.stringAusListSeqs(aktRob.getVerhCodes()));
       
        return robC;
    }
View Full Code Here

     */
    @Override
    public ArrayList<RobCode> rekombiniere(final ArrayList<Roboter> pop) {
        ArrayList<RobCode> kindPop = new ArrayList<RobCode>();
        Roboter[] eltern;
        Roboter aktRob;
        Iterator<Roboter> it = pop.iterator();

        while (it.hasNext()) {
            aktRob = it.next();
            eltern = aktRob.getEltern().holeNahe(aktRob.getPosition().x,
                                                 aktRob.getPosition().y,
                                                 this.pars.getRekAnzEltern());
           
            for (int i = 0; i < this.pars.getRekAnzKinder().intValue(); i++) {
                kindPop.add(this.rekombEinz(eltern)[0]);
            }
View Full Code Here

            final ArrayList<Roboter> elternPop) {
       
        final int kindAnz = 1;

        Iterator<Roboter> it;
        Roboter rob1;
        Roboter rob2;
        Roboter[] eltern = new Roboter[this.anzElt];
        RobCode[] kinder;
        ArrayList<RobCode> kindPop = new ArrayList<RobCode>();
        HashSet<Roboter> nicht = new HashSet<Roboter>(this.anzElt);
       
View Full Code Here

     * @return  Die rekombinierte Population als Tupel (ID, Code).
     */
    public ArrayList<RobCode> rekombiniere(
            final ArrayList<Roboter> elternPop) {
        Iterator<Roboter> it;
        Roboter rob1;
        Roboter rob2;
        Roboter[] eltern = new Roboter[this.anzElt];
        RobCode[] kinder;
        ArrayList<RobCode> kindPop = new ArrayList<RobCode>();
        HashSet<Roboter> nicht = new HashSet<Roboter>(this.anzElt);
       
View Full Code Here

        Iterator<Integer> it2;
        Iterator<Transition> it3;
        Knoten knot;
        Knoten knot1;
        Knoten knot2;
        Vektor2D koord1;
        Vektor2D koord2;

        if (!g.istLeer()) {
            final ArrayList<Knoten> knotenListe
                = new ArrayList<Knoten>(g.holAdj().values());
            int knAnzahl = knotenListe.size();
           
            if (knAnzahl < 2) {
                knAnzahl = 2;
            }
           
            int gitterX = Math.abs(this.rechts - this.links)
                          / (int) ((Math.ceil(Math.sqrt(knAnzahl))) - 1);
            int gitterY = Math.abs(this.unten - this.oben)
                          / (int) ((Math.ceil(Math.sqrt(knAnzahl))) - 1);

            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,
View Full Code Here

TOP

Related Classes of fmg.fmg8.umgebung2D.Roboter

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.