⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 genegroup.cpp

📁 本程序为遗传算法示范程序(visaul c++ 源程序)
💻 CPP
字号:
// GeneGroup.cpp: implementation of the CGeneGroup class.
// 遗传算法实现:基因组类,鲍捷,1999-05-21
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "TestGA.h"
#include "GeneGroup.h"

#include "math.h"

#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif

pp * oldpop;
pp * newpop;
pp * p1;

unsigned int gen,
			 nmutation,
			 ncross,
			 jcross,
			 maxpp,
			 minpp,
			 jrand;
float		 sumfitness,
			 avg,
			 max,
			 min,
			 seed,
			 rj[MAX_POP],
			 oldrand[MAX_POP];
double coef;

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

CGeneGroup::CGeneGroup()
{
	m_nPopSize = 0;
	m_nChromLen = 0;
	m_nMaxGen = 0;
	m_fPCross = 0.0f;
	m_fPMutation = 0.0f;

}

CGeneGroup::~CGeneGroup()
{

}

//1999-05-21,鲍捷,个体适应度计算
float CGeneGroup::ObjFunc(float x)
{
	float y =  (float)sin(2.0 * 3.1415 * x);
			//此处用 sin(x) * sin(x)
	return y*y;
}

//1999-05-21,鲍捷,贝努利试验
int CGeneGroup::Flip(float probability)
{
	float ppp =  float(rand()/RAND_MAX);
	return (ppp <= probability)?1:0;
}

//1999-05-21,鲍捷,群体适应度统计
void CGeneGroup::Statistics(pp *pop)
{
	sumfitness = pop[0].fitness;
	min = pop[0].fitness;
	max = pop[0].fitness;
	maxpp = 0;
	minpp = 0;
	for(int j = 1; j < m_nPopSize ; j++)
	{
		sumfitness += pop[j].fitness;
		if(pop[j].fitness > max)
		{
			max = pop[j].fitness;
			maxpp = j ;
		}
		if(pop[j].fitness < min)
		{
			min = pop[j].fitness;
			minpp = j ;
		}
	}
	avg = sumfitness/(float)m_nPopSize;
}

//1999-05-22,鲍捷,群体更新
void CGeneGroup::Generation()
{
	unsigned int mate1,mate2;
	int j = 0;
	do{
		mate1 = Select();
		mate2 = Select();
		CrossOver(oldpop[mate1].chrom ,oldpop[mate2].chrom , j);
		newpop[j].x = (float)Decode(newpop[j].chrom);
		newpop[j].fitness = ObjFunc(newpop[j].x);
		newpop[j].parent1 = mate1;
		newpop[j].parent2 = mate2;
		newpop[j].xsite = jcross;
		newpop[j+1].x = (float)Decode(newpop[j+1].chrom);
		newpop[j+1].fitness = ObjFunc(newpop[j+1].x);
		newpop[j+1].parent1 = mate1;
		newpop[j+1].parent2 = mate2;
		newpop[j+1].xsite = jcross;
		j+=2;
	}while(j < m_nPopSize);

}

//1999-05-22,鲍捷,选择操作
int CGeneGroup::Select()
{
	double rand1,partsum;
	int j = 0 ;
	partsum = 0.0;
	rand1 = 
}

//1999-05-22,鲍捷,根据时间设定随机数种子
void CGeneGroup::Randomize()
{
	srand( (unsigned)time( NULL ) );//设置随机数种子
}


//1999-05-22,鲍捷,返回一个在(0 - nMax)之间的随机数
double CGeneGroup::Random(UINT nMax)
{
	return rand() * nMax / RAND_MAX;
}

//1999-05-22,鲍捷,重新启动随机数发生器
void CGeneGroup::Randomize1()
{
	Randomize();
	for(int i = 0 ; i < m_nChromLen ; i++)
	{

	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -