if i have two vector how to perform single crossover?

7 views (last 30 days)
if i have
p1 = [ 1 0 1 1 1 0 1 0 1 0 1 0 1 0 1 0 0 0 0 0 1 0 1 1]
p2 = [ 0 0 0 0 1 1 1 1 0 0 1 1 0 1 0 1 1 1 0 0 0 1 0 0]
how to perform single crossover
c1 = [ 1 0 1 1 1 0 1 0 1 0 1 0 0 1 0 1 1 1 0 0 0 1 0 0]
c2 = [ 0 0 0 0 1 1 1 1 0 0 1 1 1 0 1 0 0 0 0 0 1 0 1 1]

Accepted Answer

Star Strider
Star Strider on 9 May 2016
This is how I do it in genetic algorithm programming:
p1 = [ 1 0 1 1 1 0 1 0 1 0 1 0 1 0 1 0 0 0 0 0 1 0 1 1];
p2 = [ 0 0 0 0 1 1 1 1 0 0 1 1 0 1 0 1 1 1 0 0 0 1 0 0];
CrossoverIndex = 12; % This Would Usually Be Random
c1 = [p1(1:CrossoverIndex) p2(CrossoverIndex+1:end)];
c2 = [p2(1:CrossoverIndex) p1(CrossoverIndex+1:end)];
Producing:
c1 = 1 0 1 1 1 0 1 0 1 0 1 0 0 1 0 1 1 1 0 0 0 1 0 0
c2 = 0 0 0 0 1 1 1 1 0 0 1 1 1 0 1 0 0 0 0 0 1 0 1 1
  4 Comments
Md. Kawsar Ahmed Asif
Md. Kawsar Ahmed Asif on 26 May 2018
Thanks a lot once again Star Strider. Now i've got it... But what about for 2-point crossover like Partially Mapped or Matched Crossover (PMX). Suppose i have two parents as following, (here i'm taking two crossover point at 3rd and 4th position)
P1 = [3 1 2 5 4]
P2 = [2 1 5 4 3] , will produce the 1st Offspring as
C1 = [4 1 2 5 3]
Again,
P2 = [2 1 5 4 3]
P1 = [3 1 2 5 4] , wili produce the remaining 2nd Offspring as
C2 = [3 1 5 4 2]
Now how can i get these Two Offspring proceeding by 'Position Wise Exchanging'? (Where two parents are mapped to each other).
Thank You
ALA SHARAF
ALA SHARAF on 9 May 2019
Is this two point crossover. Here actually no crossover between parents. only swapping first and last element of a parent and producing a new child.

Sign in to comment.

More Answers (1)

Hassan Sarfraz
Hassan Sarfraz on 6 Sep 2018
Thanks... but how to get these parents from these childs again?

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!