Если я правильно понял, в чем ваша проблема, вы можете легко вручную вручную установить одноточечный кроссовер. Поэтому вы хотите создать n
возможных родителей, случайно выбрать два из них, а затем выполнить кроссовер между их строками, чтобы создать нового человека (ребенка).
Вместо того чтобы создавать разные переменные для каждого (кандидата) родителя (это сделает невероятно трудным выборку таких двух родителей), я предлагаю вам создать массив ячеек с ячейками n
, где i-я ячейка будет содержать i -я матрица (родитель-кандидат).
n=input('no.of ROWS AND COLUMNS');
sm_mat = eye(n);
for i=1:n
temp = randperm(n);
% fprintf('Initial Population %d\n',i)
% eval(['sm_mat_', num2str(i) '=sm_mat(:,temp)']);
InitialPopCell{i}=sm_mat(:,temp);
end
InitialPopCell
будет наш массив ячеек.
Теперь вам нужно случайным образом выбрать двух родителей: для этого вы можете просто выбрать две разные ячейки случайным образом.
i=0; j=0;
while i==j
i=randi(n);
j=randi(n);
end
Таким образом, мы выбираем два индекса (i
и j
), принимая во внимание, что они должны быть в диапазоне [1: п], и они должны отличаться друг от друга.
Теперь мы можем выбрать два родителей:
ParentA=InitialPopCell{i};
ParentB=InitialPopCell{j};
Child=[];
и мы также инициализируемся как опорожнить (новые индивидуальную т.е.) матрицы Child
.
Теперь, наконец, давайте выполним кроссовер:
for i=1:size(ParentA,1)
% select random integer between 1 and the number of chromosomes
% this will be the crossover point
XOverPoint=randi(size(ParentA,2));
% create new individual by concatenating Parent A and B taking into
% account the crossover point
Child(i,:)=[ParentA(i,1:XOverPoint) ParentB(i,XOverPoint+1:end)];
end
мне нужно принимать какие-либо две матрицы и хотят переправиться .. выше создает 1-х в другом месте, в каждой строке один 1-х. –
Любая дополнительная информация по вопросу, например, код, который вы опубликовали, следует добавить к самому вопросу. Вы можете использовать ссылку [edit] прямо под вкладкой вашего вопроса (или двумя [править] ссылки в моем комментарии). – BSMP
Пожалуйста, отредактируйте свой вопрос, используя правильное форматирование кода (то есть фигурные скобки). Кроме того, уточните (с примером будет прекрасным), по какой размерности должен быть выполнен кроссовер. – Alessiox