肿瘤康复网,内容丰富有趣,生活中的好帮手!
肿瘤康复网 > 免疫算法聚类选址matlab

免疫算法聚类选址matlab

时间:2018-10-26 12:09:32

相关推荐

免疫算法是一种智能算法,和遗传算法类似,可以用来快速求解一些精确算法难以求解的问题,以下将用免疫算法进行聚类选址。

main函数代码如下:

%% 免疫优化算法在物流配送中心选址中的应用%% 清空环境clcclear%% 算法基本参数 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%% step3 抗体群多样性评价for i=1:Mindividuals.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 onplot(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:31distance(i,:)=dist(city_coordinate(i,:),city_coordinate(bestchrom,:)');end%city_coordinate=[1.25,1.25;8.75,0.75;0.5,4.75;5.75,5;3,6.5;7.25,7.75]; %货物量%carge=[3,5,4,7,6,11];%找出最近配送点%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);endfigure(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 onplot(city_coordinate(:,1),city_coordinate(:,2),'o','LineWidth',2,...'MarkerEdgeColor','k',...'MarkerFaceColor','g',...'MarkerSize',10)for i=1:31x=[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 onend

运行结果图:

如果觉得《免疫算法聚类选址matlab》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。