📄 myfun.c
字号:
#include "headfile.h"#include "global.h"#include "myfun.h"#include "mem_loc.h"#define PAI 3.1415926535897float mf8(FMATRIX loca, int a){ float result; float x1, x2; x1=loca[0][a]+5; x2=loca[1][a]+5; result=pow(sin(2*PAI*x1),3)*sin(2*PAI*x2)/(pow(x1,3)*(x1+x2));; return (float) result;}float f6(FMATRIX loca, int a){/* This is the f6 function as described in the Handbook of Genetic Algorithms, p.8*/ float num, denom, f6; float errorf6; num=(sin(sqrt((loca[0][a]*loca[0][a])+(loca[1][a]*loca[1][a])))) * (sin(sqrt((loca[0][a]*loca[0][a])+(loca[1][a]*loca[1][a])))) - 0.5; denom=(1.0 + 0.001 * ((loca[0][a] * loca[0][a]) + (loca[1][a]*loca[1][a]))) * (1.0 + 0.001 * ((loca[0][a] * loca[0][a]) + (loca[1][a]*loca[1][a]))); f6= (float) 0.5 - (num/denom); errorf6=1 - f6; return (float)errorf6;}float sphere(FMATRIX loca, int a, int b){ /* This is the familiar sphere model int a: index of particles b:dimension */ float result; int i; result=0.0; for (i=0;i<b;i++) { result += loca[i][a]*loca[i][a]; } return (float)result;}float rosenbrock(FMATRIX loca, int a, int b){ /* this is the Rosenbrock function a: index of the particles; b:dimension */ int i; float result; result=0.0; for (i=1;i<b;i++) { result +=100.0*(loca[i][a]-loca[i-1][a]*loca[i-1][a])*(loca[i][a]-loca[i-1][a]*loca[i-1][a]) + (loca[i-1][a]-1)*(loca[i-1][a]-1); } return (float)fabs(result);}float rastrigrin(FMATRIX loca, int a, int b){ /* This is the generalized Rastrigrin function a:index of the particles; b:dimension */ int i; float result; result=0.0; for (i=0;i<b;i++) { result +=loca[i][a]*loca[i][a] - 10.0*cos(2.0*PAI*loca[i][a])+10.0; } return (float)result;}float griewank(FMATRIX loca, int a,int b){ /* This is the generalized Griewank function a:index of the particles; b:dimension */ int i; float result_s,result_p; result_s=0.0; result_p=1.0; for (i=0;i<b;i++) { result_s +=loca[i][a]*loca[i][a]; result_p *=cos(loca[i][a]/sqrt(i+1)); } result_s =result_s/4000.0 - result_p +1; return (float)result_s;}float ackley(FMATRIX loca, int a,int b){ /* This is the ackley function a:index of the particles; b:dimension */ int i; float result_s,result_p; result_s=0.0; result_p=0.0; for (i=0;i<b;i++) { result_s +=loca[i][a]*loca[i][a]; result_p +=cos(2*PAI*loca[i][a]); } result_s = -20*exp(-0.2*sqrt(result_s/b))-exp(result_p/b)+20+exp(1); return (float)result_s;}float mf2(FMATRIX locabefore, int a, int b){ int i; float result; float result_opt, value1,value2, value3; float result_cons1; float result_cons2; FVECTOR loca;// printf("test"); FVectorAllocate(&loca,b); for (i=0; i<b; i++) { loca[i] = locabefore[i][a]+5; } //solve optimum function value1=0; value2=1; value3=0; for (i=0; i<b; i++) { value1 += pow(cos(loca[i]),4.0); } for (i=0; i<b; i++) { value2 *= pow(cos(loca[i]),2.0); } for (i=0; i<b; i++) { value3 += i*pow(loca[i],2.0); } result_opt = -1*fabs((value1-2.0*value2)/sqrt(value3)); //solve first cons function result_cons1 = 1; for (i=0; i<b; i++) { result_cons1 *= loca[i]; } result_cons1 -= 0.75; //solve second cons function result_cons2 = 0; for (i=0; i<b; i++) { result_cons2 += loca[i]; } result_cons2 -= 7.5*b; if (result_cons1<0 || result_cons2>0) { result = 0.75-result_cons1+150+result_cons2; } else { result = result_opt; }// printf("%f, %f, %f, %f\n", result_opt, result_cons1, result_cons2, result); return (float)result;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -