두 개의 염색체 (유전자 알고리즘)를 재결합 (교차)하고 싶습니다. 이것은 내 의사 코드입니다. 내 문제는 어디에 있습니까?matlab에 두 염색체를 재결합
popu 50 * 10 행렬이다. 선택 (내 인구)
popsize = 50
1 * 50 매트릭스 (체력 평가와 선택 최고의 개인)
function pop = recombin(popu,selected)
global popsize;
pop=zeros(50,10);
for i=1:popsize/2
rc=randi([1,10]);
for j=1:10
if(j<=rc)
pop(i,j)=popu(selected(i),j);
pop(i+25,j)=popu(selected(i+25),j);
else
pop(i,j)=popu(selected(i+25),j);
pop(i+25,j)=popu(selected(i),j);
end
%keyboard
end
end
end
내 코드가 올바르게 작동합니다 (구문 적으로). 하지만 이것은 일반적인 알고리즘 :(2 chromesomes을 결합하는 올바른 방법입니다 확실하지 않다
발생한 것입니다. 코드가 실행되지만 예기치 않은 결과가 발생합니까? 아니면 오류없이 코드를 실행하는 데 문제가 있습니까? 질문을 편집하고 그것을 설명하기 위해 세부 사항을 추가 할 수 있습니까? –
@EitanT txx for your attention – zhilevan
for 루프를 제거하고 pop (i, 1 : rc-1) = popu (i + 25를 선택한 경우, 1 : rc-1)와 같은 말을하면 성능이 향상 될 수 있습니다. ; pop (i, rc : end) = popu (selected (i), rc : end); – Bill