# include <iostream.h>
# include <math.h>
# include <stdlib.h>
void main(){
int a[50][8];
int i=0,j=0;
int rand(),x;
int WJC=0;
double P[24]={6.452,5.995,5.657,5.379,5.273,5.289,7.047,11.568,20.398,24.538,26.855,27.922,27.335,26.997,
27.754,27.719,27.016,22.649,19.615,17.565,16.116,12.556,9.039,7.684};
double Q[24]={-1.697,-1.930,-2.104,-2.253,-2.214,-2.167,-1.248,1.17,6.136,8.377,9.630,10.027,9.793,9.411,
9.667,9.750,9.788,7.941,6.151,4.791,4.154,1.879,0.419,-1.366};
double U1[24]={108.427,108.570,108.999,109.230,109.066,109.066,108.273,108.956,110.705,110.792,110.913,111.342,
111.342,110.847,111.145,111.255,111.749,110.595,111.430,111.507,111.683,109.131,108.635,108.229};
int hour=0;
double aaa[24],bbb[24],ccc[24],ddd[24];
for(hour=0;hour<=23;hour++){
int b[8]={1,0};
for (i=0;i<=49;i++) {
for (j=0;j<=7;j++){
x=rand();
if (x%2==1) x=1;
else x=0;
a[i][j]=x;
}
}
for(i=0;i<=49;i++){
if(a[i][0]==1) {
for(j=1;j<=3;j++) a[i][j]=0;
}
}
//for (i=0;i<=49;i++)
//for (j=0;j<=7;j++){
//cout<<a[i][j]<<' ';
//if (j%7==0&&j!=0) cout<<endl;
//} //*生成初始解50组*//
//cout<<"上述为输出50组初始解"<<endl;
// cout<<endl;
//cout<<endl;
//cout<<endl;
//cout<<endl;
for(WJC=0;WJC<40;WJC++){
double a1,a2,A,c[50];
int Y=0,X=0,m,n;
int N1=0,N2=0;
int N1max=10,N2max=4;
//cout<<"惩罚系数"<<endl;
//cout<<endl;
for (m=0;m<=49;m++){
Y=0;
X=0;
for (n=0;n<=3;n++) {
Y=X+a[m][n];
X=2*Y;
}
N1=Y;
if (N1<=3) a1=1;
else if ((N1>3)&&(N1<=N1max)) a1=1-0.05*(N1-3)/(N1max-3);
else a1=0.1;
N2=0;
for (n=4;n<=7;n++){
if(a[m][n]!=b[n]) N2++;
}
if (N2<=4) a2=1;
else if ((N2>4)&&(N2<=N2max)) a2=1-0.05*(N2-4)/(N2max-4);
else a2=0.1;
A=a1*a2;
c[m]=A;
//if(WJC==39){
//cout<<c[m]<<endl;
//} //*计算惩罚系数*//
}
double Ue=10,d[50];
double Su,K,U2[50],Z;
//cout<<"电压的满意度计算"<<endl;
//cout<<endl;
for (m=0;m<=49;m++){
Y=0;
X=0;
for (n=0;n<=3;n++){
Y=X+a[m][n];
X=Y*2;
}
if (Y==8) K=11.5;
else if (Y==7) K=11.375;
else if (Y==6) K=11.25;
else if (Y==5) K=11.125;
else if (Y==4) K=11;
else if (Y==3) K=10.875;
else if (Y==2) K=10.75;
else if (Y==1) K=10.625;
else K=10.5;
U2[m]=(U1[hour]+sqrt(U1[hour]*U1[hour]+152*K))/(2*K);
if (U2[m]>=Ue) Z=(U2[m]-Ue)/Ue;
else Z=(Ue-U2[m])/Ue;
if (Z<=0.1) Su=1-5*Z;
else Su=0;
d[m]=Su;
//cout<<"二次侧电压:"<<U2[m]<<endl;
//cout<<d[m]<<endl;
}
//*电压的满意度*//
double Qmax=5,Qmin=-3,Q0=0;
double Sq,e[50],glys[50],P1[50],Q1[50];
int N3=0;
double AA,BB;
//cout<<"与无功有关的满意度"<<endl;
//cout<<endl;
for (m=0;m<=49;m++) {
N3=0;
for (n=4;n<=7;n++){
if(a[m][n]!=0) N3++;
}
P1[m]=2*(P[hour]*P[hour]+(Q[hour]-2*N3)*(Q[hour]-2*N3))/(U1[hour]*U1[hour]);
Q1[m]=25*(P[hour]*P[hour]+(Q[hour]-2*N3)*(Q[hour]-2*N3))/(U1[hour]*U1[hour]);
AA=(P[hour]+P1[m])*(P[hour]+P1[m])+(Q[hour]+Q1[m]-2*N3)*(Q[hour]+Q1[m]-2*N3);
BB=sqrt(AA);
glys[m]=(P[hour]+P1[m])/BB;
Sq=glys[m];
e[m]=Sq;
//cout<<e[m]<<endl;
//if(WJC==39){
//cout<<"功率因数"<<' ';
//cout<<glys[m]<<endl;
//cout<<"有功功率损耗"<<P1<<endl;
//cout<<"无功功率损耗"<<Q1<<endl;
//cout<<endl;
//}
} //*无功的满意度*//
double f[50],g[50],S,temp=0;
double Smax=0;
int dz[50];
//cout<<"满意度的输出"<<endl;
//cout<<endl;
for(m=0;m<=49;m++){
S=c[m]*(0.5*d[m]+0.5*e[m]);
f[m]=S;
g[m]=S;
//cout<<f[m]<<endl;
}
if(WJC==39){
for(i=0;i<=49;i++){
if(Smax<=f[i]) Smax=f[i];
}
//cout<<"满意度的最大值"<<endl;
//cout<<Smax<<endl;
for(i=0;i<=49;i++)
{
if(f[i]==Smax) {
//cout<<i<<endl;
for(j=0;j<=7;j++) {
dz[j]=a[i][j];
}
//cout<<dz[j];
//if(j==7) cout<<endl;
aaa[hour]=glys[i];
bbb[hour]=P1[i];
ccc[hour]=Q1[i];
ddd[hour]=U2[i];
cout<<hour<<endl;
cout<<"电容器投入组数"<<N2<<endl;
cout<<"功率因数"<<glys[i]<<endl;
cout<<"有功损耗"<<P1[i]<<endl;
cout<<"无功损耗"<<Q1[i]<<endl;
cout<<"二次侧电压"<<U2[i]<<endl;
cout<<endl;
break;
}
}
}
//*带惩罚因子的综合满意度*//
bool noswap;
//cout<<"满意度的升序输出"<<endl;
//cout<<endl;
for (m=0;m<=49;m++){
noswap=true;
for(n=49;n>m;n--){
if(f[n]<=f[n-1]) {
temp=f[n];
f[n]=f[n-1];
f[n-1]=temp;
noswap=false;
}
}
if(noswap) break;
}
//if(WJC==49){
//for(i=0;i<=49;i++){
//cout<<f[i]<<endl;
//} //*升序的满意度*//
//}
//cout<<"输出满意度前二十名(可以并列)的抗体,即合适解"<<endl;
//cout<<endl;
int h[50][8],jj=0;
for(m=0;m<=49;m++){
for(n=49;n>=29;n--){
if(g[m]==f[n]) {
jj++;
for(i=0;i<=7;i++) {
h[jj-1][i]=a[m][i];
//cout<<a[m][i]<<' ';
//if (i%7==0&&i!=0) cout<<endl;
}
break;}
}
}
//*选出优秀的抗体直接到下一代*//
//cout<<"找出剩余的抗体"<<endl;
//cout<<endl;
int k[50][8],ii=0;
for(m=0;m<=49;m++){
for(n=28;n>=0;n--){
if(g[m]==f[n]){
ii++;
for(i=0;i<=7;i++) {
k[ii-1][i]=a[m][i];
//cout<<a[m][i]<<' ';
//if (i%7==0&&i!=0) cout<<endl;
}
break;}
}
} //*找出剩余的抗体*//
//cout<<"选出10个抗体进行变异"<<endl;
//cout<<endl;
for(m=0;m<=9;m++){
if(k[m][2]==0) {if(k[m][0]==0) k[m][2]=1;
else k[m][2]=0;
}
else k[m][2]=0;
}
for(m=0;m<=9;m++){for(i=0;i<=7;i++){
//cout<<k[m][i]<<' ';
//if(i%7==0&&i!=0) cout<<endl;
}
} //*变异的抗体*//
//cout<<"剩余的抗体进行交叉"<<endl;
//cout<<endl;
for(m=10;m<=ii-1;m++){
for(i=4;i<=7;i++){
k[m][i]=h[m-10][i];
}
}
for(m=10;m<=ii-1;m++){
for(i=0;i<=7;i++){
//cout<<k[m][i]<<' ';
//if(i%7==0&&i!=0) cout<<endl;
}
}
//*交叉后的抗体*//
//cout<<"将优秀遗传、变异、交叉后的抗体输出"<<endl;
//cout<<endl;
for(m=jj;m<=49;m++){
for(i=0;i<=7;i++) {
h[m][i]=k[m-jj][i];
}
}
if(WJC==38)
for(m=0;m<=49;m++){
for(i=0;i<=7;i++){
//cout<<h[m][i]<<' ';
//if(i%7==0&&i!=0) cout<<endl;
}
} //*输出新一代的抗体*//
for(m=0;m<=49;m++){
for(i=0;i<=7;i++) {
a[m][i]=h[m][i];
}
} //*循环,对新抗体进行优化*//
for(m=0;m<=7;m++){
b[m]=dz[m]; }
}//(WJC)
}//(hour)
double aa=0,bb=0,cc=0,dd=0;
for(hour=0;hour<24;hour++){
aa+=aaa[hour];
bb+=bbb[hour];
cc+=ccc[hour];
dd+=ddd[hour];
}
cout<<"功率因数的平均值"<<(aa/24)<<endl;
cout<<"有功损耗的平均值"<<(bb/24)<<endl;
cout<<"无功损耗的平均值"<<(cc/24)<<endl;
cout<<"电压的平均值"<<(dd/24)<<endl;
}//(main)