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

📄 problemdef.c

📁 多目标遗传算法的程序
💻 C
📖 第 1 页 / 共 2 页
字号:
#ifdef srnvoid test_problem (long double *xreal, long double *obj, long double *constr){    obj[0] = 2.0 + pow((xreal[0]-2.0),2.0) + pow((xreal[1]-1.0),2.0);    obj[1] = 9.0*xreal[0] - pow((xreal[1]-1.0),2.0);    constr[0] = 1.0 - (pow(xreal[0],2.0) + pow(xreal[1],2.0))/225.0;    constr[1] = 3.0*xreal[1]/10.0 - xreal[0]/10.0 - 1.0;    return;}#endif/*  Test problem TNK    # of real variables = 2    # of bin variables = 0    # of objectives = 2    # of constraints = 2    */#ifdef tnkvoid test_problem (long double *xreal, long double *obj, long double *constr){    obj[0] = xreal[0];    obj[1] = xreal[1];    if (xreal[1] == 0.0)    {        constr[0] = -1.0;    }    else    {        constr[0] = xreal[0]*xreal[0] + xreal[1]*xreal[1] - 0.1*cos(16.0*atan(xreal[0]/xreal[1])) - 1.0;    }    constr[1] = 1.0 - 2.0*pow((xreal[0]-0.5),2.0) + 2.0*pow((xreal[1]-0.5),2.0);    return;}#endif/*  Test problem CTP1    # of real variables = 2    # of bin variables = 0    # of objectives = 2    # of constraints = 2    */#ifdef ctp1void test_problem (long double *xreal, long double *obj, long double *constr){    long double g;    g = 1.0 + xreal[1];    obj[0] = xreal[0];    obj[1] = g*exp(-obj[0]/g);    constr[0] = obj[1]/(0.858*exp(-0.541*obj[0]))-1.0;    constr[1] = obj[1]/(0.728*exp(-0.295*obj[0]))-1.0;    return;}#endif/*  Test problem CTP2    # of real variables = 2    # of bin variables = 0    # of objectives = 2    # of constraints = 1    */#ifdef ctp2void test_problem (long double *xreal, long double *obj, long double *constr){    long double g;    long double theta, a, b, c, d, e;    long double exp1, exp2;    theta = -0.2*PI;    a = 0.2;    b = 10.0;    c = 1.0;    d = 6.0;    e = 1.0;    g = 1.0 + xreal[1];    obj[0] = xreal[0];    obj[1] = g*(1.0  - sqrt(obj[0]/g));    exp1 = (obj[1]-e)*cos(theta) - obj[0]*sin(theta);    exp2 = (obj[1]-e)*sin(theta) + obj[0]*cos(theta);    exp2 = b*PI*pow(exp2,c);    exp2 = fabs(sin(exp2));    exp2 = a*pow(exp2,d);    constr[0] = exp1/exp2 - 1.0;    return;}#endif/*  Test problem CTP3    # of real variables = 2    # of bin variables = 0    # of objectives = 2    # of constraints = 1    */#ifdef ctp3void test_problem (long double *xreal, long double *obj, long double *constr){    long double g;    long double theta, a, b, c, d, e;    long double exp1, exp2;    theta = -0.2*PI;    a = 0.1;    b = 10.0;    c = 1.0;    d = 0.5;    e = 1.0;    g = 1.0 + xreal[1];    obj[0] = xreal[0];    obj[1] = g*(1.0  - sqrt(obj[0]/g));    exp1 = (obj[1]-e)*cos(theta) - obj[0]*sin(theta);    exp2 = (obj[1]-e)*sin(theta) + obj[0]*cos(theta);    exp2 = b*PI*pow(exp2,c);    exp2 = fabs(sin(exp2));    exp2 = a*pow(exp2,d);    constr[0] = exp1/exp2 - 1.0;    return;}#endif/*  Test problem CTP4    # of real variables = 2    # of bin variables = 0    # of objectives = 2    # of constraints = 1    */#ifdef ctp4void test_problem (long double *xreal, long double *obj, long double *constr){    long double g;    long double theta, a, b, c, d, e;    long double exp1, exp2;    theta = -0.2*PI;    a = 0.75;    b = 10.0;    c = 1.0;    d = 0.5;    e = 1.0;    g = 1.0 + xreal[1];    obj[0] = xreal[0];    obj[1] = g*(1.0  - sqrt(obj[0]/g));    exp1 = (obj[1]-e)*cos(theta) - obj[0]*sin(theta);    exp2 = (obj[1]-e)*sin(theta) + obj[0]*cos(theta);    exp2 = b*PI*pow(exp2,c);    exp2 = fabs(sin(exp2));    exp2 = a*pow(exp2,d);    constr[0] = exp1/exp2 - 1.0;    return;}#endif/*  Test problem CTP5    # of real variables = 2    # of bin variables = 0    # of objectives = 2    # of constraints = 1    */#ifdef ctp5void test_problem (long double *xreal, long double *obj, long double *constr){    long double g;    long double theta, a, b, c, d, e;    long double exp1, exp2;    theta = -0.2*PI;    a = 0.1;    b = 10.0;    c = 2.0;    d = 0.5;    e = 1.0;    g = 1.0 + xreal[1];    obj[0] = xreal[0];    obj[1] = g*(1.0  - sqrt(obj[0]/g));    exp1 = (obj[1]-e)*cos(theta) - obj[0]*sin(theta);    exp2 = (obj[1]-e)*sin(theta) + obj[0]*cos(theta);    exp2 = b*PI*pow(exp2,c);    exp2 = fabs(sin(exp2));    exp2 = a*pow(exp2,d);    constr[0] = exp1/exp2 - 1.0;    return;}#endif/*  Test problem CTP6    # of real variables = 2    # of bin variables = 0    # of objectives = 2    # of constraints = 1    */#ifdef ctp6void test_problem (long double *xreal, long double *obj, long double *constr){    long double g;    long double theta, a, b, c, d, e;    long double exp1, exp2;    theta = 0.1*PI;    a = 40.0;    b = 0.5;    c = 1.0;    d = 2.0;    e = -2.0;    g = 1.0 + xreal[1];    obj[0] = xreal[0];    obj[1] = g*(1.0  - sqrt(obj[0]/g));    exp1 = (obj[1]-e)*cos(theta) - obj[0]*sin(theta);    exp2 = (obj[1]-e)*sin(theta) + obj[0]*cos(theta);    exp2 = b*PI*pow(exp2,c);    exp2 = fabs(sin(exp2));    exp2 = a*pow(exp2,d);    constr[0] = exp1/exp2 - 1.0;    return;}#endif/*  Test problem CTP7    # of real variables = 2    # of bin variables = 0    # of objectives = 2    # of constraints = 1    */#ifdef ctp7void test_problem (long double *xreal, long double *obj, long double *constr){    long double g;    long double theta, a, b, c, d, e;    long double exp1, exp2;    theta = -0.05*PI;    a = 40.0;    b = 5.0;    c = 1.0;    d = 6.0;    e = 0.0;    g = 1.0 + xreal[1];    obj[0] = xreal[0];    obj[1] = g*(1.0  - sqrt(obj[0]/g));    exp1 = (obj[1]-e)*cos(theta) - obj[0]*sin(theta);    exp2 = (obj[1]-e)*sin(theta) + obj[0]*cos(theta);    exp2 = b*PI*pow(exp2,c);    exp2 = fabs(sin(exp2));    exp2 = a*pow(exp2,d);    constr[0] = exp1/exp2 - 1.0;    return;}#endif/*  Test problem CTP8    # of real variables = 2    # of bin variables = 0    # of objectives = 2    # of constraints = 2    */#ifdef ctp8void test_problem (long double *xreal, long double *obj, long double *constr){    long double g;    long double theta, a, b, c, d, e;    long double exp1, exp2;    g = 1.0 + xreal[1];    obj[0] = xreal[0];    obj[1] = g*(1.0  - sqrt(obj[0]/g));    theta = 0.1*PI;    a = 40.0;    b = 0.5;    c = 1.0;    d = 2.0;    e = -2.0;    exp1 = (obj[1]-e)*cos(theta) - obj[0]*sin(theta);    exp2 = (obj[1]-e)*sin(theta) + obj[0]*cos(theta);    exp2 = b*PI*pow(exp2,c);    exp2 = fabs(sin(exp2));    exp2 = a*pow(exp2,d);    constr[0] = exp1/exp2 - 1.0;    theta = -0.05*PI;    a = 40.0;    b = 2.0;    c = 1.0;    d = 6.0;    e = 0.0;    exp1 = (obj[1]-e)*cos(theta) - obj[0]*sin(theta);    exp2 = (obj[1]-e)*sin(theta) + obj[0]*cos(theta);    exp2 = b*PI*pow(exp2,c);    exp2 = fabs(sin(exp2));    exp2 = a*pow(exp2,d);    constr[1] = exp1/exp2 - 1.0;    return;}#endif

