⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 liucrossover.m

📁 一个利用遗传算法解决TSP问题的程序,有利于对遗传算法进一步的理解.
💻 M
字号:
function [chromc,chromd]=liucrossover(chroma,chromb,tspdist)
%%%染色体交叉,利用刘海的方法。
nn=length(chroma);
chroma=circshift(chroma',ceil(rand(1)*4))';
chromc=zeros(1,nn);
chromc(1)=chroma(1);
for i=2:nn,
    k=1;
    while k>0,
        am=(find(chroma==chromc(i-1))+k);
        bm=(find(chromb==chromc(i-1))+k);
        if am>nn,
            if mod(am,nn)~=0,
                am=mod(am,nn);
            else ,
                am=nn;
            end
        end
        if bm>nn,
            if mod(bm,nn)~=0,
                bm=mod(bm,nn);
            else ,
                bm=nn;
            end
        end
        if tspdist(chromc(i-1),chroma(am))<=tspdist(chromc(i-1),chromb(bm)),
            if isempty(find(chromc([1:i-1])==chroma(am))),
                chromc(i)=chroma(am); k=0;
            elseif isempty(find(chromc([1:i-1])==chromb(bm))),
                chromc(i)=chromb(bm); k=0;
            else ,
                k=k+1;
            end
        else ,
            if isempty(find(chromc([1:i-1])==chromb(bm))),
                chromc(i)=chromb(bm); k=0;
            elseif isempty(find(chromc([1:i-1])==chroma(am))),
                chromc(i)=chroma(am); k=0;
            else ,
                k=k+1;
            end
        end
    end
end
chromd=chroma;
chroma=chromb;
chromb=chromd;
chromd(1)=chroma(1);
for i=2:nn,
    k=1;
    while k>0,
        am=(find(chroma==chromd(i-1))+k);
        bm=(find(chromb==chromd(i-1))+k);
        if am>nn,
            if mod(am,nn)~=0,
                am=mod(am,nn);
            else ,
                am=nn;
            end
        end
        if bm>nn,
            if mod(bm,nn)~=0,
                bm=mod(bm,nn);
            else ,
                bm=nn;
            end
        end
        if tspdist(chromd(i-1),chroma(am))<=tspdist(chromd(i-1),chromb(bm)),
            if isempty(find(chromd([1:i-1])==chroma(am))),
                chromd(i)=chroma(am); k=0;
            elseif isempty(find(chromd([1:i-1])==chromb(bm))),
                chromd(i)=chromb(bm); k=0;
            else ,
                k=k+1;
            end
        else ,
            if isempty(find(chromd([1:i-1])==chromb(bm))),
                chromd(i)=chromb(bm); k=0;
            elseif isempty(find(chromd([1:i-1])==chroma(am))),
                chromd(i)=chroma(am); k=0;
            else ,
                k=k+1;
            end
        end
    end
end

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -