suche Algorithmus, um Inzucht zu vermeiden



  • devil81 schrieb:

    Wie wärs wenn du einen gencode einbaust, der sich dann jeweils
    zur hälfte von der mutter und dem vater erbt.
    Wenn 2 es dann treiben wollen, wird vorher dieser Code
    verglichen, bei zu starker Änlichkeit, gehts halt net...

    Genau darum gehts ja schon 😉
    Es gibt allerdings diverse Crossover und Selektionsvarianten...



  • volkard schrieb:

    Allerdings finde ich dieses Verhindern der INzucht gar nciht mal so toll,
    weil dadurch die Konvergenz der Population kaputt gemacht wird.

    jo, schon richtig. aber meine früheren versuche mit nem 4-gewinnt-spiel sind
    immer kläglich daran gescheitert, daß ein einigermaßen guter bot sein erbgut
    ruck zuck über alle individuen verteilt hatte. alle saßen auf dem selben lokalen
    gipfel und waren scheiße und alle waren gleich. bis auf die mutierten, die waren
    alle schlechter. das inzucht-verhindern würde zwar nicht verhindern, daß die
    bots alle auf einen loalen gipfel stürmen, aber wenigstens vstark verzögern,
    daß der starke bot sein erbgut so massiv verstreut, daß ar kein anderes mehr existiert.
    und so schlimm stört es die konvergenz wohl auch nicht, immerhin heiratet er ja nur
    solche bots nicht, die ihm eh schon recht ähnlich sind.

    Also basierend von einen reinen GA Ansatz (den ich nie favorisiere) fallen mir folgende Verbesserungsvorschläge ein:
    - frühzeitige Konvergenz verhindern, d.h eine andere Initialisierung fahren
    z.B. n beste einer zufälligen Menge, heuristische Bereichsregel etc.
    - dein restricted mating (Insest) führt zu früh zu einen lokalen Maximum und Du versuchst es mit "artfremden" Einfluss zu brechen.
    Wie wäre es mit einer Aufteilung des Fitnesswerts auf einer Gruppe von Bots?! So verhindest Du auch dass der pareto optimale Bot sich "Agent Smith"-mässig vermehrt. Weiterhin wählst Du nur den Baldwin Effekt für die Selektion. Innerhalb der Gruppe nimmst Du eine Tranction Selection Komponente für die Selektion - d.h. n Bots in der lokalen Maximum Gruppe haben gleiche Reproduktionschancen.
    - ein Hybridisierungsansatz nach Lamarck bei genetische Operatoren mit einen heuristischen Crossover. Nach der Selektion Spleisen - d.h. Kürzen oder Spalten der Gene - in Erwägung ziehen.
    - temporäre Abhängigkeit der Mutationsrate, Cross-Over und Reproduktionrate

    volkard schrieb:

    was mir zur zeit am meisten sorgen macht, ist die selektion.

    Also ich würde eine Mischung aus der Konvergenzmessung und der relativen Fitness zu n Bots für m Bots die Reproduktionswahrscheinlichkeit festlegen.
    Und für den Rest "Sozialhilfe 🕶 " Tranction Selection festlegen. - In der KI ist der Zauberstab immer eine würzige Mischung ... 😋



  • Hallo Volkard,

    bei "nur" 24 bots könnte man die Inzucht über einen Bitschlüssel verhindern.
    Jeder Bot bekommt ein bit im 32bit Integer und einen Vorfahrspeicher, in dem alle bits der Eltern drinstehen.
    Wenn dann bei einer und Verknüpfung zwischen zwei bots noch bits dastehen haben sie gemeinsame vorfahren...
    Um die Generationstiefe zu begrenzen müsste man dann am besten noch einen vektor oder eine queue hernehmen, in die werden dann immer die bits eingetragen und wenn der vektor/queue eine bestimmte länge erreicht hat, wird der älteste eintrag gelesen und das entsprechende bit im Vorfahrspeicher gelöscht.

    Hoffe das war verständlich.
    Das ist bestimmt ziemlich schnell und ließe sich auch auf mehr bots ausweiten nur bei zu vielen ist natürlich doof.

    k.



  • Habe gerade als Nebenprodukt noch ein bisschen Stoff gefunden ...
    http://www.informatik.oelinger.de/data/datafiles_datafile_1045559964.pdf
    http://www.informatik.oelinger.de/data/datafiles_datafile_1045560046.pdf

    @volkard:
    Gib mal laut über Deine "Fitnesswerte" ... persönlich noch ohne Konvergenz im lokalen Maximum gefangen?! 🤡



  • Prof84 schrieb:

    @volkard:
    Gib mal laut über Deine "Fitnesswerte" ... persönlich noch ohne Konvergenz im lokalen Maximum gefangen?! 🤡

    projekt liegt erstmal auf eis.
    muss vorher alle tollen features der gcc ausprobieren.


Anmelden zum Antworten