免疫算法求解TSP问题

%%%%%免疫算法TSP问题%%%%
%%%%%初始化参数%%%%%
clear all;      %清除所有变量
close all;      %清图
clc;            %清屏
C=[1304 2312;3639 1315;4177 2244;3712 1399;3488 1535;3326 1556;...
    3238 1229;4196 1044;4312 790;4386 570;3007 1970;2562 1756;...
    2788 1491;2381 1676;1332 695;3715 1678;3918 2179;4061 2370;...
    3780 2212;3676 2578;4029 2838;4263 2931;3429 1908;3507 2376;...
    3394 2643;3439 3201;2935 3240;3140 3550;2545 2357;2778 2826;...
    2370 2975];
N=size(C,1);    %城市数目,基因数目
D=zeros(N);     %任意两个城市距离矩阵
NP=100;         %免疫个体数目
G=1000;         %最大免疫代数
Pc=0.1;         %交叉率
f=zeros(N,NP);  %中间变量
len=zeros(NP,1);
%%%%%求间距%%%%%
for i=1:N
    for j=1:N
        D(i,j)=((C(i,1)-C(j,1))^2+(C(i,2)-C(j,2))^2)^0.5;
    end
end
%%%%%随机生成第一代%%%%%
for i=1:NP
    f(:,i)=randperm(N);
end
%%%%%计算路径长度%%%%%
 for i=1:NP
     len(i)=func3(D,f(:,i),N);
 end
[Sortlen,Index]=sort(len);
Sortf=f(:,Index);
Ncl=10;             %克隆个数
%%%%%遗传算法循环%%%%%
for gen=1:G
   for i=1:NP/2
    %%%%%选择操作%%%%%
    a=Sortf(:,i);
    Ca=repmat(a,1,Ncl);
    for j=1:Ncl
        p1=floor(1+N*rand());
        p2=floor(1+N*rand());
        while p1==p2
            p1=floor(1+N*rand());
            p2=floor(1+N*rand());
        end
        tmp=Ca(p1,j);
        Ca(p1,j)=Ca(p2,j);
        Ca(p2,j)=tmp;
    end
    Ca(:,1)=Sortf(:,i);
    %%%%%克隆抑制%%%%%
    for j=1:Ncl
        Calen(j)=func3(D,Ca(:,j),N);
    end
    [SortCalen,Index]=sort(Calen);
    SortCa=Ca(:,Index);
    af(:,i)=SortCa(:,1);
    alen(i)=SortCalen(1);
   end
   %%%%%种群刷新%%%%%
   for i=1:NP/2
       bf(:,i)=randperm(N);
       blen(i)=func3(D,bf(:,i),N);
   end
   %%%%%免疫种群与新种群合并%%%%%
   f=[af,bf];
   len=[alen,blen];
   [Sortlen,Index]=sort(len);
   Sortf=f(:,Index);
   trace(gen)=Sortlen(1);
end
%%%%%输出最优化结果%%%%%
fBest=Sortf(:,1);
Bestlen=trace(end);
figure
for i=1:N-1
    plot([C(fBest(i),1),C(fBest(i+1),1)],[C(fBest(i),2),C(fBest(i+1),2)],'bo-')
    hold on
end
plot([C(fBest(N),1),C(fBest(1),1)],[C(fBest(N),2),C(fBest(1),2)],'bo-')
title(['最优化距离',num2str(Bestlen)]);
figure
plot(trace)
xlabel('迭代次数')
ylabel('目标函数值')
title('亲和度进化曲线')
%%%%%计算路径总长度的函数%%%%%
function len=func3(D,f,N)
     len=D(f(N),f(1));
     for i=1:(N-1)
         len=len+D(f(i),f(i+1));
     end
 end
  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
基于并行人工免疫算法的大规模TSP问题求解-基于并行人工免疫算法的大规模TSP问题求解.pdf 摘 要:  为求解大规模TSP 问题,提出了并行人工免疫系统的塔式主从模型 ,和基于TMSM的并行免疫记忆克隆选择算法 . TMSM是粗粒度的两层并行人工免疫模型,其设计体现了分布式的免疫响应和免疫记忆机制. PIMCSA 用疫苗的迁移代替了抗体的迁移,兼顾了种群多样性的保持和算法的收敛速度. 与其他算法相比,PIMCSA 在求解精度和运行时间上都更具优势,而且问题规模越大优势越明显. TMSM很好地体现了免疫系统的特性,PIMCSA 是适合求解大规模复杂优化问题的并行人工免疫算法,具有良好的可扩展性. 关键词:  TSP; 并行人工免疫系统; 克隆选择; 免疫记忆 1  引言 旅行商问题 是经典的组合优化问题,具有很强的工程背景和广泛的应用价值. TSP 问题可以形式化描述为:已知N 个城市C = { C1 , C2 , ⋯, CN} , 以及任意两城市之间的距离d , 一条经过C 中所有城市一次且仅一次的闭合路径Cx = { Cx , Cx , ⋯,Cx } 使得总行程最小 .对于大规模TSP 问题,人们倾向于用有限的时间找到可接受的近似解. 求解TSP 问题的近似算法分为环路构造算法和环路改进算法两类. 环路构造算法从某个非法解出发,逐步改变路径,直到得到一个合法路径为止.这类算法包括:最近邻算法,贪心算法,Clarke2Wright 算法,Christofides 算法等[1] . 环路改进算法则在给定初始合法解之后,使用某种策略寻找质量更好的解. 这类算法包括:局部搜索策略 ,禁忌搜索[1] ,模拟退火[1] ,遗传算法[3] ,蚁群算法[4] ,粒子群算法[5] ,多级算法[6 ,7] ,免疫算法[8]等. TSP 问题的解空间随着问题规模的增大而迅速膨胀,面对大规模TSP 问题庞大的搜索空间,单个计算机的计算能力已经远不能满足搜索算法对时间的要. 并行算法求解大规模TSP 问题越来越受到研究者的关注,出现了并行蚁群算法[9 ,10]研究的一些成果,目前尚处于起步阶段. 本文工作尝试设计并行的免疫算法来解决这一复杂问题. ....... 后面主要是新提出的算法性能分析和仿真及结论,本文是2008年底新发表的,估计网上现在还不能下载,我是从学校论文数据库中下载的,以供需要者共享资源.
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值