matlab子程序出现变量为定义,运行提示变量ng未定义,但是子

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

运行提示变量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;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值