matlab、lingo程序代码3-背包问题(遗传算法)复习过程

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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

相关文档
最新文档