在matlab中重组两条染色体

时间:2012-11-06 16:17:56

标签: matlab matrix genetic-algorithm

我想重组(交叉)两条染色体(遗传算法)。 这是我的伪代码,我的问题在哪里?

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个色谱组的正确方法:(

1 个答案:

答案 0 :(得分:0)

您的问题的简短答案是:代码(几乎)正确,它执行单点交叉。

代码几乎是正确的,因为每个人的第一个元素永远不会被交换:因为rc在[1,10]中而且交换是在j严格大于rc时,这意味着{ {1}}始终分配给pop(i, 1)(而不是popu(selected(i), 1))。

这可能是一个理想的功能,但看起来像一个不受欢迎的边框效果。可以通过使用此行来阻止它:popu(selected(i + 25), j)

考虑到Bill的评论,代码看起来像这样:

rc = randi([0,10]);