lineardup.cpp

来自「遗传算法的VC实现(经典」· C++ 代码 · 共 46 行

CPP
46
字号
//头文件:		LinearDup.hpp
//目的:			为没有重复个体的稳态再生遗传算法提供基类,本类为LinearSteady的派生类
//语言:			VC++ 6.0
//时间:			1999年7月
//作者:			刘康
//环境:			Win32
//注意:			EvalVal(INIDIVIDUAL&)应由用户类覆盖,以提供正确的评价函数.
//////////////////////////////////////////////////////////////////////

#include "LinearDup.hpp"

//重复个体检查函数
bool LinearDup::IndividualDup(INDIVIDUAL& ind)
{
	bool dup = false;
	int i = 0;
	while(!dup && i<IndNumber)
	{
		if(ind.Chrom==Individual[i].Chrom) dup=true;
		i++;
	}
	return dup;
}
//进行一代再生
void LinearDup::Generation()
{
	CurrentChild = 0;
	if(Elitism==ELITISM) GenElitism();
	while(CurrentChild < ChildrenNum-1)
	{
		if(OperatorSelect()==1 || CurrentChild>=ChildrenNum-1)
			GenMutation();
		else
			GenCross();
	}
	int chi = 0;
	for(int i=0; i<ChildrenNum; i++)
	{
		if(!IndividualDup(Children[i]))
		{
			Individual[IndIndex[IndNumber-chi-1]].Chrom = Children[i].Chrom;
			chi++;
		}
	}
	Prepare();
}

⌨️ 快捷键说明

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