• 大小: 2KB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2021-05-07
  • 语言: 其他
  • 标签: 遗传算法  

资源简介

改进的自适应交叉算子、变异算子,实现遗传算法

资源截图

代码片段和文件信息

#include 
#include
#include
#include
#define POPSIZE 500
#define maximization 1
#define minimization 2
#define cmax 100
#define cmin 0
#define length1 10
#define length2 10
#define chromlength length1+length2  //染色体长度
 int functionmode=maximization;
 int popsize;        //种群大小
int maxgeneration;  //最大世代数
 double pc;          //交叉率
 double pm;          //变异率
struct individual
     {
      char  chrom[chromlength+1];
double value;         
double fitness;      //适应度
};
int generation;      //世代数
int best_index;
int worst_index;
struct individual bestindividual;  //最佳个体
struct individual worstindividual; //最差个体
struct individual currentbest;
struct individual population[POPSIZE];
//函数声明                                       
void generateinitialpopulation();                 
void generatenextpopulation();
void evaluatepopulation();
long decodechromosome(char *intint);
void calculateobjectvalue();
void calculatefitnessvalue();
void findbestandworstindividual();
void performevolution();
void selectoperator();
void crossoveroperator();
void mutationoperator();
void input();
void outputtextreport();

void generateinitialpopulation( )  //种群初始化
{
int ij;
for (i=0;i {
for(j=0;j {
population[i].chrom[j]=(rand()%10<5)?‘0‘:‘1‘;
}
population[i].chrom[chromlength]=‘\0‘;
}
}
void generatenextpopulation()  //生成下一代
{
selectoperator();
crossoveroperator();
mutationoperator();
}
void evaluatepopulation()   //评价个体,求最佳个体
{
calculateobjectvalue();
calculatefitnessvalue();
findbestandworstindividual();
}
long decodechromosome(char *string int pointint length) //给染色体解码
{
int i;
long decimal=0;
char*pointer;
for(i=0pointer=string+point;i if(*pointer-‘0‘)

{decimal +=(long)pow(2i);
}
return (decimal);

}
void calculateobjectvalue()  //计算函数值
{
int i;
long temp1temp2;
    double x1x2;

for (i=0; i {
 temp1=decodechromosome(population[i].chrom0length1);
         temp2=decodechromosome(population[i].chromlength1length2);
         x1=4.096*temp1/1023.0-2.048;
         x2=4.096*temp2/1023.0-2.048;
population[i].value=100*(x1*x1-x2)* (x1*x1-x2)+(1-x1)*(1-x1);
}
}
void calculatefitnessvalue()//计算适应度
{
int  i;
double temp;
   for(i=0;i   {
 if(functionmode==maximization)
   {if((population[i].value+cmin)>0.0)
  {temp=cmin+population[i].value;}
 else
 {temp=0.0;
   }
   }
else if (functionmode==minimization)
 {
   if(population[i].value      {temp=cmax-population[i].value;}
    else{ temp=0.0;}
}
population[i].fitness=temp;
}
}
void findbestandworstindividual( ) //求最佳个体和最差个体
{
int i;
double sum=0.0;

bestindividual=population[0];
worstindividual=population[0];

for (i=1;i if (population[i].fitness>bestindividual.fitness){
bestindividual=population[i];
best_inde

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件       6418  2010-11-26 09:19  genetic.cpp

----------- ---------  ---------- -----  ----

                 6418                    1


评论

共有 条评论