Witajcie,
muszę ogarnąć algorytm genetyczny, a konkretnie znajdowanie ekstremów przy pomocy tego algorytmu i fajnie by było jakbyscie mnie poprawili i rozwiali moje wątpliwości ;)
otóż mam znaleźć minimum funkcji f(x)=x^2 +x-2 w przedziale <-1,0>
Obliczam rozdzielczość ze wzoru: (max_x - min_x)/(2^l - 1) gdzie l to liczba bitów.
Zakładam że koduję na 4 bitach więc rozdzielczość=0,067
Więc moja populacja wygląda tak:
-1 -> 0000
-0,933 -> 0001
-0,866 -> 0010
-0,799 -> 0011
-0,732 -> 0100
-0,665 -> 0101
-0,598 -> 0110
-0,531 -> 0111
-0,464 -> 1000
-0,397 -> 1001
-0,33 -> 1010
-0,263 -> 1011
-0,196 -> 1100
-0,129 -> 1101
-0,62 -> 1110
nastepnie losuje każdego osobnika(rodzica) u krzyżuje ze soba rodziców - otrzymuje nową popujację
rodzic1 rodzic2 dziecko
-1 -> 0000 -> 0100 -> 0000
-0,933 -> 0001 -> 1010 -> 0010
-0,866 -> 0010 -> 1101 -> 0001
-0,799 -> 0011 -> 0111 -> 0011
-0,732 -> 0100 -> 0010 -> 0110
-0,665 -> 0101 -> 1001 -> 0101
-0,598 -> 0110 -> 1100 -> 0100
-0,531 -> 0111 -> 1000 -> 0100
-0,464 -> 1000 -> 1011 -> 1011
-0,397 -> 1001 -> 0000 -> 1000
-0,33 -> 1010 -> 0011 -> 1011
-0,263 -> 1011 -> 0001 -> 1001
-0,196 -> 1100 -> 0101 -> 1101
-0,129 -> 1101 -> 1110 -> 1110
-0,62 -> 1110 -> 0110 -> 1110
następnie robię mutację negując ostatni bit
-1 -> 0000 -> 0100 -> 0000 -> 0001
-0,933 -> 0001 -> 1010 -> 0010 -> 0011
-0,866 -> 0010 -> 1101 -> 0001 -> 0000
-0,799 -> 0011 -> 0111 -> 0011 -> 0010
-0,732 -> 0100 -> 0010 -> 0110 -> 0111
-0,665 -> 0101 -> 1001 -> 0101 -> 0100
-0,598 -> 0110 -> 1100 -> 0100 -> 0101
-0,531 -> 0111 -> 1000 -> 0100 -> 0101
-0,464 -> 1000 -> 1011 -> 1011 -> 1010
-0,397 -> 1001 -> 0000 -> 1000 -> 1001
-0,33 -> 1010 -> 0011 -> 1011 -> 1010
-0,263 -> 1011 -> 0001 -> 1001 -> 1000
-0,196 -> 1100 -> 0101 -> 1101 -> 1100
-0,129 -> 1101 -> 1110 -> 1110 -> 1111
-0,62 -> 1110 -> 0110 -> 1110 -> 1111
i teraz z tego co się dowiedziałem powinienem znowu krzyżować i mutować i tak w kółko....
ale jak mam znaleźć to minimum? mógłby mi ktoś wyjaśnić co jest źle?
z góry dzięki