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

📄 genvacuum.cpp

📁 遗传算法源程序evolution calculates the law origin code ,C-C++,人工智能/AI-NN-PR
💻 CPP
字号:
//头文件:		GenVacuum.hpp
//目的:			多首领遗传算法类,本类采用自定义小生境技术,个体适合度
//				计算综合考虑个体评价函数以及个体间距离影响,即每代个体
//				适合度按如下方式计算:设Fit(i)为原个体适合度,FitN(i)
//				为新个体适合度,则新个体适合度如下:
//				FitN(0)=Fit(0)
//				FitN(i)=max(FitN(i-1)-1/(Fit(k)*D(k)))  k=i,i+1,...,n
//				D(k)=d(k,0)+d(k,1)+...+d(k,i-1)/i
//				式中:D(k)--个体k与前i-1个个体距离和
//					  d(k,m)--个体k与个体m的距离函数,表征个体间相似性
//				按上述方式计算个体适合度的目的在于使相似个体的适合度只
//				有一个能取较大值,这样保证最终适合度高的个体之间的相似
//				性较小,从而避免汇聚的发生
//语言:			VC++ 6.0
//时间:			2001年3月
//作者:			刘康
//环境:			Win32
//注意:			EvalVal(INIDIVIDUAL&)应由用户类覆盖,以提供正确的评价函数.
//////////////////////////////////////////////////////////////////////

#include "GenVacuum.hpp"

//重载总个体适合度计算函数
void GenVacuum::CalFitIndex()
{
	double *tmpFit;					//考虑距离后的新个体适合度
	tmpFit = new double[IndNumber];
	tmpFit[IndIndex[0]]=Individual[IndIndex[0]].Fit;//FitN[0]=Fit[0]
	for(int k=1; k<IndNumber; k++)	//其它个体
	{
		double alldis=0;
		alldis = Distance(Individual[IndIndex[k-1]],
						  Individual[IndIndex[k]]);
		if(alldis<=DisThrd)
			tmpFit[IndIndex[k]]=Individual[IndIndex[IndNumber-1]].Fit;
		else
			tmpFit[IndIndex[k]]=Individual[IndIndex[k]].Fit;
	}
	double allfit = 0;
	for(int i=0; i<IndNumber; i++)
	{
		allfit += tmpFit[i]-tmpFit[IndIndex[IndNumber-1]];
		FitIndex[i] = allfit;
	}
	delete tmpFit;
}
//距离函数
double GenVacuum::Distance(INDIVIDUAL &ind1,INDIVIDUAL &ind2)
{
	int sLong = 0;
	for(int i=1; i<=ind1.Chrom.GetLen(); i++)
		if(ind1.Chrom.GetInt(i,i)!=ind2.Chrom.GetInt(i,i))
			sLong++;
	return (double)sLong;
}

⌨️ 快捷键说明

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