xover3.cpp

来自「c++语言实现的遗传算法的例子,需要的快下啊」· C++ 代码 · 共 89 行

CPP
89
字号
// Xover3.cpp: implementation of the Xover3 class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "Xover3.h"

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

XOver3::XOver3(int n,Rand * r,double p):XOver(n,r,p)
{

}

void XOver3::xover(Popular * parent1,Popular * parent2,Popular * child1,Popular * child2)
{
    int alpha,beita;
    int i,j;
	double * pop[4];
	pop[0]=parent1->GetPop();
	pop[1]=parent2->GetPop();
	if(rand->random(1)<px)
	{
		pop[2]=new double[nvars];
		pop[3]=new double[nvars];
//		FILE * file ;
//		file=fopen("2.zn","w");
		alpha=rand->randint(nvars);
		do{
			beita=rand->randint(nvars);
		}while(alpha==beita);
		if(alpha>beita)
		{
			int temp=alpha;
			alpha=beita;
			beita=temp;
		}
		for(i=0;i<beita-alpha;i++)
		{
			pop[2][i]=pop[0][alpha+i];
			pop[3][i]=pop[1][alpha+i];
		}
		int m=beita-alpha;
		int n=beita-alpha;
		for(i=0;i<nvars;i++)
		{
			int a=0,b=0;
			for(j=0;j<beita-alpha;j++)
			{
				if(pop[0][i]==pop[3][j])
					a=1;
				if(pop[1][i]==pop[2][j])
					b=1;
			}
			if(a==0)
			{
				pop[3][n]=pop[0][i];
				n++;
			}
			if(b==0)
			{
				pop[2][m]=pop[1][i];
				m++;
			}
		}
//		fprintf(file,"%f    %f    %f\n",pop[2][i],pop[3][i],alpha);
//	for(int i=0;i<nvars;i++)
//		fclose(file);
 		child1->SetPop(pop[2]);
		child2->SetPop(pop[3]);
		delete[] pop[2];
		delete[] pop[3];
	}
	else
	{
		child1->SetPop(pop[0]);
		child2->SetPop(pop[1]);
	}
	for(i=0;i<2;i++)
		delete[] pop[i];
}

XOver3::~XOver3()
{

}

⌨️ 快捷键说明

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