Meine Aufgabe:Genetische/evolutionäre Algorithmus - Maler
Erstellen Sie ein Programm nur ein Bild (angegeben als Eingang) mit Primitiven kopieren (wie Dreieck oder etwas). Das Programm sollte einen evolutionären Algorithmus verwenden, um ein Ausgabebild zu erzeugen.
Meine Frage:
Ich brauche einen Algorithmus zu erfinden Populationen zu erstellen und überprüfen Sie sie (wie viel - in% - sie das Eingangsbild entsprechen). Ich habe eine Idee; Sie können es unten finden.
Also, was will ich von Ihnen: Beratung (wenn Sie meine Idee finden nicht so schlecht) oder Inspiration (vielleicht haben Sie eine bessere Idee?)
Meine Idee:
Nehmen wir an, ich verwende nur Dreiecke, um das Ausgabebild zu erstellen.
Meine erste Population ist P Bilder (erzeugt durch die Verwendung T zufällig generierten Dreiecke - genannt Elements).
prüfe ich durch meine Fitness-Funktion alle Bilder in der Bevölkerung und wählen E von ihnen als Elite und der Rest der Bevölkerung entfernen Sie einfach:
To compare 2 pictures we check every pixel in picture A and compare his R,G,B with
the same pixel (the same coordinates) in picture B.
I use this:
SingleDif = sqrt[ (Ar - Br)^2 + (Ag - Bg)^2 + (Ab - Bb)^2]
then i sum all differences (from all pixels) - lets call it SumDif
and use:
PictureDif = (DifMax - SumDif)/DifMax
where
DifMax = pictureHeight * pictureWidth * 255*3
Die besten werden verwendet, um die nächste Bevölkerung auf diese Weise zu erstellen:
picture MakeChild(picture Mother, picture Father)
{
picture child;
for(int i = 0; i < T; ++i)
{
j //this is a random number from 0 to 1 - created now
if(j < 0.5) child.element(i) = Mother.element(i);
else child.element(i) = Father.element(i)
if(j < some small %) mutate(child.element(i));
}
return child;
}
So ist es ziemlich einfach. Nur die Mutation benötigt einen Kommentar: Es gibt also immer eine kleine Wahrscheinlichkeit, dass Element X in Kind anders ist als X in seinem Elternteil. Um dies zu tun, machen wir zufällige Änderungen im Element in Kind (ändern Sie seine Farbe durch Zufallszahl oder fügen Sie Zufallszahl zu seiner (x, y) Koordinate - oder seinem Knoten) hinzu.
Also das ist meine Idee ... Ich habe es nicht getestet, habe es nicht programmiert. Bitte überprüfen Sie meine Idee - was denken Sie darüber?
Sie könnten vielleicht versuchen, die Zielfunktion so zu variieren, dass Sie am Anfang größere Patches als einzelne Pixel abgleichen möchten. Vielleicht sollte man einen Filter anwenden, um das Bild und die Kandidaten zu vergröbern, und man kann die Paarung und Mutation so durchführen, dass alle Elemente in einem solchen Patch verschoben werden. Sie reduzieren die Größe der Patches progressiv, bis Sie Pixel erhalten. (Jetzt, wo ich darüber nachdenke, ist es wie simuliertes Glühen in einem genetischen Algorithmus.) – Fortunato
[Dieser Blogbeitrag] (http://rogeralsing.com/2008/12/07/genetic-programming-evolution-of-mona- lisa /) scheint genau zu beschreiben, was Sie erreichen möchten, obwohl er bei jedem Schritt nicht aus einer Population auswählt, sondern diese einfach mit der vorherigen Iteration vergleicht. Das fühlt sich eher wie simuliertes Glühen an, als irgendetwas genetisches für mich, aber trotzdem denke ich, dass es für Sie wertvoll wäre, darüber zu schauen. –