大连海事大学Matlab作业:遗传算法源代码.docx
文本预览下载声明
一. 遗传算法源代码1. 主函数:clcclearall;closeall;popsize=60;%种群规模chromlength=42;%染色体长度J=6; %备选配送中心P=4; %建设数量上限I=7; %服务顾客数量B=350000; %投资预算a=[370 400 600 1100 750 450];c1=[200 150 110 170 130 165];c2=[250 270 275 200 200 230 240 190 230 220 230 170 230 270 250 265 200 230 230 265 220 300 320 310 265 270 270 230 270 250 270 190 230 220 200 220 230 220 240 200 220 270]; d=[240 270 300 240 220 350 200 240 270 300 240 220 350 200 240 270 300 240 220 350 200 240 270 300 240 220 350 200 240 270 300 240 220 350 200 240 270 300 240 220 350 200];e=[73000 82000 62000 81000 71500 72500];pm=0.2;%变异概率pc=0.6;%交叉概率[pop0,initpop]=init(popsize,chromlength,J,I); %随机产生初始种群for i=1:500 %500为遗传代数[fit,cumsump]=fitness(initpop,pop0,J,P,I,B,a,c1,c2,d,e);%计算种群中个体适应度[bestpop,bestnewpop,bestfit]=best(pop0,initpop,fit);%记录最佳适应度[pop1,newpop] =selection(pop0,initpop,cumsump); %选择newpop1=crossover(pop1,newpop,pc,I); %交叉[pop2,newpop2]=mutation(pop1,newpop1,pm,I); %变异pop0=pop2;initpop=newpop2;enddisp(最小成本为:)bestfitdisp(配送中心选址方案:)bestpopdisp(顾客配送方案:)bestnewpop2. 生成初代种群子函数function [pop0,initpop]=init(popsize,chromlength,J,I);initpop=zeros(popsize,chromlength);pop=zeros(popsize,chromlength);pop0=round(rand(popsize,J));for i=1:popsizeif pop0(i,:)==zeros(1,J)pop0(i,:)=ones(1,J);endendfor i=1:popsize for j=1:Jif pop0(i,j)==1;pop(i,((j-1)*I+1):((j-1)*I+I))=round(rand(1,I));endendendinitpop=pop; 3. 种群中个体适应度子函数function [fit,cumsump]=fitness(initpop,pop0,J,P,I,B,a,c1,c2,d,e);[px,py]=size(initpop);fit=zeros(px,1);dudu=zeros(px,I);for i=1:px p=sum(pop0(i,:)); b=sum(pop0(i,:).*e); a=0;%%%%%%%%%适应度函数%%%%%%%%%for j=1:I dudu(i,j)=dudu(i,j)+initpop(i,j)+initpop(i,I+j)+initpop(i,2*I+j)+initpop(i,3*I+j)+initpop(i,4*I+j)+initpop(i,5*I+j);ifdudu(i,j)==0 a=1;endendif ( bB | p1 | pP | a==1) fit(i)=2000000;else fit(i)=sum(a.*c1.*pop0(i,:)+e.*pop0(i,:))+sum(initpop(i,:).*d.*c2);endend%%%%%%%%%种群选择准备工作%%%%%%fit1=3000000-fit;fsum=sum(fit1);pp=fit1/fsum;cumsump=cumsum(pp);4. 记录满意解子函数functi
显示全部