📄 individual.cpp
字号:
// Individual.cpp: implementation of the Individual class.
//
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "GA.h"
#include "Individual.h"
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
Individual::Individual()
{
Chromosome=new Gene[MAX_GENE_NUM*2];
}
Individual::~Individual()
{
delete []Chromosome;
}
void Individual::ChroMutate()
{
int i,k,t;
int *temp=new int[MUTATION_NUMBER];
for(i=0;i<MUTATION_NUMBER;i++)
{
k=rand()%(MAX_GENE_NUM*2);
for(t=0;t<i;t++)
{
if(k==temp[t])
{
k=rand()%(MAX_GENE_NUM*2);
t=-1;
}
}
temp[i]=k;
(Chromosome+k)->Mutate();
}
}
void Individual::CountFitness()
{
int a=0,b=0;
for(int i=0;i<MAX_GENE_NUM;i++)
{
if((Chromosome+i)->gene)a+=(int)pow(2,i);
}
for(int j=MAX_GENE_NUM;j<MAX_GENE_NUM*2;j++)
{
if((Chromosome+j)->gene)b+=(int)pow(2,j-MAX_GENE_NUM);
}
x=LOWERLIMIT+a*(UPPERLIMIT-LOWERLIMIT)/(pow(2,MAX_GENE_NUM)-1);
y=LOWERLIMIT+b*(UPPERLIMIT-LOWERLIMIT)/(pow(2,MAX_GENE_NUM)-1);
Fitness=f1(x,y);
}
void Individual::CountFitness(double avg,double max,double min)
{
/* Fitness=(Fitness-avg)/(max-avg)+fabs((min-avg)/(max-avg));
Fitness=pow(Fitness,0.5);
// if(Fitness>=avg)Fitness=exp(Fitness-avg);
// else Fitness=exp(Fitness-avg);
Fitness=exp(Fitness);*/
}
void Individual::ChroCross(Individual &Ind)
{
int i,k,t;
int *temp=new int[CROSSOVER_NUMBER];
for(i=0;i<CROSSOVER_NUMBER;i++)
{
k=rand()%MAX_GENE_NUM;
for(t=0;t<i;t++)
{
if(k==temp[t])
{
k=rand()%MAX_GENE_NUM;
t=-1;
}
}
temp[i]=k;
}
for(i=0;i<CROSSOVER_NUMBER;i++)
{
((this->Chromosome)+temp[i])->Cross(*(Ind.Chromosome+temp[i]));
}
}
Individual& Individual::operator =(const Individual &indiv)
{
x=indiv.x;
y=indiv.y;
for(int i=0;i<MAX_GENE_NUM*2;i++)
{
*(Chromosome+i)=*(indiv.Chromosome+i);
}
return *this;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -