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

📄 recombine3.cpp

📁 c++语言实现的遗传算法的例子,需要的快下啊
💻 CPP
字号:
// Recombine3.cpp: implementation of the Recombine3 class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "Recombine3.h"

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

Recombine3::Recombine3(int s,Select * select,XOver * x,Mutate * m,Coding * c,Adaptability * a,int d,int signal,FILE * f1,FILE * f2,MaintainSequence * main):Recombine(s,select,x,m,c,a,d,signal,f1,f2)
{
	newpop=new Popular *[2];
	maintain=main;
/*	if(signal==1)
		for(int i=0;i<2;i++)
			newpop[i]=new Popular1(c,a,d);
	if(signal==2)
		for(int i=0;i<2;i++)
			newpop[i]=new Popular2(c,a,d);*/
	if(signal==3)
		for(int i=0;i<2;i++)
			newpop[i]=new Popular3(c,a,d);
}

void Recombine3::NewPop(Rand * rand)
{
	int s1,s2;
	int i=0;
	while(i<scale)
	{
		sel->GetProportion(pop);
		s1=sel->SelectPop(rand);
		s2=sel->SelectPop(rand);
		while(s2==s1)
			s2=sel->SelectPop(rand);
		xover->xover(pop[s1],pop[s2],newpop[0],newpop[1]);
		mutate->Mutation(newpop[0],rand);
		mutate->Mutation(newpop[1],rand);
		maintain->Maintain(newpop[0]);
		int temp=sel->SelectWorst(pop);
		if(pop[temp]->GetAdapt()<newpop[0]->GetAdapt())
		{
			pop[temp]->SetPop(newpop[0]);
			if(gb<newpop[0]->GetAdapt())
				gb=newpop[0]->GetAdapt();
			break;
		}
		maintain->Maintain(newpop[1]);
		if(pop[temp]->GetAdapt()<newpop[1]->GetAdapt())
		{
			pop[temp]->SetPop(newpop[1]);
			if(gb<newpop[1]->GetAdapt())
				gb=newpop[1]->GetAdapt();
			break;
		}
		i+=2;
	}
	for(i=0;i<scale;i++)
		pop[i]->store(file1,file2);
}

Recombine3::~Recombine3()
{
	for(int i=0;i<2;i++)
	{
		delete newpop[i];
	}
	delete[] newpop;
}

⌨️ 快捷键说明

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