该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
function y = fun(x)
y=0.072*x(1)+0.063*x(2)+0.057*x(3)+0.05*x(4)+0.032*x(5)+0.0442*x(6)+0.0675*x(7);
clear all;
close all;
warning off
popsize=100;
lenchrom=7;
pc=0.7;
pm=0.3;
maxgen=100;
popmax=50;
popmin=0;
bound=[popmin popmax;popmin popmax;popmin popmax;popmin popmax;popmin popmax;popmin popmax];
for i=1:popsize
fitness(i)=fun(GApop(i,:));
end
[bestfitness bestindex]=min(fitness);
zbest=GApop(bestindex,:);
gbest=GApop;
fitnessgbest=fitness;
fitnesszbest=bestfitness;
for i=1:maxgen
i
GApop=Select2(GApop,fitness,popsize);
GApop=Cross(pc,lenchrom,GApop,popsize,bound);
GApop=Mutation(pm,lenchrom,GApop,popsize,[i,maxgen],bound);
pop=GApop;
for j=1;popsize
if 0.072*pop(j,1)+0.063*pop(j,2)+0.057*pop(j,3)+0.05*pop(j,4)+0.032*pop(j,5)+0.0442*pop(j,6)+0.0675*pop(j,7)<=264.4
if 128*pop(j,1)+78.1*pop(j,2)+64.1*pop(j,3)+43*pop(j,4)+58.1*pop(j,5)+36.9*pop(j,6)+50.5*pop(j,7)<=69719
fitness(j)=fun(pop(j,:));
end
end
if fitness(j)
gbest(j,:)=pop(j,:);
fitnessgbest(j)=fitness(j);
end
if fitness(j)
zbest=pop(j,:);
fitnesszbest=fitness(j);
end
end
yy(i)=fitnesszbest;
end
disp '*************best particle number****************'
zbest
plot(yy,'linewidth',2);
title(['适应度曲线 ''终止代数=' num2str(maxgen)]);
xlabel('进化代数');yable('适应度');
grid on
function ret=Code(lenchrom,bound)
flag=0;
while flag==0
pick=rand(1,lenchrom);
ret=bound(:,1)'+(bound(:,2)-bound(:,1))'.*pick;
flag=test(lenchrom,bound,ret);
end
function ret=Select(individuals,fitness,siaepop)
fitness=1./(fitness);
sunfitness=sum(fitness);
sumf=fitness./sumfitness;
index=[];
for i=1;sizepop
pick=rand;
while pick==0
pick=rand;
end
for j=1:sizepop
pick=pick-sumf(j);
if pick<0
index=[index j];
break;
end
end
end
individuals=individuals(index,:);
fitness=fitness(index);
ret=individuals;
function ret=Cross(pcross,lenchrom,chrom,sizepop,bound)
for i=1:sizepop
pick=rand(1,2);
while prod(pick)==0
pick=rand(1,2);
end
index=ceil(pick.*sizepop);
pick=rand;
while pick==0
pick=rand;
end
if pick>pcross
continue;
end
flag=0;
while flag==0
pick=rand;
while pick==0
pick=rand;
end
pos=ceil(pick.*sum(lenchrom));
pick=rand;
v1=chrom(index(1),pos);
v2=chrom(index(2),pos);
chrom(index(1),pos)=pick*v2+(1-pick)*v1;
chrom(index(2),pos)=pick*v1+(1-pick)*v2;
flag1=test(lenchrom,bound,chrom(index(1),:));
flag2=test(lenchrom,bound,chrom(index(2),:));
if flag1*flag2==0
flag=0;
else flag=1;
end
end
end
ret=chrom
function flag=test(lenchrom,bound,code)
flag=1;
[n,m]=size(code);
for i=1:n
if code(i)bpund(i,2)
flag=0;
end
end
function ret=Mutation(pmutation,lenchrom,chrom,sizepop,pop,bound)
for i=1:sizepop
pick=rand;
while pick==0
pick=rand;
end
index=ceil(pick*sizepop);
pick=rand;
if pick>pmutation
continue;
end
flag=0;
while flag==0
pick=rand;
while pick==0
pick=rand;
end
pos=ceil(pick*sum(lenchrom));
v=chrom(i,pos);
v1=v-bound(pos,1);
v2=bpund(pos,2)-v;
pick=rand;
if pick>0.5
delta=v2*(1-pick^((1-pop(1)/pop(2))^2));
chrom(i,pos)=v+delta;
else
delta=v1*(1-pick^((1-pop(1)/pop(2))^2));
chrom(i,pos)=v-delta;
end
flag=test(lenchrom,bound,chrom(i,:));
end
end
ret=chrom;
>> fun
错误使用 fun (line 2)
输入参数的数目不足。