📄 functions.c
字号:
/*
WARNING
If you modify something, be sure this is still consistent
with the benchmark bed
*/
long double ackley(int D, long double z[], int shift)
{
long double f,f1,f2,zz;
int d;
f1=0; f2=0;
for(d=0;d<D;d++)
{
zz=z[d+shift];
f1=f1+zz*zz;
f2=f2+cos(two_pi*zz);
}
f=-20*exp(-0.2*sqrt(f1/D))-exp(f2/D)+20+E;
return f;
}
long double elliptic(int D,long double z[],int shift)
{
long double f,zz;
int d;
f=0;
for(d=0;d<D;d++)
{
zz=z[d+shift];
f=f+pow(1.0e6,(double)d/(double)(D-1))*zz*zz;
// f=f+pow(30,d/(D-1.))*zz*zz; // Less distorted
//f=f+zz*zz; // Like Sphere/parabola
}
return f;
}
long double griewank(int D,long double z[],int shift)
{
long double f,f1,f2,zz;
int d;
f1=0; f2=1;
for(d=0;d<D;d++)
{
zz=z[d+shift];
f1=f1+zz*zz;
f2=f2*cos(zz/sqrt((long double)(d+1)));
}
f=f1/4000-f2+1;
return f;
}
long double griewank_rosenbrock(int D, long double z[], int shift)
{ // Rotated expanded
long double f,f2,x1,x2;
int d,j;
f=0;
for (d=0;d<D;d++)
{
j=d+shift;
x1=z[j];
j=j+1; if(d==D-1) j=shift;
x2=z[j];
f2=100*pow(x1*x1-x2,2)+pow(x1-1,2);
f=f+f2*f2/4000-cos(f2)+1;
}
return f;
}
long double rastrigin(int D,long double z[],int shift)
{
long double f,zz;
int d;
int k=10;
f=0;
for (d=0;d<D;d++)
{
zz=z[d+shift];
f=f+zz*zz- k*cos(two_pi*zz);
}
f=f+D*k;
return f;
}
long double rosenbrock(int D, long double z[],int shift)
{
long double f,f1,f2,zz;
int d;
f1=0; f2=0;
for (d=0;d<D-1;d++)
{
zz=z[d+shift];
f1=f1+pow(zz*zz-z[d+shift+1],2);
f2=f2+pow(zz-1,2);
}
f=100*f1+f2;
return f;
}
long double scaffer_f6(int D, long double z[],int shift)
{
// Rotated expanded
long double f,x,y,zz;
int d,j;
f=0;
for (d=0;d<D;d++)
{
j=d+shift;
x=z[j];
j=j+1; if(d==D-1) j=shift;
y=z[j];
zz=x*x+y*y;
f=f+(pow(sin(sqrt(zz)),2)-0.5)/pow(1+0.001*zz,2);
}
f=f+D*0.5;
return f;
}
long double sphere(int D,long double z[],int shift)
{
long double f,zz;
int d;
f=0;
for(d=0;d<D;d++)
{
zz=z[d+shift];
f=f+zz*zz;
}
return f;
}
long double weierstrass(int D, long double z[],int shift)
{
double a=0.5;
long double ak;
double b=3;
long double bk;
long double f,f1,f2,zz;
int d,k;
int kmax=20;
f=0;
for( d=0;d<D;d++)
{
zz=z[d+shift]+0.5;
f1=0;
for (k=0;k<=kmax;k++)
{
ak=pow(a,k); bk=two_pi*pow(b,k);
f1=f1+ak*cos(bk*zz);
}
f=f+f1;
}
f2=0;
for (k=0;k<=kmax;k++)
{
ak=pow(a,k); bk=two_pi*pow(b,k);
f2=f2+ak*cos(bk*0.5);
}
f=f-D*f2;
return f;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -