• 大小: 5KB
    文件类型: .cpp
    金币: 1
    下载: 0 次
    发布日期: 2021-06-01
  • 语言: C/C++
  • 标签: 遗传算法  

资源简介

遗传算法实现Rosenbrock函数的求解过程,对遗传算法有一个比较详细和简练的代码编写,对于初学者来说很容易看懂!

资源截图

代码片段和文件信息

#include 
#include “time.h“
#include “stdlib.h“
#include 
using namespace std;

const int M=8T=3;//M种群大小,T终止代数
const double pc=0.6pm=0.01;//pc交叉概率pm变异概率


struct population      //定义群体结构
{
int x[20];
double x1x2;
double fit;
double sumfit;
}p[M];


void initial(population *);//初始化函数
void evaluefitness(population *);//计算适应度
void select(population *);//选择复制函数
void crossover(population *);//交叉函数
void mutation(population *);//变异参数
void decoding(population *);//解码函数
void print(population *);//显示函数


int main()//遗传算法主函数
{
int gen=0;
initial(&p[0]);//随机获得初始解
cout<<“initialed!“< print(&p[0]);
decoding(&p[0]);//先解码
cout<<“decoded!“< print(&p[0]);
evaluefitness(&p[0]);//计算适应度值与累计适值
cout<<“evalued!“< print(&p[0]);
while(gen<=T)
{
cout<<“gen=“< select(&p[0]);//执行选择操作
decoding(&p[0]);
evaluefitness(&p[0]);
cout<<“selected!“< print(&p[0]);
crossover(&p[0]);//执行交叉操作
decoding(&p[0]);
evaluefitness(&p[0]);
cout<<“crossovered!“< print(&p[0]);
mutation(&p[0]);//执行变异操作
decoding(&p[0]);
evaluefitness(&p[0]);
cout<<“mutated!“< print(&p[0]);
gen++;
}
decoding(&p[0]);
evaluefitness(&p[0]);
cout<<“最后得出的满意解为:“< for(int i=0;i cout<<“x1:“< return 0;
}



///////////////初始化函数//////////////////
int rand01()//用于随机取0或1的函数
{
int r;
double q;
q=rand()/(RAND_MAX+0.0);
if(q<0.5)
r=0;
else
r=1;
return r;
}

void initial(population *t)//群体初始化函数
{
int j;
population *po;
srand(time(0));
for(po=t;po for(j=0;j<20;j++)
(*po).x[j]=rand01();
}


/////////////////////计算适应值函数////////////////
void evaluefitness(population *t)//计算适应值函数
{
double fx1x2temp=0.0;
population *po*po2;
for(po=t;po {
x1=(*po).x1;
x2=(*po).x2;
f=100.0*(x1*x1-x2*x2)*(x1*x1-x2*x2)+(1.0-x1)*(1.0-x1);
(*po).fit=f;
}
for(po=t;po {
for(po2=t;po2<=po;po2++)
temp=temp+(*po2).fit;
(*po).sumfit=temp;
temp=0.0;
}
}


/////////////////选择复制函数/////////////////////////
double randab(double a double b)//在区间(ab)内产生一个随机数
{
double cr;
c=b-a;
r

评论

共有 条评论