资源简介

利用C++语言模拟遗传算法进行对Rosenbrocks函数的最小值求值。之前自动涨上去的,重新把积分减下来了

资源截图

代码片段和文件信息

// GA_work.cpp : 此文件包含 “main“ 函数。程序执行将在此处开始并结束。
//

#include “pch.h“
#include 
#include
#include 
#include 
#include 
using namespace std;

#define DIMESIONS 2    //维度N

const double Fmax = 97888.9;

int best_indexworst_index;
int gen = 0;
const int M = 50 T = 100 s = 17;//M代表群体大小,一般取20~100;T代表终止进化代数,一般取100~500
const double pc = 0.75 pm = 0.01;//pc交叉概率,一般取0.4~0.99;pm变异概率,一般取0.0001~0.1
const double Umax = 5.12 Umin = -5.12;  //argx[DIMESIONS]在[UminUmax]
double averagefit[T];
double min[T];
double max[T];

struct population      //定义每个个体的结构
{
int x[DIMESIONS][s];          //定义编码长度为17*DIMESIONS位,计算精度为1/10000
double argx[DIMESIONS];     //DIMESIONS 个变量的Rosenbrocks函数
double fit;          //每个个体的适应度
double sumfit;
double value;
//struct population *next;
}p[M]*best=&p[0]*worst=&p[0];


double bestIndividual = Fmax;
double worstIndividual = Fmax;

double currentBestIndividual = Fmax;
double currentWorstIndividual = Fmax;





void initial(); //初始化函数
void evalueFitness();//计算适应度
void select();//选择复制函数
void crossOver();//交叉函数
void mutation();//变异参数
void decoding();//解码函数
void print();//显示函数
void FindBestIndividual();
double RosenbrockFunc(population t);   //rosenbrocks函数
void getNextGeneration();
int setCharCode01();
double randR(double a double b);       //在区间(ab)内产生一个随机数r

/******************    遗传算法主函数          ******************/
int main()           //Umax=5.12Umin=-5.12
{
srand((unsigned)time(NULL));
initial();//随机获得初始解
decoding();//先解码
evalueFitness();//计算适应度值与累计适值
FindBestIndividual();
while (gen <= T)
{
cout << “*******************   第“ << gen + 1 << “代 **********************“ << endl;
cout << endl;
getNextGeneration();
gen++;
}
/*initial();//随机获得初始解
print();
//cout << “initialed!“ << endl;
decoding();//先解码
print();

evalueFitness();//计算适应度值与累计适值
//cout << “evalued!“ << endl;
print();
while (gen <= T)
{

cout << “\n\n\n$$$$$$$$$$$$      遗传算法第“ << gen + 1 << “ 代    &&&&&&&&&&&&&&“ << endl;
cout << endl;
cout << endl;
FindBestIndividual();
select();//执行选择操作
print();
decoding();
print();
evalueFitness();
//cout << “selected!“ << endl;
print();
crossOver();//执行交叉操作
print();
decoding();
evalueFitness();
//cout << “crossOvered!“ << endl;
print();
mutation();//执行变异操作
print();
decoding();
evalueFitness();
//cout << “mutated!“ << endl;
print();
FindBestIndividual();
gen++;
}
decoding();
evalueFitness();*/
//cout << “最后解为:“ < /*for (int i = 0; i < M; i++)
{
cout << “个体“ << i + 1 << “: “ << endl;
for (int m = 0; m < DIMESIONS; m++)
cout << “x“ << m+1 << “:“ << p[i].argx[m] << endl;
cout << “适度值:“ << p[i].fit << endl;
}*/
FindBestIndividual();
cout << “min:  “ << endl;
for (int k = 0; k < T; k++)
cout < cout << endl;
cout << “max:  “

评论

共有 条评论