I have a chromosome where each gene contain s set of values. Like the following:

chromosome = [[A,B,C],[C,B,A],[C,D,],[],[E,F]]

  • The order in each gene values matters. (A,B,C is different to A,C,B)
  • Each value should not appear more than once in a gene. ([A,B,B] is not desirable, B is repeated.)

In my current two-point crossover method. The genes values that are crossover is the whole set of values. (E.g the whole of [A,B,C] is crossed to another chromosome)

Soon, I realize my population lacks variations very quickly because the values within a gene always remain the same. Hence, my algorithm is evolving very slowly, and limited by the variation of gene values at initialization stage.

What crossover can I implement to cross values within the set as well?

I am pretty new to genetic algorithm. Any help will be much appreciated. Thank you.

  • $\begingroup$ Why do you cross-over the whole gene? Actually, this is typically the case, but, in your case, that may not be a good idea. Anyway, maybe to solve your problem you can increase the mutation rate (and I assume that during the mutation you mutate individual genes too). Have you already tried something like that? $\endgroup$
    – nbro
    Jun 15, 2020 at 10:18
  • $\begingroup$ You probably want to tailor your operators for your problem. Given that each "gene" is a sequence where you don't want repetition, I'd look at operators designed for permutation encodings as a starting place. Something like, "for each gene, apply a separate run of Order Crossover or Cycle Crossover to populate the child's gene" might be a reasonable starting point. $\endgroup$
    – deong
    Jun 15, 2020 at 14:09


You must log in to answer this question.