📄 curtailment.cpp
字号:
flag++;
}
for(int j=0;j<Busnum;j++)
{
if(tempbusdata[j].busno==tempbranchdata[i].to)
{
if(*(flag3+j)==0)
{
*(flag3+j)=1;
*(flag4+flag1)=j;
*(flag7+j)=*(flag7+startfind)+1;
flag1++;
}
break;
}
}
}
else if(tempbranchdata[i].alrnum>0&&tempbranchdata[i].to==tempbusdata[startfind].busno)
{
if(*(flag5+i)==0)
{
*(flag5+i)=1;
*(flag6+flag)=i;
flag++;
}
for(int j=0;j<Busnum;j++)
{
if(tempbusdata[j].busno==tempbranchdata[i].from)
{
if(*(flag3+j)==0)
{
*(flag3+j)=1;
*(flag7+j)=*(flag7+startfind)+1;
*(flag4+flag1)=j;
flag1++;
}
break;
}
}
}
}
if(*(flag4+flag2)==-1)
flag2=Busnum-1;
flag2++;
}
//intPrintfVector(flag7,1,Busnum);
temp1=0;
int j=0;
while(temp1<temp&&j<Busnum)
{
for(i=0;i<Busnum;i++)
{
if(*(flag7+i)==j)
temp1+=tempbusdata[i].PL;
}
j++;
}
////////按比例削负荷削减域内的负荷
if(temp1>temp)
for(i=0;i<Busnum;i++)
{
if(*(flag7+i)<j&&*(flag7+i)>-1)
tempbusdata[i].PL=tempbusdata[i].PL*(1-temp/temp1);
}
}
delete []I;
I=NULL;
delete []O;
O=NULL;
delete []tempflag;
tempflag=NULL;
delete []tempflag1;
tempflag1=NULL;
}//////////hehe////////////////////////////////////
delete []flowflag;
flowflag=NULL;
}
}
else if(flag1==Busnum)//系统没有解列
{
int *flowflag;
flowflag=new int[overflowno];
for(i=0;i<overflowno;i++)
{
tempbranchdata[*(overflowline+i)].alrnum=1;
*(flowflag+i)=0;
}
int bb,dd;
temp=0;
for(int ii=0;ii<overflowno;ii++)
{//////////////hehe///////////////////////////////////////////////////
if(tempbranchdata[*(overflowline+ii)].branchP>0&&*(flowflag+ii)==0)
{
dd=tempbranchdata[*(overflowline+ii)].from;
bb=tempbranchdata[*(overflowline+ii)].to;
temp=fabs(tempbranchdata[*(overflowline+ii)].branchP)-tempbranchdata[*(overflowline+ii)].capacity;
for(int jj=0;jj<overflowno;jj++)
{
if(tempbranchdata[*(overflowline+jj)].branchP>0
&&tempbranchdata[*(overflowline+jj)].from==bb&&*(flowflag+ii)==0)
{
*(flowflag+ii)=1;
dd=tempbranchdata[*(overflowline+jj)].from;
bb=tempbranchdata[*(overflowline+jj)].to;
temp=fabs(tempbranchdata[*(overflowline+jj)].branchP)-tempbranchdata[*(overflowline+jj)].capacity;
}
else if(tempbranchdata[*(overflowline+jj)].branchP<0
&&tempbranchdata[*(overflowline+jj)].to==bb&&*(flowflag+ii)==0)
{
*(flowflag+ii)=1;
bb=tempbranchdata[*(overflowline+jj)].from;
dd=tempbranchdata[*(overflowline+jj)].to;
temp=fabs(tempbranchdata[*(overflowline+jj)].branchP)-tempbranchdata[*(overflowline+jj)].capacity;
}
}
//for(jj=0;jj<Busnum;jj++)
//{
// if(tempbusdata[jj].busno==bb)
// bb=jj;
//}
}
else if(tempbranchdata[*(overflowline+ii)].branchP<0&&*(flowflag+ii)==0)
{
dd=tempbranchdata[*(overflowline+ii)].to;
bb=tempbranchdata[*(overflowline+ii)].from;
temp=fabs(tempbranchdata[*(overflowline+ii)].branchP)-tempbranchdata[*(overflowline+ii)].capacity;
for(int jj=0;jj<overflowno;jj++)
{
if(tempbranchdata[*(overflowline+jj)].branchP>0
&&tempbranchdata[*(overflowline+jj)].from==bb&&*(flowflag+ii)==0)
{
*(flowflag+ii)=1;
dd=tempbranchdata[*(overflowline+jj)].from;
bb=tempbranchdata[*(overflowline+jj)].to;
temp=fabs(tempbranchdata[*(overflowline+jj)].branchP)-tempbranchdata[*(overflowline+jj)].capacity;
}
else if(tempbranchdata[*(overflowline+jj)].branchP<0
&&tempbranchdata[*(overflowline+jj)].to==bb&&*(flowflag+ii)==0)
{
*(flowflag+ii)=1;
bb=tempbranchdata[*(overflowline+jj)].from;
dd=tempbranchdata[*(overflowline+jj)].to;
temp=fabs(tempbranchdata[*(overflowline+jj)].branchP)-tempbranchdata[*(overflowline+jj)].capacity;
}
}
}
int ccc=0;
for(int jj=0;jj<Busnum;jj++)
{
if(tempbusdata[jj].busno==bb)
{
bb=jj;
ccc++;
//break;
}
if(tempbusdata[jj].busno==dd)
{
dd=jj;
ccc++;
}
if(ccc==2)
break;
}
/////////////////////////////////////////////////
int *I,*O;//dd的送端节点集和bb的受端节点集
int *tempflag,*tempflag1;
int Inum=0,Onum=0;
I=new int[Busnum];
O=new int[Busnum];
tempflag=new int[Busnum];
tempflag1=new int[Busnum];
for(h=0;h<Busnum;h++)
{
*(tempflag+h)=0;
*(tempflag1+h)=0;
}
for(h=0;h<Branchnum;h++)
{
if(tempbranchdata[h].branchP>0&&tempbranchdata[h].to==tempbusdata[dd].busno)
{
for(int mm=0;mm<Busnum;mm++)
if(tempbusdata[mm].busno==tempbranchdata[h].from)
{
if(*(tempflag+mm)==0)
{
*(I+Inum)=mm;
Inum++;
*(tempflag+mm)=1;
}
break;
}
}
else if(tempbranchdata[h].branchP<0&&tempbranchdata[h].from==tempbusdata[dd].busno)
{
for(int mm=0;mm<Busnum;mm++)
if(tempbusdata[mm].busno==tempbranchdata[h].to)
{
if(*(tempflag+mm)==0)
{
*(I+Inum)=mm;
Inum++;
*(tempflag+mm)=1;
}
break;
}
}
if(tempbranchdata[h].branchP>0&&tempbranchdata[h].from==tempbusdata[bb].busno)
{
for(int mm=0;mm<Busnum;mm++)
if(tempbusdata[mm].busno==tempbranchdata[h].to)
{
if(*(tempflag1+mm)==0)
{
*(O+Onum)=mm;
Onum++;
*(tempflag1+mm)=1;
}
break;
}
}
else if(tempbranchdata[h].branchP<0&&tempbranchdata[h].to==tempbusdata[bb].busno)
{
for(int mm=0;mm<Busnum;mm++)
if(tempbusdata[mm].busno==tempbranchdata[h].from)
{
if(*(tempflag1+mm)==0)
{
*(O+Onum)=mm;
Onum++;
*(tempflag1+mm)=1;
}
break;
}
}
}
*(I+Inum)=dd;
*(O+Onum)=bb;
Inum++;Onum++;
double back_up1=0,back_up2=0,back_up3=0;
double temp2;//平衡节点出力
for(h=0;h<Inum;h++)
{
if(*(I+h)==*balanceno)
{
temp2=0;
for(int hh=0;hh<Branchnum;hh++)
{
if(tempbranchdata[hh].branchP>0&&tempbranchdata[hh].from==*balanceno)
temp2+=tempbranchdata[hh].branchP;
else if(tempbranchdata[hh].branchP<0&&tempbranchdata[hh].from==*balanceno)
temp2-=tempbranchdata[hh].branchP;
else if(tempbranchdata[hh].branchP>0&&tempbranchdata[hh].to==*balanceno)
temp2-=tempbranchdata[hh].branchP;
else if(tempbranchdata[hh].branchP<0&&tempbranchdata[hh].to==*balanceno)
temp2+=tempbranchdata[hh].branchP;
}
if(tempbusdata[*balanceno].maxPG>temp2)
back_up1+=temp2;
}
else
back_up1+=tempbusdata[*(I+h)].PG;
}
for(h=0;h<Onum;h++)
{
if(*(O+h)==*balanceno)
{
temp2=0;
for(int hh=0;hh<Branchnum;hh++)
{
if(tempbranchdata[hh].branchP>0&&tempbranchdata[hh].from==*balanceno)
temp2+=tempbranchdata[hh].branchP;
else if(tempbranchdata[hh].branchP<0&&tempbranchdata[hh].from==*balanceno)
temp2-=tempbranchdata[hh].branchP;
else if(tempbranchdata[hh].branchP>0&&tempbranchdata[hh].to==*balanceno)
temp2-=tempbranchdata[hh].branchP;
else if(tempbranchdata[hh].branchP<0&&tempbranchdata[hh].to==*balanceno)
temp2+=tempbranchdata[hh].branchP;
}
if(tempbusdata[*balanceno].maxPG>temp2)
back_up2=tempbusdata[*balanceno].maxPG-temp2;
back_up3+=temp2;
}
else
{
back_up2+=tempbusdata[*(O+h)].maxPG-tempbusdata[*(O+h)].PG;
back_up3+=tempbusdata[*(O+h)].PG;
}
}
if(back_up2>0)//受端节点有备用
{
double mini=temp;
if(mini>back_up1)
mini=back_up1;
if(mini>back_up2)
mini=back_up2;
//按比例减少送端节点的发电机出力
for(h=0;h<Inum;h++)
if(*(I+h)!=*balanceno)
tempbusdata[*(I+h)].PG=tempbusdata[*(I+h)].PG*(1-mini/back_up1);
//按比例增加受端节点的发电机出力
for(h=0;h<Onum;h++)
if(*(O+h)!=*balanceno&&back_up3!=0)
tempbusdata[*(O+h)].PG=tempbusdata[*(O+h)].PG*(1+mini/back_up3);
}
else
{
////////////////削负荷///////////////////////////
for(int i=0;i<Busnum;i++)
{
*(flag3+i)=0;
*(flag4+i)=-1;
*(flag7+i)=-1;
}
for(i=0;i<Branchnum;i++)
{
*(flag5+i)=0;
*(flag6+i)=-1;
}
///////////////////////确定削减域/////////////////////////
*(flag4+0)=bb;
*(flag7+bb)=0;
flag=0;
flag1=1;
flag2=0;
while(flag2!=Busnum)
{
if(flag2==0)
{
startfind=*(flag4+0);
*(flag3+startfind)=1;
}
else if(*(flag4+flag2)!=-1)
startfind=*(flag4+flag2);
//startfind=*(flag4+flag2);
for(i=0;i<Branchnum;i++)
{
if(tempbranchdata[i].alrnum>0&&tempbranchdata[i].from==tempbusdata[startfind].busno)
{
if(*(flag5+i)==0)
{
*(flag5+i)=1;
*(flag6+flag)=i;
flag++;
}
for(int j=0;j<Busnum;j++)
{
if(tempbusdata[j].busno==tempbranchdata[i].to)
{
if(*(flag3+j)==0)
{
*(flag3+j)=1;
*(flag4+flag1)=j;
*(flag7+j)=*(flag7+startfind)+1;
flag1++;
}
break;
}
}
}
else if(tempbranchdata[i].alrnum>0&&tempbranchdata[i].to==tempbusdata[startfind].busno)
{
if(*(flag5+i)==0)
{
*(flag5+i)=1;
*(flag6+flag)=i;
flag++;
}
for(int j=0;j<Busnum;j++)
{
if(tempbusdata[j].busno==tempbranchdata[i].from)
{
if(*(flag3+j)==0)
{
*(flag3+j)=1;
*(flag7+j)=*(flag7+startfind)+1;
*(flag4+flag1)=j;
flag1++;
}
break;
}
}
}
}
if(*(flag4+flag2)==-1)
flag2=Busnum-1;
flag2++;
}
//intPrintfVector(flag7,1,Busnum);
temp1=0;
int j=0;
while(temp1<temp&&j<Busnum)
{
for(i=0;i<Busnum;i++)
{
if(*(flag7+i)==j)
temp1+=tempbusdata[i].PL;
}
j++;
}
////////按比例削负荷削减域内的负荷
if(temp1>temp)
for(i=0;i<Busnum;i++)
{
if(*(flag7+i)<j&&*(flag7+i)>-1)
tempbusdata[i].PL=tempbusdata[i].PL*(1-temp/temp1);
}
}
delete []I;
I=NULL;
delete []O;
O=NULL;
delete []tempflag;
tempflag=NULL;
delete []tempflag1;
tempflag1=NULL;
}//////////hehe////////////////////////////////////
delete []flowflag;
flowflag=NULL;
}
}
for(i=0;i<overflowno;i++)
tempbranchdata[*(overflowline+i)].alrnum=1;
count++;
}//////////////////////////////////////////////////////////////
delete []overflowline;
overflowline=NULL;
delete []flag3;
flag3=NULL;
delete []flag4;
flag4=NULL;
delete []flag5;
flag5=NULL;
delete []flag6;
flag6=NULL;
delete []flag7;
flag7=NULL;
//for(int i=0;i<Busnum;i++)
//printf("%lf\t",tempbusdata[i].PL);
//getchar();
}
delete []B;
B=NULL;
delete []X;
X=NULL;
delete []PSP;
PSP=NULL;
delete []Angle;
Angle=NULL;
delete []branchP;
branchP=NULL;
delete []over;
over=NULL;
delete []overflowline;
overflowline=NULL;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -