#include\x3ciostream\x3e#include\x3cmath\x3e#include\x3ctime\x3e#include\x3ccstdlib\x3e#include\x3cstring\x3eusing\x20namespace\x20std;class\x20Point{int\x20x;static\x20double\x20xmax;static\x20double\x20xmin;static\x20int\x20size;public:Point(){x\x3d\x20new\x20int[size];init();}static\x20void\x20set(int\x20isize,double\x20max,double\x20min){size\x3disize;xmax\x3dmax;xmin\x3dmin;}void\x20init(){for(int\x20i\x3d0;i\x3csize;i++){if((double)rand()/RAND_MAX\x3e0.5)x[i]\x3d1;else\x20x[i]\x3d0;}}double\x20decode(){double\x20va\x3d0.0;for(int\x20i\x3d0;i\x3csize;i++)va\x3dva\x2b\x20x[i]pow(2,size-i-1);va\x3dxmin\x2b(xmax-xmin)va/(pow(2,size)-1.0);return\x20va;}double\x20getFitness(){double\x20va\x3ddecode();double\x20y\x3dvasin(va10M_PI)\x2b2.0;return\x20y;}string\x20toString(){string\x20str\x3d"";str\x3dstr\x2bto_string(this->decode())\x2b","\x2bto_string(this->getFitness());return\x20str;}}double\x20Point::xmax;double\x20Point::xmin;int\x20Point::size;class\x20ES{Point**obj;//父代int\x20size;//种群规模public:ES(int\x20isize){size\x3disize;obj\x3dnew\x20Point*[size];init();}void\x20init(){for(int\x20i\x3d0;i\x3csize;i++){obj[i]\x3dnew\x20Point();}}void\x20mut(Pointa){int\x20pos\x3d0;pos\x3drand()%Point::size;a->x[pos]\x3d(a->x[pos]\x2b1)%2;}void\x20copy(Pointa,Pointb){for(int\x20i\x3d0;i\x3cPoint::size;i++){b->x[i]\x3da->x[i];}}int\x20getBestPos(){int\x20pos\x3d0;Pointtemp\x3dnew\x20Point();copy(obj[0],temp);for(int\x20i\x3d1;i\x3csize;i++){if(temp->getFitness()\x3cobj[i]->getFitness()){copy(obj[i],temp);pos\x3di;}}delete\x20temp;return\x20pos;}void\x20doAll(){Point*temp\x3dnew\x20Point();for(int\x20i\x3d0;i\x3csize;i++){copy(obj[i],temp);mut(temp);if(temp->getFitness()\x3eobj[i]->getFitness())copy(temp,obj[i]);}delete\x20temp;}~ES(){for(int\x20i\x3d0;i\x3csize;i++){delete\x20obj[i];}delete[]\x20obj;}}int\x20main(){srand((unsigned)time(NULL));Point::set(22,2.0,-1.0);ES\x20s(40);int\x20n\x3d0;int\x20bestPOS;while(n\x3c500){s.doAll();n++;}bestPOS\x3ds.getBestPos();for(int\x20i\x3d0;i\x3cs.size;i++)cout\x3cs.obj[i]->toString()\x3cendl;cout\x3c"Best: No."\x3cbestPOS\x3cendl;cout\x3cs.obj[bestPOS]->toString()\x3cendl;return\x200

C++ 演化算法实现:求解函数最大值

原文地址: https://www.cveoy.top/t/topic/fYsn 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录