資源簡介
改進的自適應交叉算子、變異算子,實現遺傳算法

代碼片段和文件信息
#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
- 上一篇:使用Qt實現的陰影映射源代碼
- 下一篇:VisualScope.rar
評論
共有 條評論