logo资料库

基于遗传算法配电网无功优化方法程序源代码.doc

第1页 / 共30页
第2页 / 共30页
第3页 / 共30页
第4页 / 共30页
第5页 / 共30页
第6页 / 共30页
第7页 / 共30页
第8页 / 共30页
资料共30页,剩余部分请下载后查看
#include #include #include #include #include #include class Branch { public: int IZA[1000];//支路状态数 int IZ1[1000];//支路一端结点号 int IZ2[1000];//支路另一端结点号 int IWGA[1000];//发电机状态数 int IWG[1000];//发电机节点号 int IQ;//发电机台数 double GV1[1000];//发电机端电压的上限 double GV2[1000];//发电机端电压的下限 double GQ1[1000];//发电机无功出力上限 double GQ2[1000];//发电机无功出力下限 double QG1[1000];//节点发电机无功上限 double QG2[1000];//节点发电机无功下限 double DQG[1000]; double VG1[1000];//节点发电机端电压的上限 double VG2[1000];//节点发电机端电压的下限 int ILP[1000];//负荷状态数 int ILD[1000];//负荷结点号 int IPV[1000];//PV 结点的结点号 double Z1[1000];//支路正序电阻 double Z2[1000];//支路正序电抗 double Z3[1000];//支路正序电纳 double Z4[1000];//支路正序电纳暂存数组 double W1[1000];//发电机有功 double W2[1000];//发电机无功 double WL1[1000];//负荷有功 double WL2[1000];//负荷无功 int N;//网络结点数 int M;//网络支路数 int No;//平衡节点号 int IP;//负荷个数 int N1; int popsize;//种群大小 int NC;//可调无功补偿设备的台数 int INC[1000];//可调电容器的节点号 int NC1[1000];//电容器的挡数
double CC1[1000];//无功补偿容量的上限 double CC2[1000];//无功补偿容量的下限 double CS[1000];//无功补偿容量的分段步长 JCC1[1000];//节点无功补偿容量的上限 int CN1[1000];//节点电容器的挡数 double double JCC2[1000];//节点无功补偿容量的下限 double SC[1000];//节点无功补偿容量的分段步长 int CK[1000];//随机产生无功补偿装置的档位值 double CK1[1000]; int NT;//变比可调的变压器台数 int INT[1000];//可调变压器号 int NT1[1000];//变压器可调挡数 double TV1[1000];//变压器变比的上限 double TV2[1000];//变压器变比的下限 int TK1[1000];//随机产生变压器分接头位置 double TK2[1000]; double TS[1000];//变压器变比分段步长 double Uo;//平衡结点给定电压值 double UP;//PQ 结点电压初值 double V[1000];//存结点电压幅值 double PV[1000];//PV 节点电压的中间变量 double H[1000];//存结点电压相角 double PD[1000];//存结点负荷的有功 double QD[1000];//存结点负荷的无功 double PF[1000];//存结点给定的发电有功 double QF[1000];//存结点给定的发电无功 double BC[1000];//节点无功补偿容量 double LV1;//PQ 节点电压的上限 double LV2;//PQ 节点电压的下限 int IVI[1000];//存 PV 结点的标志 public: void setdata();//随机产生初始变量 void Read();//读入数据 void init();//给结点电压赋初值,确定结点给定的负荷和发电功率及给 PV 结点加标志 }; 12、branch.cpp #include"branch.h" //从 a.txt 文件读入数据 void Branch::Read() { for(int g=0;g<=999;g++) { IZA[g]=0;//支路状态数 IZ1[g]=0;//支路一端结点号
IZ2[g]=0;//支路另一端结点号 IWGA[g]=0;//发电机状态数 IWG[g]=0;//发电机节点号 Z1[g]=0;//支路正序电阻 Z2[g]=0;//支路正序电抗 Z3[g]=0;//支路正序电纳 Z4[g]=0;//支路电纳暂存数组 GV1[g]=0;//发电机端电压的上限 GV2[g]=0;//发电机端电压的下限 GQ1[g]=0;//发电机无功出力上限 GQ2[g]=0;//发电机无功出力下限 QG1[g]=0;//节点发电机无功上限 QG2[g]=0;//节点发电机无功下限 DQG[g]=0; VG1[g]=0;//节点发电机端电压的上限 VG2[g]=0;//节点发电机端电压的下限 PV[g]=0;//PV 节点电压的中间变量 ILP[g]=0;//负荷状态数 ILD[g]=0;//负荷结点号 W1[g]=0;//发电机有功 W2[g]=0;//发电机无功 WL1[g]=0;//负荷有功 WL2[g]=0;//负荷无功 V[g]=0;//存结点电压幅值 H[g]=0;//存结点电压相角 PD[g]=0;//存结点负荷的有功 QD[g]=0;//存结点负荷的无功 PF[g]=0;//存结点给定的发电有功 QF[g]=0;//存结点给定的发电无功 IVI[g]=0;//存 PV 结点的标志 IPV[g]=0;//存 PV 结点的结点号 PV[g]=0;//存 PV 结点的电压 INC[g]=0;//无功补偿设备的节点号 NC1[g]=0;//电容器的挡数 CC1[g]=0;//无功补偿容量的上限 CC2[g]=0;//无功补偿容量的下限 CS[g]=0;//无功补偿容量的分段步长 CN1[g]=0;//节点电容器的挡数 JCC1[g]=0;//节点无功补偿容量的上限 JCC2[g]=0;//节点无功补偿容量的下限 SC[g]=0;//节点无功补偿容量的分段 CK[g]=0; CK1[g]=0;
BC[g]=0; INT[g]=0;//可调变压器号 NT1[g]=0;//变压器可调挡数 TV1[g]=0;//变压器变比的上限 TV2[g]=0;//变压器变比的下限 TS[g]=0;//变压器变比分段步长 TK1[g]=0; TK2[g]=0; } ifstream aa("a.txt"); aa>>N>>M>>No>>Uo>>IQ>>IP>>UP>>NC>>NT>>LV1>>LV2>>popsize>>N1; for(int h=1;h<=M;h++) { aa>>IZA[h]; aa>>IZ1[h]; aa>>IZ2[h]; aa>>Z1[h]; aa>>Z2[h]; aa>>Z3[h]; } for(int i=1;i<=IQ;i++) { aa>>IWGA[i]; aa>>IWG[i]; aa>>W1[i]; aa>>W2[i]; aa>>GV1[i]; aa>>GV2[i];//发电机端电压的下限 aa>>GQ1[i];//发电机无功出力上限 aa>>GQ2[i];//发电机无功出力下限 } for(int j=1;j<=IP;j++) { aa>>ILP[j]; aa>>ILD[j]; aa>>WL1[j]; aa>>WL2[j]; } for(int k=1;k<=N1;k++) { aa>>IPV[k]; aa>>PV[k]; }
for(int m=1;m<=NC;m++) { aa>>INC[m];//无功补偿设备的节点号 aa>>NC1[m];//电容器的挡数 aa>>CC1[m];//无功补偿容量的上限 aa>>CC2[m];//无功补偿容量的下限 aa>>CS[m];//无功补偿容量的分段步长 } } for(int n=1;n<=NT;n++)//输入的时候按支路中变压器的顺序输入 { aa>>INT[n];//可调变压器号 aa>>NT1[n];//变压器可调挡数 aa>>TV1[n];//变压器变比的上限 aa>>TV2[n];//变压器变比的下限 aa>>TS[n];//变压器变比分段步长 aa.close(); }; //给结点电压赋初值 void Branch::init() { for(int I=1;I<=N;I++) { V[I]=UP; H[I]=0.0; } for(int I0=1;I0<=N1;I0++) { int J0=0; J0=IPV[I0]; V[J0]=PV[I0]; } V[No]=Uo; //确定结点给定的负荷和发电功率及给 PV 结点加标志 for(int I1=1;I1<=IP;I1++) { if(ILP[I1]!=0) { int J1=ILD[I1]; PD[J1]=WL1[I1]; QD[J1]=WL2[I1]; } } for(int I2=1;I2<=IQ;I2++)
{ if(IWGA[I2]!=0) { int J2=IWG[I2]; PF[J2]=W1[I2]; QF[J2]=W2[I2]; VG1[J2]=GV1[I2];//节点发电机端电压的上限 VG2[J2]=GV2[I2];//节点发电机端电压的下限 QG1[J2]=GQ1[I2];//发电机无功出力上限 QG2[J2]=GQ2[I2];//发电机无功出力下限 DQG[J2]= QG1[J2]-QG2[J2]; } } for(int I3=1;I3<=N1;I3++) { int J3=IPV[I3]; IVI[J3]=1; } for(int I5=1;I5<=NC;I5++) { int J5=INC[I5];//无功补偿设备的节点号 CN1[J5]=NC1[I5];//节点电容器的挡数 JCC1[J5]=CC1[I5];//节点无功补偿容量的上限 JCC2[J5]=CC2[I5];//节点无功补偿容量的下限 SC[J5]=CS[I5];//节点无功补偿容量的分段步长 BC[J5]=0;//节点无功补偿容量 } }; void Branch::setdata() { for(int k=2;k<=IQ;k++)//随机产生群体中第 P 个个体的发电机端电压变量的电压值并赋给 确定的节点 { } int K1=IWG[k]; V[K1]=rand()*(VG1[K1]-VG2[K1])/32767.0+VG2[K1]; for(int n=1;n<=NT;n++)//随机产生群体中第 P 个个体的变压器档位变量 { TK1[n]=(rand()%(NT1[n]+1)); Z3[n]=TK1[n]*TS[n]+TV2[n]; } for(int j=1;j<=NC;j++)//随机产生群体中第 P 个个体的电容器档位变量 {
int j1; j1=INC[j]; CK[j1]=(rand()%(CN1[j1]+1)); BC[j1]=CK[j1]*SC[j1]+JCC2[j1]; } } 21、Ldp.h //形成导纳矩阵头文件 //形成 B`和 B`` //形成功率误差分量 dp,dq #include"branch.h" class LDP:public Branch { public: double D11[1000];//正序导纳矩阵对角元的实部 double D12[1000];//正序导纳矩阵对角元的虚部 double Y1[1000];//正序导纳矩阵非对角非零元的实部 double Y2[1000];//正序导纳矩阵非对角非零元的虚部 double YZ1[1000];//不规则互导纳元素的实部 double YZ2[1000];//不规则互导纳元素的虚部 int IY1[1000];//不规则互导纳元素的行号 int IY2[1000];//不规则互导纳元素的列号 int IY[1000];//正序导纳矩阵非对角非零元的列号 int In[1000];//正序导纳矩阵每行非对角非零元的个数 int IFD[1000];//每行非对角非零元首元的地址 int LF;//下一个可用的空白地址 int LCOL[1000];//各列非零元的首元地址 int ITAG[1000];//存放在 CE 中各元素的行指数 int NOZE[1000];//各列非零元素数(某一结点的"度"数加 1,1 为对角元素数) double CE1[1000];//B`阵的有关元素 double CE2[1000];//B``阵的有关元素 double DP[1000];//dP/V double DQ[1000];//dQ/V double AM;//DP[i],DQ[i]中最大值; public: void a();//形成导纳矩阵 void d();//形成 NOZE,ITAG 数组及 B`,B``元素 void c1();//形成 DP,DQ }; 22、Ldp.cpp #include #include #include"Ldp.h"
//形成导纳矩阵 void LDP::a() { int IG=0;//当前支路状态临时寄存单元 double GIJ=0;//电导 double BIJ=0;//电纳 double GI=0;//I 结点自导纳实部 double GJ=0;//J 结点自导纳实部 double BI=0;//I 结点自导纳虚部 double BJ=0;//J 结点自导纳虚部 int L=0; double R=0; double X=0; double B=0; double A=0; int I8=0; int J8=0; for(int a=0;a<=999;a++) { D11[a]=0; D12[a]=0; Y1[a]=0; Y2[a]=0; IY[a]=0; YZ1[a]=0; YZ2[a]=0; IY1[a]=0; IY2[a]=0; In[a]=0; IFD[a]=0; LCOL[a]=0; // // ITAG[a]=0; LNXT[a]=0; NOZE[a]=0; NSEQ[a]=0; CE1[a]=0; CE2[a]=0; DP[a]=0; DQ[a]=0; } for(int j=1;j<=M;j++) { IG=IZA[j]; if(IG==0)
分享到:
收藏