📄 problemdef.c
字号:
#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 + -