Il mio compito:genetica/Evolutionary algoritmo - Pittore
creare un programma per copiare una foto (dato come input) utilizzando primitive solo (come triangolo o qualcosa del genere). Il programma dovrebbe utilizzare l'algoritmo evolutivo per creare un'immagine di output.
La mia domanda:
ho bisogno di inventare un algoritmo per creare popolazioni e controllare (quanto - in% - corrispondono le immagini in ingresso). Ho un'idea; lo puoi trovare qui sotto.
Quindi quello che voglio da te: consiglio (se trovate la mia idea non è così male) o l'ispirazione (forse hai un'idea migliore?)
mia idea:
Diciamo che userò solo triangoli per costruire l'immagine di output.
Il mio primo popolazione è P immagini (generati utilizzando T triangoli generati casualmente - chiamato Elementi).
ho controllare dalla mia funzione di fitness ogni foto in popolazione e selezionare E di loro come élite e resto della popolazione è sufficiente rimuovere:
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
Il meglio sono utilizzati per creare la popolazione prossimo in questo modo:
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;
}
Quindi è abbastanza semplice. Solo la mutazione ha bisogno di un commento: quindi c'è sempre una piccola probabilità che l'elemento X in child sia diverso da X nel suo genitore. Per fare ciò apportiamo modifiche casuali all'elemento in child (cambia il suo colore in base a un numero casuale, o aggiungi un numero casuale alla sua (x, y) coordinata - o al suo nodo).
Quindi questa è la mia idea ... Non l'ho testata, non l'ho codificata. Per favore controlla la mia idea - cosa ne pensi?
Si potrebbe forse provare a variare la funzione obiettivo in modo che all'inizio si stia cercando di far corrispondere patch più grandi dei singoli pixel. Forse applichi un filtro in modo da rendere l'immagine e i candidati più grossolani, e puoi fare l'accoppiamento e la mutazione in modo tale da spostare tutti gli elementi all'interno di una di queste patch. Riduci progressivamente la dimensione delle patch fino a raggiungere i pixel. (Ora che ci penso, è come usare la ricottura simulata all'interno di un algoritmo genetico.) – Fortunato
[Questo post del blog] (http://rogeralsing.com/2008/12/07/genetic-programming-evolution-of-mona- lisa /) appare per descrivere in dettaglio ciò che stai cercando di ottenere, anche se non seleziona da una popolazione ad ogni passaggio, lo confronta semplicemente con l'iterazione precedente. Mi sembra più simile alla ricottura simulata di qualsiasi cosa genetica per me, ma comunque penso che esaminarla potrebbe avere un valore per te. –