#ifdef dtlz1
void test_problem (long double *xreal, long double *obj, long double *constr)
{
	
	long double sum=0;
	long double gx;
	int i;
	for(i=2;i<nreal;i++)
		sum+=(xreal[i]-0.5)*(xreal[i]-0.5)-cos(20*PI*(xreal[i]-0.5));
	gx=100*(sum+nreal-3+1)+1;
    obj[0]=0.5*xreal[0]*xreal[1]*gx;
    obj[1]=0.5*xreal[0]*(1-xreal[1])*gx;
	obj[2]=0.5*(1-xreal[0])*gx;
	
}
#endif


#ifdef dtlz2
void test_problem (long double *xreal, long double *obj, long double *constr)
{
	
	long double sum=0;
	long double gx;
	int i;
	for(i=2;i<nreal;i++)
		sum+=pow((xreal[i]-0.5),2.0);
	gx=1.0+sum;
    obj[0]=gx*cos(xreal[0]*PI/2.0)*cos(xreal[1]*PI/2.0);
    obj[1]=gx*cos(xreal[0]*PI/2.0)*sin(xreal[1]*PI/2.0);
	obj[2]=gx*sin(xreal[0]*PI/2.0);
	
}
#endif

/* num real=2;num bin=0;constr=1;obj=2;*/
#ifdef tanaka
void test_problem (long double *xreal, long double *obj, long double *constr)
{
	long double a,b;
	a=0.1;
	b=32.0;
	obj[0]=xreal[0];
	obj[1]=xreal[1];
	constr[0]=-1.0+pow(xreal[0],2.0)+pow(xreal[1],2.0)-(a*cos(b*atan(xreal[0]/xreal[1])));
}
#endif

/* num real=2;num bin=0;constr=1;obj=3;*/
#ifdef tamaki
void test_problem (long double *xreal, long double *obj, long double *constr)
{
	obj[0]=xreal[0];
	obj[1]=xreal[1];
	obj[2]=xreal[2];
	constr[0]=1.0-pow(xreal[0],2.0)-pow(xreal[1],2.0)-pow(xreal[2],2.0);
}
#endif

/* num real=6;num bin=0;constr=6;obj=2;*/
//注:该测试函数几乎不能收敛,
#ifdef osyczka
void test_problem (long double *xreal, long double *obj, long double *constr)
{
	obj[0]=-(25*pow((xreal[0]-2),2.0)+pow((xreal[1]-2),2.0)+pow((xreal[2]-1),2.0)
		+pow((xreal[3]-4),2.0)+pow((xreal[4]-1),2.0));
	obj[1]=pow(xreal[0],2.0)+pow(xreal[1],2.0)+pow(xreal[2],2.0)+pow(xreal[3],2.0)
		+pow(xreal[4],2.0)+pow(xreal[5],2.0);
	constr[0]=(xreal[0]+xreal[1])/2.0-1.0;
	constr[1]=1.0-(xreal[0]+xreal[1])/6.0;
	constr[2]=1.0+(xreal[0]-xreal[1])/2.0;
	constr[3]=1.0-(xreal[0]+3*xreal[1])/2.0;
	constr[4]=1.0-(pow((xreal[2]-3),2.0)+xreal[3])/4.0;
	constr[5]=(pow((xreal[4]-3),2)+xreal[5])/4.0-1.0;
}
#endif


/* num real=2;num bin=0;constr=0;obj=3;*/
#ifdef mop7
void test_problem (long double *xreal, long double *obj, long double *constr)
{
	obj[0]=pow((xreal[0]-2.0),2.0)/2.0+pow((xreal[1]+1.0),2.0)/13.0+3.0;
	obj[1]=pow((xreal[0]+xreal[1]-3.0),2.0)/36.0+pow((-xreal[0]+xreal[1]+2.0),2.0)-17.0;
	obj[2]=pow((xreal[0]+2.0*xreal[1]-1.0),2.0)/175.0+pow((-xreal[0]+2.0*xreal[1]),2.0)/17.0-13.0;
}
#endif

#ifdef IG
void test_problem (long double *xreal, long double *obj, long double *constr)
{
obj[0]=sqrt((0.17024000000000000000000000000000*(9500000.0*pow(xreal[1],2.0)*xreal[0]
			+82935000.0*pow(xreal[1],3.0)+905028187500.0*pow(xreal[1],2.0)+19300.0*pow(xreal[0],3.0)
			+168489.0*pow(xreal[0],2.0)*xreal[1]+74205000.0*pow(xreal[0],2.0))/xreal[1]/(109709089700.0*xreal[0]
			+957760353081.0*xreal[1]+9543996395744850.0)));
obj[1]=sqrt((266000.0*(19600.0*xreal[0]+7069222864989.0*xreal[1])/xreal[1]/(109709089700.0*xreal[0]
			+957760353081.0*xreal[1]+9543996395744850.0)));
//obj[2]=sqrt((84950721257500000000000000.000000*pow(xreal[1],3.0)*xreal[0]
//			-69034228911308564750000000000.000*pow(xreal[0],2.0)*xreal[1]
//			-653240235327750000000000000000.00*pow(xreal[1],2.0)*xreal[0]
//			-0.71284840680140718750000000000000e34*xreal[0]*xreal[1]+741619796577975000000000000.00000*pow(xreal[1],4.0)
//			+8092926030157152187500000000000.0*pow(xreal[1],3.0)+172584096870500000000000.000000*pow(xreal[0],3.0)*xreal[1]
//			+1506659165679465000000000.000000*pow(xreal[0],2.0)*pow(xreal[1],2.0)
// 			+24231560937500000000000000000.000*xreal[1]*(8362129/8*xreal[0]+7300138617/800*xreal[1]+90502818750)));
obj[2] = sqrt(8264141345021879/620193277542400000000000000000000.0/xreal[1])*(-3155850464516962959579783500432051200.0*pow(xreal[0],2.0)
			  -29862410757840000375425631246090240000.0*xreal[0]*xreal[1]+831997519352133401011449138346441939353600.0*xreal[0] 
			  +3883461543200000048822280729395200.0*pow(xreal[1],2)*xreal[0]+ 33902619272136000426218510767620096.0*pow(xreal[1],3)
			  +369962332807184104651109498751654297600.0*pow(xreal[1],2)+ 7889558714080000386334195712000.0*pow(xreal[0],3)
			  +68875847573918409321308388488825.0*pow(xreal[0],2)*xreal[1]+ 10108214500001855044191910155044458699161600.0*xreal[1]
			  +100252551659709366783941132863586351185920000000.0)/(942393904670861.0*xreal[0]+8227098787776616.0*xreal[1]+81982304785732009984.0);

constr[0] =1.0/2.0/PI*sqrt(xreal[0]/1250.0)-1.0;
constr[1] =1.0-(1.0/2.0/PI*sqrt(xreal[0]/1250.0))/1.5;
constr[2] =(xreal[1]/(2*sqrt(1250.0*xreal[0])))/0.2-1.0;
constr[3] =1.0-(xreal[1]/(2*sqrt(1250.0*xreal[0])))/0.45;
constr[4] =1.0-(sqrt(266000.0*(19600.0*xreal[0]+7069222864989.0*xreal[1])/xreal[1]/(109709089700.0*xreal[0]
				+957760353081.0*xreal[1]+9543996395744850.0)))/(0.08/3.0);
/*constr[4] = 1.0-(sqrt(8264141345021879/620193277542400000000000000000000/xreal[1]*(-3155850464516962959579783500432051200*pow(xreal[0],2.0)
			  -29862410757840000375425631246090240000*xreal[0]*xreal[1]+831997519352133401011449138346441939353600*xreal[0] 
			  +3883461543200000048822280729395200*pow(xreal[1],2)*xreal[0]+ 33902619272136000426218510767620096*pow(xreal[1],3)
			  +369962332807184104651109498751654297600*pow(xreal[1],2)+ 7889558714080000386334195712000*pow(xreal[0],3)
			  +68875847573918409321308388488825*pow(xreal[0],2)*xreal[1]+ 10108214500001855044191910155044458699161600*xreal[1]
			  +100252551659709366783941132863586351185920000000)/(942393904670861*xreal[0]+8227098787776616*xreal[1]+81982304785732009984))/18914.0)/(1.0/3.0); */



}

#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -