📄 read_benchmark.c
字号:
// ----------------------------------------------------------------------------- READ_BENCHMARK
void read_benchmark(FILE *f_problem, int funct, int D)
{
int d;
int dim[3]={10,30,50}; // The three possible matrix dimension for benchmark
int i,j,k;
int m;
int MM;
long double z;
long double zt[1000],zi[1000];
printf("\n-----------\n Read benchmark data");
// Benchmark bed. Read bias and shifts
funct=BM;
fscanf(f_problem, "%Lf",&z); fbias=z;
printf("\n fbias %LE",fbias);
m=100;
if(funct>=15) m=1000; // For 10-hybrid functions
if(funct!=12)
{
for(d = 0; d < m; d++)
{fscanf(f_problem, "%Lf",&z); fshift[d]=z;}
}
if(funct==5)
{
j=(int)ceil((double)D/4);
for(d=1;d<=j;d++) fshift[d-1]=-100;
j=(int)((double)(3*D)/4);
for(d=j;d<=D;d++) fshift[d-1]=100;
}
if(funct==8)
{
for(d=1;d<=D/2;d++) fshift[2*d-2]=-32;
}
//------------------
read_M=0; // Flag for linear transformation (matrix) or not
if(funct==3) read_M=1;
if(funct==5) // Read a matrix 100x100
{
read_M=2;
MM=100;
for(d = 0; d < MM; d++)
for(m = 0; m <MM ; m++)
{
fscanf(f_problem, "%Lf",&z); M[d][m]=z; // Matrix A
}
goto end;
}
if(funct==7) read_M=1;
if(funct==8) read_M=1;
if(funct==10) read_M=1;
if(funct==11) read_M=1;
if(funct==12) // Read two matrices 100x100 and vector alpha
{
read_M=2;
MM=100;
for(d = 0; d < MM; d++)
for(m = 0; m <MM ; m++)
{
fscanf(f_problem, "%Lf",&z); M[d][m]=z; // Matrix A
}
//printf("\n %f ",M[0][0]);
for(d = 0; d < MM; d++)
for(m = 0; m <MM; m++)
{
fscanf(f_problem, "%Lf",&z); M2[d][m]=z; // Matrix B
}
for(d = 0; d < MM; d++) // alpha
{
fscanf(f_problem, "%Lf",&z); fshift[d]=z;
}
goto end;
}
if(funct==14) read_M=1;
// Define lambda and sigma line
if(funct>=15 && funct<=17) BM_h=0;
if(funct==18) BM_h=1;
if(funct==19) BM_h=2;
if(funct==20) BM_h=1;
if(funct>=21 && funct<=23) BM_h=3;
if(funct>=24 && funct<=25) BM_h=4;
if(funct>=16)
{
read_M=0; // Matrices will be used differently (see benchmark.c)
// 10 matrices 10x10
for(k=0;k<10;k++)
for(d = 0; d < 10; d++)
for(m = 0; m <10 ; m++)
{
fscanf(f_problem, "%Lf",&z); MH[k][d][m]=z;
}
if(D<=10) goto scale;
// 10 matrices 30x30
for(k=0;k<10;k++)
for(d = 0; d < 30; d++)
for(m = 0; m <30 ; m++)
fscanf(f_problem, "%Lf",&z); MH[k][d][m]=z;
if(D<=30) goto scale;
// 10 matrices 50x50
for(k=0;k<10;k++)
for(d = 0; d < 50; d++)
for(m = 0; m <50 ; m++)
fscanf(f_problem, "%Lf",&z); MH[k][d][m]=z;
}
scale:
// Prepare weighting
if(funct>=15)
{
for (i=0;i<10;i++) // For each function
{
j=100*i;
for(d=0;d<D;d++) zt[j+d]=5./BM_lambda[BM_h][i];
}
}
if(funct>15)
{
for(d=0;d<1000;d++) zi[d]=zt[d]; // Temporary copy
for (k=0;k<10;k++) // For each function
{
j=100*k;
for (d=0;d<D;d++)
{
zt[d+j]=0;
for (i=0;i<D;i++) zt[j+d]=zt[j+d]+zi[j+i]*MH[k][i][d];
}
}
}
if(funct>=15 && funct<=17)
{
BM_fit[0]=rastrigin(D,zt,0); BM_fit[1]=rastrigin(D,zt,100);
BM_fit[2]=weierstrass(D,zt,200); BM_fit[3]=weierstrass(D,zt,300);
BM_fit[4]=griewank(D,zt,400); BM_fit[5]=griewank(D,zt,500);
BM_fit[6]=ackley(D,zt,600); BM_fit[7]=ackley(D,zt,700);
BM_fit[8]=sphere(D,zt,800); BM_fit[9]=sphere(D,zt,900);
}
if(funct>=18 && funct<=20)
{
BM_fit[0]=ackley(D,zt,0); BM_fit[1]=ackley(D,zt,100);
BM_fit[2]=rastrigin(D,zt,200); BM_fit[3]=rastrigin(D,zt,300);
BM_fit[4]=sphere(D,zt,400); BM_fit[5]=sphere(D,zt,500);
BM_fit[6]=weierstrass(D,zt,600); BM_fit[7]=weierstrass(D,zt,700);
BM_fit[8]=griewank(D,zt,800); BM_fit[9]=griewank(D,zt,900);
}
if(funct>=15) for(i=0;i<10;i++) BM_fit[i]=BM_C/BM_fit[i];
if(read_M==0) goto end;
// Read linear transformation matrix M
// On the data file, there are 3 matrices
// 10x10, 30x30 and 50x50
j=0;
read_M:
for(d = 0; d < dim[j]; d++)
{
for(m = 0; m <dim[j] ; m++)
{
fscanf(f_problem, "%Lf",&z); M[d][m]=z;
}
}
if(D>dim[j]) {j=j+1; goto read_M;}
end:
printf("\n Benchmark data have been read");
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -