matlab chrom(i pos),求助大神,按照书的顺序编写程序,为什么运行就说参数数目不足...

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

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)

输入参数的数目不足。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值