2016-05-15 2 views
0

Предположим, у меня есть две строки Parents.Код для генетического алгоритма Cross-Over в Matlab

родитель 1: 3-1-2-5-4
Родитель 2: 1-4-5-2-3

Теперь после того, как Cross-Over, я хочу иметь следующие дочерние строки:

Ребенок 1: 1-4- | 2-5 | -3
Ребенок 2: 3-1- | 5-2 | -4

одной позиции перекрестный обозначается символом "|". Пожалуйста, если есть код, который дает мне вышеуказанные дочерние последовательности.

ответ

0

Использование:

%initilizes parents 
parent1 = [3 1 2 5 4]; 
parent2 = [1 4 5 2 3]; 

%determines which rows should be swapped 
rowsToSwap = [3 4]; 

%generates child1 and child2 
child1 = parent2; 
child1(rowsToSwap) = parent1(rowsToSwap); 
child2 = parent1; 
child2(rowsToSwap) = parent2(rowsToSwap); 

Результаты:

child1 = 

3  1  5  2  4 

child2 = 

1  4  2  5  3 

В этом фрагменте кода rowsToSwap определяются жестко codded. , если вы хотите, вы можете выбрать их в случайном порядке с помощью функции randsample:

rowsToSwap = randsample(1:length(parent1),2) 
+0

благодаря drorco, да он работает отлично. – Jelly

Смежные вопросы