📄 recombine3.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 + -