2016-10-12 4 views
0

Я был в состоянии кодировать 1-point crossover следующим образом:Uniform кроссовер в MATLAB

n_parents = length(parents); 
randparents = randperm(n_parents); 

parent1 = population.ind{parents(randparents(1))}; 
parent2 = population.ind{parents(randparents(2))}; 

cross_point = ceil(rand()*(size(parent1,2)-1)); 
child = [parent1(1:cross_point),parent2(cross_point+1:size(parent2,2))]; 

кто может помочь в преобразовании этого к uniform crossover пожалуйста?

+0

Что такое «однородный кроссовер»? – rayryeng

+0

@raryeng проверить это: https: //en.wikipedia.org/wiki/Crossover_ (gene_algorithm) #Uniform_crossover_and_half_uniform_crossover – Uttara

+0

Простите, но не благодарите. Я не буду отвечать на вопрос, если он требует от меня выйти на сайт и что-то прочитать. Пожалуйста, не обижайтесь. Это не имеет никакого отношения к вам лично, и я так всегда работал. Удачи. – rayryeng

ответ

0

У меня нет Matlab, чтобы проверить код, но это должно быть что-то вроде этого:

parent1 = population.ind{parents(randparents(1))}; 
parent2 = population.ind{parents(randparents(2))}; 

rand_vec = rand(size(parent1)); 
child1 = parent1; 
child1(rand_vec>=0.5) = parent2(rand_vec>=0.5); 
child2 = parent2; 
child2(rand_vec>=0.5) = parent1(rand_vec>=0.5);