该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
运行提示变量ng未定义,但是子程序中有了,怎么解决?
tic
NIND=100;
MAXGEN=40;
NVAR=12;
GGAP=0.8;
FieldDR=[-0.3 -0.2 -0.15 -0.15 -0.1 0 0.1 0.2 0.15 0.10 0.10 0;2 1 0.8 0.6 0.5 0.5 1 0.5 0.8 0.45 0.45 0];
Chrom=crtrp(NIND,FieldDR);
ObjV=zeros(NIND,1);
for j=1:NIND
gene(:,2)=Chrom(j,1:6);
gene(:,3)=Chrom(j,7:12);
for i=1:ng
for k=1:nb
if gene(i,1)==bus(k,1)
bus(k,5)=gene(i,2)-bus(k,7);
bus(k,4)=gene(i,3)-bus(k,8);
end
end
end
ObjV(j,1)=Obj(bus,line,gene);
end
gen=0;
trace=zeros(MAXGEN,2);
while gen
FitnV=ranking(ObjV);
SelCh=select('sus',Chrom,FitnV,GGAP);
SelCh=recombin('xovsh',SelCh,0.7);
SelCh=mutate('mutbga',SelCh,FieldDR,0.2);
[ns,ms]=size(SelCh);
ObjVSel=zeros(ns,1);
for t=1:ns
gene(:,2)=SelCh(t,1:6);
gene(:,3)=SelCh(t,7:12);
for p=1:ng
for q=1:nb
if gene(p,1)==bus(q,1)
bus(q,5)=gene(p,2)-bus(q,7);
bus(q,4)=gene(p,3)-bus(q,10);
end
end
end
ObjVSel(t,1)=Obj(bus,line,gene);
end
[Chrom,ObjV]=reins(Chrom,SelCh,1,[1 0.5],ObjV,ObjVSel);
gen=gen+1;
[Y,I]=min(ObjV);
Y
Chrom(I,:)
trace(gen,1)=min(ObjV);
trace(gen,2)=sum(ObjV)/length(ObjV);
end
figure(1);
clf;
plot(trace(:,1));
hold on;
plot(trace(:,2),'-.');
grid;
legend('解的变化','种群均值变化');
toc
下面是子程序
function minF=Obj(bus,line,gene)
[bus_res,S_res]=PowerFlow_NR_2(bus,line);
[nb,mb]=size(bus);
[ng,mg]=size(gene);
[nl,ml]=size(line);
Pl=0;
for c=1:nl
Pl=Pl+real(S_res(c,5));
end
detaQ=0;
for a=1:nb
if bus(a,8)~=0
if bus(a,5)+bus(a,7)
detaQ=detaQ+((bus(a,9)-bus(a,5)-bus(a,7))/(bus(a,8)-bus(a,9)))^2;
elseif bus(a,7)+bus(a,5)>bus(a,8)
detaQ=detaQ+((bus(a,5)+bus(a,7)-bus(a,8))/(bus(a,8)-bus(a,9)))^2;
else
detaQ=detaQ+0;
end
end
end
detaU=0;
for b=1:nb
if bus_res(b,2)>1.10
detaU=detaU+((bus_res(b,2)-1.10)/0.15)^2;
elseif bus_res(b,2)<0.95
detaU=detaU+((0.95-bus_res(b,2))/0.15)^2;
else
detaU=detaU+0;
end
end
minF=Pl+detaQ+detaU;