Python | Single Point Crossover in Genetic Algorithm

Single Point Crossover in Genetic Algorithm is a form of crossover in which two-parent chromosome are selected and a random/given point is selected and the genes/data are interchanged between them after the given/selected point for example

Examples:

P1: 000011110011 
P2: 101010101010

Point: 4
After Crossover:
C1: 000010101010
C2: 101011110011

The problem is to select a random point for the crossover of two given parents and generate at least five generations of children from the given pair of a chromosome.



Code : Python program for single-point crossover in Genetic Algorithm

filter_none

edit
close

play_arrow

link
brightness_4
code

# library to generate a random number
import random
  
# function for implementing the single-point crossover
def crossover(l, q):
  
# converting the string to list for performing the crossover
    l = list(l)
    q = list(q)
  
# generating the random number to perform crossover
    k = random.randint(0, 15)
    print("Crossover point :", k)
  
# interchanging the genes
    for i in range(k, len(s)):
        l[i], q[i] = q[i], l[i]
    l = ''.join(l)
    q = ''.join(q)
    print(l)
    print(q, "\n\n")
    return l, q
  
  
# patent chromosomes:
  
s = '1100110110110011'
p = '1000110011011111'
print("Parents")
print("P1 :", s)
print("P2 :", p, "\n")
  
# function calling and storing the off springs for 
# next generation crossover
for i in range(5):
    print("Generation ", i+1, "Childrens :")
    s, p = crossover(s, p)

chevron_right


Output:

Parents
P1 : 1100110110110011
P2 : 1000110011011111 

Generation  1 Childrens :
Crossover point : 2
1100110011011111
1000110110110011 


Generation  2 Childrens :
Crossover point : 7
1100110110110011
1000110011011111 


Generation  3 Childrens :
Crossover point : 0
1000110011011111
1100110110110011 


Generation  4 Childrens :
Crossover point : 7
1000110110110011
1100110011011111 


Generation  5 Childrens :
Crossover point : 2
1000110011011111
1100110110110011


My Personal Notes arrow_drop_up

Check out this Author's contributed articles.

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.