matlab、lingo程序代码3-背包问题(遗传算法)复习过程
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
背包问题---遗传算法解决
function Population1=GA_copy(Population,p,w0,w)
%复制算子
%Population为种群
n=length(Population(:,1));
fvalue=zeros(1,n);
for i=1:n
fvalue(i)=GA_beibao_fitnessvalue(Population(i,:),p,w0,w);
end
fval=fvalue/sum(fvalue);
F(1)=0;
for j=1:n
F(j+1)=0;
for k=1:j
F(j+1)=F(j+1)+fval(k);
end
end
for i=1:n
test=rand;
for j=1:n
if((test>=F(j))&&(test Population1(i,:)=Population(j,:); end end end function Population1=GA_exchange(Population,pc) %遗传算法交换算子 %pc为交换概率 Population1=Population; POP=[]; n=length(Population(:,1)); %k=floor(n*pc); %用于交换的染色体数目 %采用单点交换算子 j=1; l=length(Population(1,:)); for i=1:n test(i)=rand; if test(i) for z=1:l POP(j,z)=Population(i,z); end POP(j,l+1)=i; p(j)=randint(1,1,[1 l-1]); j=j+1; end end k0=j-1; k=floor(k0/2); if k>=1 for m=1:k for t=p(2*m-1)+1:l s=POP(2*m-1,t); POP(2*m-1,t)=POP(2*m,t); POP(2*m,t)=s; end end for m=1:k0 for i=1:l Population1(POP(m,l+1),i)=POP(m,i); end end end function fitnessvalue=GA_fitnessvalue(x,p,w0,w) %使用惩罚法计算适应度值 %x为染色体 %p为背包问题中每个被选物体的价值 %w0为背包问题中背包总容积 %w为背包问题中每个被选物品的容积 l=length(x); for i=1:l a(i)=p(i).*x(i); end f=sum(a); b=min(w0,abs(sum(w)-w0)); for i=1:l wx(i)=w(i).*x(i); end if abs(sum(wx)-w0)>b*0.99 p=0.99; else p=abs(sum(wx)-w0)/b; end fitnessvalue=f*(1-p)*(1-p)*(1-p); function Population=GA_Initial(n,P) %n为染色体长度,即所供选择的物品总数 %P为初始种群大小 for i=1:P for j=1:n temp=rands(1,1); if temp>0 Population(i,j)=1; else Population(i,j)=0; end end end function Population1=GA_tubian(Population,pe_tubian) %遗传算法突变算子 %pe为突变概率 Population1=Population; n=length(Population(:,1)); m=length(Population(1,:)); for i=1:n for j=1:m test=rand; if test Population1(i,j)=1-Population1(i,j); end end end