⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 functions.c

📁 MC clerc的tribes PSO 解决TSP问题!
💻 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 + -