Genetic Algorithms, Why does random crossover work?

AI Thread Summary
The discussion centers on the challenges of using genetic algorithms (GAs) for calculating square roots, particularly the limitations of crossover operations in preserving beneficial traits from parent chromosomes. The original poster describes a scenario where their GA is producing circular results and infinite loops, questioning the effectiveness of random crossover in achieving convergence towards optimal solutions. Participants highlight that GAs do not guarantee convergence and emphasize the importance of genetic variation and the methods used to translate genetic information into functional behavior. They suggest that without effective genetic representation and variation, the algorithm may fail to improve over generations. The conversation underscores the trial-and-error nature of genetic programming, noting that repeated populations can hinder progress, and encourages exploring alternative genetic representations or crossover strategies to enhance the algorithm's performance.
NotASmurf
Messages
150
Reaction score
2
Hi all, I understand Genetic algorithms aside form why crossover helps things, it has no guarantee of getting the best characteristics of each chromosome.
Ie say you had a genetic algorithm to calculate square roots, fitness = 1(Abs(NumToFindRoot of-(Guess*Guess))
and your guess was a binary string 00100111001 where the bottom half represents the decimals and the top half the integer part. say our initial population was

110011= 51
001010= 20
111000 =7
001011= 52

now select using tournament or roulette method:

111000 =7
001010 =20
and cross them:
111010= 23
then mutate
110010 =19

Now say we keep repeating this:

111000=7
cross->
110011=51
equals->
111111=63
mutate->
111110 31
---------
001010 20
cross
110011 51
equals
001011 52
mutate
000011 = 48

Continue repeating with population of 3, assuming we trying to find square root of 16

000011 = 48
111110 = 31
110010 = 19
----------
010010 = 18
111000 = 7
001010 = 20
---------
010000 = 2
101010 = 21
110010 =19
-------
010110 = 26
100010 = 17
010000 =2
Seems to be getting circular. Am I going about this wrong? can someone explain why random crossover can actually work?
My code just infinite loops, so i found a GA online and modified it to do this job and it still infinite loops, unless the fitness function needs to be a lot more in depth perhaps? I'm thinking my issue is that there isn't a "close to square root" because of the way I am representing my number?
Code:
for (int i = 0; i <30; i++)
            {
                Individual indiv1 = tournamentSelection(pop);
                Individual indiv2 = tournamentSelection(pop);
                Individual newIndiv = crossover(indiv1, indiv2);
                newPopulation.saveIndividual(i, newIndiv);
            }

            for (int i = elitismOffset; i < newPopulation.size(); i++)
            {
                mutate(newPopulation.getIndividual(i));
            }
 
Last edited:
Technology news on Phys.org
I don't understand your example, but in general most crossovers won't give good results - but there is a small chance to get an interesting result that would be hard to reach with smaller mutations.
 
but even with those, the premise seems flawed. It seems to just randomly reach instead of converge since the best traits arnt carried over, how does it converge? Can someone explain?
 
NotASmurf said:
but even with those, the premise seems flawed. It seems to just randomly reach instead of converge since the best traits arnt carried over, how does it converge? Can someone explain?

There isn't any guarantee of convergence.

In nature, it is not only specific genetic make-up that evolves; the method of translating genetic make-up into behavior and the method of creating genetic variation evolves. For example, if your system represented "animals" that needed to adapt to producing the square root of a number that slowly varied (e.g. 16, 25, 19, 22...) then your species of animals might go extinct if there were competing species that used different methods of creating genetic variation or translated the bits in the genetic representation into an algorithm differently.

Intuitively, if the parent animals did a fairly good job of estimate sqr(k) then a good system of reproduction would assure that many of their descendants also did a fairly good job - or at least had a better than completely random chance of doing as well or better than their parents. You could try introducing some genes that affect how two individuals are crossed.

Genetic programming is trial-and-error with some heuristics thrown-in that hope to make it better than completely random trial-and-error. If your program is repeating the same populations over and over again, you have lost the trial-and-error aspect.
 
Dear Peeps I have posted a few questions about programing on this sectio of the PF forum. I want to ask you veterans how you folks learn program in assembly and about computer architecture for the x86 family. In addition to finish learning C, I am also reading the book From bits to Gates to C and Beyond. In the book, it uses the mini LC3 assembly language. I also have books on assembly programming and computer architecture. The few famous ones i have are Computer Organization and...
I have a quick questions. I am going through a book on C programming on my own. Afterwards, I plan to go through something call data structures and algorithms on my own also in C. I also need to learn C++, Matlab and for personal interest Haskell. For the two topic of data structures and algorithms, I understand there are standard ones across all programming languages. After learning it through C, what would be the biggest issue when trying to implement the same data...
Back
Top