您现在的位置:首页 >> 智能优化 >> 内容

基于免疫优化算法在物流配送多中心选址的matlab仿真

时间:2022/12/8 20:18:15 点击:

  核心提示:a96,包括程序操作录像...

1.完整项目描述和程序获取

>面包多安全交易平台:https://mbd.pub/o/bread/Y5mUmphs

>如果链接失效,可以直接打开本站店铺搜索相关店铺:

点击店铺

>如果链接失效,程序调试报错或者项目合作可以加微信或者QQ联系。

2.部分仿真图预览



3.算法概述

        人工免疫算法(Immune Algorithm)是一种具有生成+检测 (generate and test)的迭代过程的群智能搜索算法。从理论上分析,迭代过程中,在保留上一代最佳个体的前提下,免疫算法是全局收敛的。算法主要包含以下几大模块:

1.抗原识别与初始抗体产生。根据待优化问题的特点设计合适的抗体编码规则,并在此编码规则下利用问题的先验知识产生初始抗体种群。

2.抗体评价。对抗体的质量进行评价,评价准则主要为抗体亲和度和个体浓度,评价得出的优质抗体将进行进化免疫操作,劣质抗体将会被更新。

3.免疫操作。利用免疫选择、克隆、变异、克隆抑制、种群刷新等算子模拟生物免疫应答中的各种免疫操作,形成基于生物免疫系统克隆选择原理的进化规则和方法,实现对各种最优化问题的寻优搜索。

4.部分源码

sizepop=50;           % 种群规模

overbest=10;          % 记忆库容量

MAXGEN=100;            % 迭代次数

pcross=0.5;           % 交叉概率

pmutation=0.4;        % 变异概率

ps=0.95;              % 多样性评价参数

length=6;             % 配送中心数

M=sizepop+overbest;

%% step1 识别抗原,将种群信息定义为一个结构体

individuals = struct('fitness',zeros(1,M), 'concentration',zeros(1,M),'excellence',zeros(1,M),'chrom',[]);

%% step2 产生初始抗体群

individuals.chrom = popinit(M,length);

trace=[]; %记录每代最个体优适应度和平均适应度

%% 迭代寻优

for iii=1:MAXGEN

    iii

     %% step3 抗体群多样性评价

     for i=1:M

         individuals.fitness(i) = fitness(individuals.chrom(i,:));      % 抗体与抗原亲和度(适应度值)计算

         individuals.concentration(i) = concentration(i,M,individuals); % 抗体浓度计算

     end

     % 综合亲和度和浓度评价抗体优秀程度,得出繁殖概率

     individuals.excellence = excellence(individuals,M,ps);

          

     % 记录当代最佳个体和种群平均适应度

     [best,index] = min(individuals.fitness);   % 找出最优适应度 

     bestchrom = individuals.chrom(index,:);    % 找出最优个体

     average = mean(individuals.fitness);       % 计算平均适应度

     trace = [trace;best,average];              % 记录

     

     %% step4 根据excellence,形成父代群,更新记忆库(加入精英保留策略,可由s控制)

     bestindividuals = bestselect(individuals,M,overbest);   % 更新记忆库

     individuals = bestselect(individuals,M,sizepop);        % 形成父代群

 

     %% step5 选择,交叉,变异操作,再加入记忆库中抗体,产生新种群

     individuals = Select(individuals,sizepop);                                                             % 选择

     individuals.chrom = Cross(pcross,individuals.chrom,sizepop,length);                                    % 交叉

     individuals.chrom = Mutation(pmutation,individuals.chrom,sizepop,length);   % 变异

     individuals = incorporate(individuals,sizepop,bestindividuals,overbest);                               % 加入记忆库中抗体      

 

end

 

%% 画出免疫算法收敛曲线

figure(1)

plot(trace(:,1));

hold on

plot(trace(:,2),'--');

legend('最优适应度值','平均适应度值')

title('免疫算法收敛曲线','fontsize',12)

xlabel('迭代次数','fontsize',12)

ylabel('适应度值','fontsize',12)

%% 画出配送中心选址图

%城市坐标

city_coordinate=[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];

carge=[20,90,90,60,70,70,40,90,90,70,60,40,40,40,20,80,90,70,100,50,50,50,80,70,80,40,40,60,70,50,30];

%找出最近配送点

for i=1:31

    distance(i,:)=dist(city_coordinate(i,:),city_coordinate(bestchrom,:)');

end

[a,b]=min(distance');

index=cell(1,length);

for i=1:length

%计算各个派送点的地址

index{i}=find(b==i);

end

figure(2)

title('最优规划派送路线')

cargox=city_coordinate(bestchrom,1);

cargoy=city_coordinate(bestchrom,2);

plot(cargox,cargoy,'rs','LineWidth',2,...

    'MarkerEdgeColor','r',...

    'MarkerFaceColor','b',...

    'MarkerSize',20)

hold on

plot(city_coordinate(:,1),city_coordinate(:,2),'o','LineWidth',2,...

    'MarkerEdgeColor','k',...

    'MarkerFaceColor','g',...

    'MarkerSize',10)

for i=1:31

    x=[city_coordinate(i,1),city_coordinate(bestchrom(b(i)),1)];

    y=[city_coordinate(i,2),city_coordinate(bestchrom(b(i)),2)];

    plot(x,y,'c');hold on

end

A96

作者:我爱C编程 来源:我爱C编程
本站最新成功开发工程项目案例
相关文章
  • 没有相关文章
相关评论
发表我的评论
  • 大名:
  • 内容:
本类固顶
  • 没有
  • FPGA/MATLAB商业/科研类项目合作(www.store718.com) © 2025 版权所有 All Rights Reserved.
  • Email:1480526168@qq.com 站长QQ: 1480526168